webkit 上的 clipPath 不呈现

Posted

技术标签:

【中文标题】webkit 上的 clipPath 不呈现【英文标题】:clipPath on webkit does not render 【发布时间】:2021-12-03 16:54:13 【问题描述】:

受到this article 的热情,我尝试将渐变剪辑路径应用到我相对简单的形状(转换为曲线的 O 字母)。

它在 Firefox 下完美运行,但我一在 webkit 下尝试它,我什么也看不到。

我已尝试修复它,我已将其拆分为简单的部分,并尝试使用我的 Amit Sheen 代码,唯一使其失败的是使用我的路径而不是他的路径。如果我不使用 clipPath,路径会按预期呈现,但一旦我剪辑它,它就会消失。我不知道是什么问题。

你能帮帮我吗?

.gradient 
    width: 157px;
    height: 157px;
    background: linear-gradient(90deg, rgba(6,94,115,0.7959383582534576) 0%, rgba(207,241,255,1) 100%); 
    border-radius: 50%;
<svg viewBox="0 0 1000 400" xmlns="http://www.w3.org/2000/svg">

    <clipPath id="clip">
        <path d="M547.923,151.764C504.147,151.764 471.027,185.46 471.027,228.372C471.027,270.996 504.147,304.98 547.923,304.98C591.987,304.98 625.107,270.996 625.107,228.372C625.107,185.46 591.987,151.764 547.923,151.764ZM547.923,269.844C523.731,269.844 508.467,251.124 508.467,228.372C508.467,205.62 523.731,186.9 547.923,186.9C572.403,186.9 587.667,205.62 587.667,228.372C587.667,251.124 572.403,269.844 547.923,269.844Z" />
    </clipPath>
    
    <foreignObject x="470" y="150"   clip-path="url(#clip)">
        <div class="gradient" xmlns="http://www.w3.org/1999/xhtml"></div>
    </foreignObject>

</svg>

【问题讨论】:

在 Firefox 和 Safari 上对我来说看起来一样。 你是对的。它在chrome和brave上失败了,所以我认为问题来自webkit,这是错误的 你应该在here寻找它,如果你已经找不到它,请报告它。 【参考方案1】:

您可能需要转换路径,使其左上角落在点 (0,0) 中。这在 chrome 中是必需的,但在 Firefox 中不起作用,除非异物具有 x="0" y="0"。出于这个原因,我没有将 x 和 y 属性赋予外来对象,而是将其翻译到需要的位置。

svgbackground:silver
<svg viewBox="0 0 1000 400">

  <foreignObject   transform="translate(471,151)" clip-path="url(#clip)">
    <div style="height:100%;background:gold"> </div>
  </foreignObject>

  <clipPath id="clip">
    <path id="p" transform="translate(-471,-151)" d="M547.923,151.764C504.147,151.764 471.027,185.46 471.027,228.372C471.027,270.996 504.147,304.98 547.923,304.98C591.987,304.98 625.107,270.996 625.107,228.372C625.107,185.46 591.987,151.764 547.923,151.764ZM547.923,269.844C523.731,269.844 508.467,251.124 508.467,228.372C508.467,205.62 523.731,186.9 547.923,186.9C572.403,186.9 587.667,205.62 587.667,228.372C587.667,251.124 572.403,269.844 547.923,269.844Z" />
  </clipPath>


</svg>

【讨论】:

非常感谢。你知道这是否有理由与 chrome、firefox 和 safari 不同? 一定是bug。如果您愿意,可以进行研究。

以上是关于webkit 上的 clipPath 不呈现的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CSS 过渡期间防止 Webkit 文本呈现变化

如何在 CSS 过渡期间防止 Webkit 文本呈现变化

将 clipPath 应用到带有变换的 Image 元素时出现问题

总结下web开发中基础性的常识

Safari 不呈现 CSS 渐变文本

Webkit iOS 5上的自定义Javascript事件不起作用