首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用url()函数引用SVG效果

不使用url()函数引用SVG效果
EN

Stack Overflow用户
提问于 2020-10-01 15:37:16
回答 1查看 336关注 0票数 1

我们使用Svelte/Sapper前端与客户端路由。当用户在不同的页面之间导航时,页面上的SVG有时会出现故障.示例:

(问题末尾的SVG源)

这种故障是由于使用HTML标记和用CSS <base>函数引用线性梯度效应造成的。这将导致SVG中无效的URL (基+元素id),并且不会应用效果。

与我的问题有关的问题:

那么,我的问题是:为了完全避免这个问题,url() 可以引用这样的效果,而不需要中继url()函数。

哈基溶液

我通过监听动画事件的结束,然后在setTimeout中添加和删除<svg>元素中的display: inline-block;来解决这个问题。这迫使浏览器重新呈现它,并在每次动画之后修复故障。这显然是一个棘手的解决方案,需要大量的技术债务。如果我找到了解决这个问题的不同/更好的方法,我会给出不同的答案。

SVG图标源:

代码语言:javascript
复制
<svg xmlns="http://www.w3.org/2000/svg" style="fill: currentColor;" class="w-8 h-8" viewBox="0 0 24 24">
  <defs>
    <path id="a" d="M12 10.3L2.4 1v22l9.6-9.2 1.8-1.8 5.4-5.2v10.5l-3.7-3.5-1.8 1.7 7.9 7.6V1L12 10.3zm-7.1 6.9V6.8l5.4 5.2-5.4 5.2z">
    </path>
  </defs>
  <clipPath id="b">
    <use href="#a" overflow="visible"></use>
  </clipPath>
  <g clip-path="url(#b)">
    <linearGradient id="c" gradientUnits="userSpaceOnUse" x1="-732.18" y1="294.75" x2="-731.55" y2="294.75" gradientTransform="scale(47.46 -47.46) rotate(45 -9.66 1030.9)">
      <stop offset="0" stop-color="#201351"></stop>
      <stop offset=".25" stop-color="#201351"></stop>
      <stop offset=".39" stop-color="#620f3c"></stop>
      <stop offset=".53" stop-color="#990b2a"></stop>
      <stop offset=".65" stop-color="#c1081e"></stop>
      <stop offset=".74" stop-color="#d90716"></stop>
      <stop offset=".8" stop-color="#e20613"></stop>
      <stop offset="1" stop-color="#e20613"></stop>
    </linearGradient>
    <path fill="url(#c)" d="M-8.6 12L12-8.6 32.6 12 12 32.6z"></path>
  </g>
</svg>
EN

回答 1

Stack Overflow用户

发布于 2020-10-01 17:00:25

最干净的解决方案是在静态地址引用来自一个SVG精灵文件的所有图标。

例如,https://example.com/assets/sprite.svg会引用<symbol>元素中的图标标记:

代码语言:javascript
复制
<svg xmlns="http://www.w3.org/2000/svg">
    <!-- use the viewBox from your icon <svg> element -->
    <symbol id="unique-icon" viewBox="0 0 24 24">
        <!-- quote everything inside your icon <svg> element -->
    </symbol>
    <!-- more icons -->
</svg>

图标的用法如下所示:

代码语言:javascript
复制
 <svg><use xlink:href="https://example.com/assets/sprite.svg#unique-icon></svg>`.

注意,您仍然可以将样式应用于该<use>元素,该元素将由阴影DOM中的图标标记继承。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64158682

复制
相关文章

相似问题

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