首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果从外部svg-sprite文件中使用,则忽略svg中的掩码标记。

如果从外部svg-sprite文件中使用,则忽略svg中的掩码标记。
EN

Stack Overflow用户
提问于 2022-04-27 11:32:33
回答 1查看 267关注 0票数 1

我正试图在我的项目中使用sprite,它运行得很好,除非您在雪碧中使用掩码标记:

公众/私人/服务:

代码语言:javascript
复制
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="0" height="0">
  <defs>

    <symbol viewBox="0 0 16 16" id='pharmacy'>
      <mask id="pathOne" fill="white">
        <path fill-rule="evenodd" clip-rule="evenodd" d="M11 2H5V5L2 5V11H5V14H11V11H14V5H11V2Z"/>
      </mask>
      <path d="M5 2V1H4V2H5ZM11 2H12V1H11V2ZM5 5V6H6V5H5ZM2 5L2 4L1 4V5H2ZM2 11H1V12H2V11ZM5 11H6V10H5V11ZM5 14H4V15H5V14ZM11 14V15H12V14H11ZM11 11V10H10V11H11ZM14 11V12H15V11H14ZM14 5H15V4H14V5ZM11 5H10V6H11V5ZM5 3H11V1H5V3ZM6 5V2H4V5H6ZM2 6L5 6V4L2 4L2 6ZM3 11V5H1V11H3ZM5 10H2V12H5V10ZM6 14V11H4V14H6ZM11 13H5V15H11V13ZM10 11V14H12V11H10ZM14 10H11V12H14V10ZM13 5V11H15V5H13ZM11 6H14V4H11V6ZM10 2V5H12V2H10Z" fill="#171717" mask="url(#pathOne)"/>
    </symbol>

  </defs> 
</svg>

src/App.js:

代码语言:javascript
复制
export default function App() {
  return (
    <div className="App">

      <svg width="16px" height="16px">
        <use href="/sprite.svg#pharmacy" />
      </svg>
      
    </div>
  );
}

所以问题是,在所有的浏览器中,掩码都被忽略了,而你却得到了错误的图像。奇怪的是,当您使用内联svg或将您的sprite放入标记中时,一切都正常。问题可能出在babel,因为我签了香草JS,这是一样的。有人能帮我吗?

https://codesandbox.io/s/epic-darwin-0n5uk5

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-28 13:42:55

目前,外部clipPaths元素中不支持掩码或<use>

作为解决办法,您可以使用css mask-image属性。您可以通过数据Url包括掩码形状,也可以使用外部文件。

外部: mask.svg

代码语言:javascript
复制
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
    <path d="M11 2H5V5L2 5V11H5V14H11V11H14V5H11V2Z" />
</svg>

css:

代码语言:javascript
复制
.masked-external {
  -webkit-mask-image: url("mask.svg");
  mask-image: url("mask.svg");
  -webkit-mask-size: cover;
  mask-size: cover;
}

来自数据Url的掩码:

代码语言:javascript
复制
.masked {
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M11 2H5V5L2 5V11H5V14H11V11H14V5H11V2Z' /%3E%3C/svg%3E");
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M11 2H5V5L2 5V11H5V14H11V11H14V5H11V2Z' /%3E%3C/svg%3E");
    -webkit-mask-size: cover;
    mask-size: cover;
}

代码语言:javascript
复制
<svg class="masked" viewBox="0 0 16 16">
     <use href="sprite.svg#pharmacy" />
</svg>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72027981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档