gpt4 book ai didi

css - 为什么样式不适用于 Firefox 中的 svg 元素?

转载 作者:行者123 更新时间:2023-12-04 03:02:05 25 4
gpt4 key购买 nike

我想将 CSS 样式应用于 SVG 内的 SVG 元素 <defs>元素。虽然在 Chrome 和 Internet Explorer(版本 11)中,以下代码可以正常工作,但在 Firefox 中却不能。如何将样式应用于 defs 中的 SVG 元素也在 Firefox 中?

#symbolcontainer.green #mysymbol { fill: green; }
<svg>
<g id="symbolcontainer" class="green">
<defs>
<g id='mysymbol'>
<defs>
<circle id="myCircle" r="2" cx="2" cy="2"/>
</defs>
<use href="#myCircle"/>
</g>
</defs>
<use href="#mysymbol" />
</g>
</svg>

在 chrome 和 Internet Explorer 中,圆圈为绿色(已应用样式),而在 Firefox 中为黑色(未应用样式)。
查看并测试此 fiddle .
我在 stackoverflow 上搜索了“svg firefox style defs”,但没有找到我的问题的答案。

最佳答案

在 SVG 中,如果 cross the shadow-element boundary 不应用 2 样式.

影子树由 <use> 创建元素并由 <use> 的元素(及其子元素)的“阴影”组成。元素指向。

换句话说,如果您有一个复杂的选择器(一个包含 2 个或更多元素)并且其中一个元素从主文档中选择,而另一个在 use 元素的子元素中选择,则不会应用它。

让我们看看你的选择器。

  • 符号容​​器在主文档
  • mysymbol 在影子树中,它被克隆到 <use>元素。

  • 因此该选择器在符合 SVG 2 的实现中不应该做任何事情。

    如果您想要应用某种样式,只需将选择器设置为一个或另一个部分,这样它就不会跨越边界。例如。

    #symbolcontainer.green { fill: green; }
    <svg viewBox="0 0 5 5">
    <g id="symbolcontainer" class="green">
    <defs>
    <g id='mysymbol'>
    <defs>
    <circle id="myCircle" r="2" cx="2" cy="2"/>
    </defs>
    <use href="#myCircle"/>
    </g>
    </defs>
    <use href="#mysymbol" />
    </g>
    </svg>


    Firefox 实现了 SVG 2 规范的这一部分,其他浏览器可能会在某个时候 catch 并实现它。

    关于css - 为什么样式不适用于 Firefox 中的 svg 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48367069/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com