我有一个内嵌的svg和一个在标题上的背景图片。我使用css clip-path来“剪切"svg动画,如下图所示。
我在火狐和Chrome中都有很好的效果,但是Safari根本不应用任何剪切/掩蔽。
在开始这个项目之前,我检查了caniuse规范,它说明了适用于Chrome的相同规则和例外情况,我只是先用Chrome进行了测试,它工作正常,所以我继续计算Safari也会有同样的待遇。
我一直在挠头,试图找出如何让剪报在Safari中正常工作,但无济于事。
我如何让这个在Safari中工作?笔供参考:https://codepen.io/H0BB5/pen/Xpawgp
HTML
<clipPath id="cross">
<rect y="110" x="137" width="90" height="90"/>
<rect x="0" y="110" width="90" height="90"/>
<rect x="137" y="0" width="90" height="90"/>
<rect x="0" y="0" width="90" height="90"/>
</clipPath>
字符串
CSS
#clipped {
margin-bottom: 20px;
clip-path: url(#cross);
}
型
6条答案
按热度按时间puruo6ea1#
你需要
-webkit-
前缀。我可以在你的CSS和JS中添加-webkit-
前缀后,确认你的圆圈和插入选项在Safari中工作。如果使用
-webkit-
前缀,CanIUse.com报告部分支持Safari: http://caniuse.com/#search=clip-pathCSS:
字符串
JS:
型
分叉CodePen:https://codepen.io/techsock/pen/JEyqvM
更新
看起来这可能是Safari的
clip-path
实现的问题。有一个关于clip-path
的webkit问题的**Master Bug**报告。在JSFiddle中,Safari偶尔会正确呈现包含多个rect
元素的SVG剪辑路径,但并不可靠(见下面的截图)。似乎没有一个非常可靠的解决方案。在你从www.example.com上提取的MDN页面上也有说明https://developer.mozilla.org/en-US/docs/Web/CSS/clip-path#Browser_compatibility。MDN将Safari列为No Support
。JSFiddle行为截图:
错误
错误
错误正确
pkmbmrz72#
只需要添加
-webkit-
前缀:字符串
uqjltbpv3#
tl;dr:在应用clip-path的元素上使用
transform: translateZ(0);
。我最近遇到了一个类似的问题,一个引用的SVG剪辑路径在Safari中无法正确渲染。我仍然不确定问题的原因是什么,但强制元素到自己的合成器层似乎可以解决这个问题。
任何强制元素在其自己的层上呈现的属性都可以。
transform: translateZ(0);
个will-change: transform;
个等等.
edit:这是在基于Webkit的浏览器中使用正确前缀的基础上。
inn6fuwd4#
对我来说,我的问题是,我有我的
IMG
标记与position:relative
iyfjxgzm5#
我发现这个问题不会发生在storybook中,因为storybook将其组件 Package 在Iframe中。
这促使我测试我的理论,你瞧,你可以通过将你的组件 Package 在iframe中来修复safari上的剪辑路径问题。
我建议看看这篇文章上接受的答案:How to set iframe content of a react component
i34xakig6#
我在Safari 12中使用clip-path失败了。
我成功地使用了mask-image:
字符串