【问题标题】:Using a clipping path with a positioned object in Webkit在 Webkit 中使用带有定位对象的剪切路径
【发布时间】:2012-03-14 03:47:41
【问题描述】:

考虑this simple SVG file

<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 &lt;g&gt; elements with transforms 解决这个问题;这适用于 Firefox 和 Chrome。但我希望有一种更简单的方法可以以正确且跨浏览器的方式实现相同的结果。

FWIW,我也尝试在clipPath 上设置clipPathUnits="objectBoundingBox",但这总是会产生未剪辑的图像。即使我用显式的viewBoxheightwidth&lt;image&gt; 包裹在&lt;symbol&gt; 中,并用&lt;use&gt; 而不是&lt;image&gt; 引用它,情况也是如此。要么我不明白objectBoundingBox 应该如何工作,要么目前对它的支持已被破坏。答案肯定是前者而不是后者。 ;)

【问题讨论】:

  • Opera 显示一个图像,如 Safari。可能值得在 bugzilla 中提出一个错误,以便我们可以更详细地研究它,因为它很可能是 Firefox 问题。

标签: svg


【解决方案1】:

区分这些的最简单、符合标准的方法是使用the SVG test suite provided by W3.org。该套件提供了对 use 结构的测试,您可以使用这些测试来确定合规性等等。

问题在于您的 y 值是如何被解析的,这导致您的图形从第二帧中翻译出来,但仅在某些浏览器中。这是指定所需翻译的正确跨浏览器方式:

&lt;use x:href="#img" clip-path="url(#walk0)"transform="translate(0,80)"/&gt;

我会假设关于当前剪辑窗格的可疑解析是一种回归。

【讨论】:

  • 顺便说一句,我引用的那些测试在我的 Chrome 版本中失败了。是的,我只看到一张图片的副本。
  • 很好的信息。请注意,如果您使用转换较少的&lt;use&gt;,则会显示原始的一部分。所以问题不在于它是否被克隆——它是——而是应该计算剪切路径的正确坐标系是什么。
  • 啊!这很有趣。那么请参阅提供的the coords examples。由于您在测试所有三种浏览器时比我处于更好的位置(我目前仅限于 Firefox 和 Chrome),因此这里的任何回归都应该是值得注意的。我特别怀疑this 可能会失败。
  • 成功了。请看看我的编辑是否解决了您的第二个难题。
  • 不错。赢家赢家,鸡肉晚餐,你得到赏金。我仍然很想知道在那种情况下y 的“正确”行为是什么,但也许这会在我将使用 Webkit 提交的决斗错误报告中自行解决,然后可能是 Mozilla。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
相关资源
最近更新 更多