【发布时间】:2013-12-24 15:50:53
【问题描述】:
我一直在尝试了解如何将 SVG 剪辑路径应用于 HTML 元素,但遇到了一些奇怪的问题。
这里是小提琴:http://jsfiddle.net/jakemcgraw/8hr99/
<div id="diamond1" class="diamond">
<div id="clip1">
<div></div>
</div>
</div>
<div id="diamond2" class="diamond">
<div id="clip2">
<div></div>
</div>
</div>
<div id="diamond3" class="diamond">
<div id="clip3">
<div></div>
</div>
</div>
<svg>
<defs>
<clippath id="relative_path">
<polygon points="50% 0, 100% 50%, 50% 100%, 0 50%"></polygon>
</clippath>
</defs>
</svg>
<svg>
<defs>
<clippath id="absolute_path">
<polygon points="100 0, 200 100, 100 200, 0 100"></polygon>
</clippath>
</defs>
</svg>
css:
#clip1 {
-webkit-clip-path: polygon( 50% 0, 100% 50%, 50% 100%, 0 50% );
-moz-clip-path: polygon( 50% 0, 100% 50%, 50% 100%, 0 50% );
-o-clip-path: polygon( 50% 0, 100% 50%, 50% 100%, 0 50% );
clip-path: polygon( 50% 0, 100% 50%, 50% 100%, 0 50% );
}
#clip2 {
-webkit-clip-path: url(#relative_path);
-moz-clip-path: url(#relative_path);
-o-clip-path: url(#relative_path);
clip-path: url(#relative_path);
}
#clip3 {
-webkit-clip-path: url(#absolute_path);
-moz-clip-path: url(#absolute_path);
-o-clip-path: url(#absolute_path);
clip-path: url(#absolute_path);
}
需要注意的几点:
内联剪辑路径 css 声明仅适用于 Chrome 和 Opera。
具有相对尺寸(即 50%)的 SVG 似乎根本不适用于任何浏览器。
具有绝对尺寸的 SVG 仅适用于 Firefox。
请注意,第二个和第三个元素在 Chrome 和 Opera 中完全消失了。现在,看看这个小提琴:http://jsfiddle.net/jakemcgraw/7S5Lk/
这个在 Firefox 中可以正常工作,但在 Chrome 和 Opera 中,10px 的边距移动了底层元素,但不是剪辑。 SVG clipPath 尺寸似乎作为一个整体应用于文档,而不是相关元素。
不出所料,这两个小提琴在 IE10 中都不起作用。我已经看到 SVG 在 IE10 中工作,所以唯一的问题可能是 SVG 和 HTML 的混合?不确定。
请注意,两者都在 Safari 中不起作用。
我的实现有错吗?有没有合适的方法来混合 SVG 剪辑路径和我缺少的 HTML 元素?
【问题讨论】: