【发布时间】:2015-12-16 08:51:53
【问题描述】:
我需要将蒙版应用于不同的对象。
面具应该覆盖整个物体(它的可见部分)。我将面具放在页面顶部的一个特定位置,将maskContentUnits更改为objectBoundingBox,所以效果很好。
但是问题出现了。
我做了一个小提琴来说明问题:http://jsfiddle.net/8qdt7vjr/1/
<body>
<svg width="0" height="0">
<defs>
<mask id="mask1" maskContentUnits="objectBoundingBox">
<ellipse cx=".5" cy=".5" rx=".5" ry=".5" fill="white" />
</mask>
</defs>
</svg>
<svg class="svg" width="200" height="150" overflow="visible">
<rect x="-50" y="-50" width="350" height="250" fill="none" stroke="green" stroke-width="2" />
<svg id="zzz" x="0" y="0" width="100%" height="100%" overflow="visible" mask="url(#mask1)">
<rect x="-50" y="-50" width="350" height="250" fill="blue" fill-opacity=".3" />
</svg>
<rect width="100%" height="100%" fill="red" fill-opacity=".1" stroke="red" stroke-width="1" />
</svg>
</body>
在这个小提琴中,我想使用id="zzz" 将掩码应用于 svg 元素。但是在这个元素内部有一个rect 元素,它增加了zzz 的边界框。在小提琴中它是rect,但在我的项目中它是一个image 标签。 zzz 已将溢出设置为隐藏(在小提琴中我将其更改为可见,因此更容易看到问题),所以我在 zzz 中有一个特定的图像部分可见>.
真正的问题是 zzz 的内部内容增加了 zzz 的边界框。
在小提琴中,我希望椭圆蒙版位于红色矩形内(可见 zzz 的区域),但它位于绿色矩形内(zzz 的边界框)。
所以主要的问题是:有没有办法实现这个目标?掩码将被许多具有不同大小和内容的元素使用,我不想克隆它。
有没有办法在每个元素内不克隆掩码?
有什么办法可以将边界框缩小到可见区域?
有什么方法可以在不扩展父边框的情况下显示图像的一部分?
有没有其他方法可以做到这一点?
【问题讨论】:
-
第二部分和第三部分的答案都是否定的。这使得回答第一种和第四种情况相当困难。
标签: svg mask bounding-box