【发布时间】:2012-03-14 03:47:41
【问题描述】:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:x="http://www.w3.org/1999/xlink"
viewBox="0 0 353 150">
<defs>
<clipPath id="walk0"><rect width="44" height="70" /></clipPath>
<image id="img" x:href="http://phrogz.net/tmp/walking-girl2.png"
width="353" height="70" />
</defs>
<use x:href="#img" clip-path="url(#walk0)" />
<use x:href="#img" y="80" clip-path="url(#walk0)" />
</svg>
目的是将spritesheet的两个副本剪辑到同一区域,第二个副本向下80个单位。这在 Firefox 中按预期工作(剪切路径在 y 偏移之前应用)。但是,在 Chrome 和 Safari 中,不会显示第二张图像。 (剪切路径使用全局 SVG 单位空间,因此显示图像的空白区域。)
1) 哪种浏览器是正确的?,或
2) 实现此目标的最简单、基于标准的方法是什么?
我可以通过using wrapping <g> elements with transforms 解决这个问题;这适用于 Firefox 和 Chrome。但我希望有一种更简单的方法可以以正确且跨浏览器的方式实现相同的结果。
FWIW,我也尝试在clipPath 上设置clipPathUnits="objectBoundingBox",但这总是会产生未剪辑的图像。即使我用显式的viewBox、height 和width 将<image> 包裹在<symbol> 中,并用<use> 而不是<image> 引用它,情况也是如此。要么我不明白objectBoundingBox 应该如何工作,要么目前对它的支持已被破坏。答案肯定是前者而不是后者。 ;)
【问题讨论】:
-
Opera 显示一个图像,如 Safari。可能值得在 bugzilla 中提出一个错误,以便我们可以更详细地研究它,因为它很可能是 Firefox 问题。
标签: svg