我在将一个<mask>图层应用于<g>路径组时遇到了问题.
当我将我<mask>应用于a时<rect>,它按预期工作,但在a上使用时<g>,整个组都会消失.
这是我的文件
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="600px" height="600px" viewBox="0 0 600.000000 600.000000" preserveAspectRatio="xMidYMid meet">
<defs>
<mask id="myMask" maskUnits="userSpaceOnUse" x="0" y="0" width="600" height="600">
<rect fill="white" x="0" y="0" width="600" height="600"></rect>
<circle cx="30" cy="30" r="20" fill="black"></circle>
<circle cx="300" cy="300" r="200" fill="black"></circle>
</mask>
</defs>
<rect fill="#FFFFFF" width="21456" height="21456" mask="url(#myMask)"></rect>
<g transform="translate(0.000000,600.000000) scale(0.100000,-0.100000)" fill="#100059" stroke="none" mask="url(#myMask)"> <!-- a bunch of <path>s --> </g>
<g transform="translate(0.000000,600.000000) scale(0.100000,-0.100000)" fill="#f542b3" stroke="none"> <!-- a bunch of <path>s --> </g>
</svg>
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用带有相同结果的clip-path的类似方法 - 使用<rect>但不是<g>.我也尝试将mask属性应用于<path>具有相同结果的单个元素
任何帮助赞赏
我非常怀疑这个问题是否仍然存在,但我认为无论如何我都会在这里给出答案.
要同时屏蔽一组元素,请将它们全部包含在一个<g></g>块中.然后你有几个选择:
如果您对整个组中的不透明度或其他转换感到满意,请为该<g></g>元素指定一个类或ID,并相应地设置CSS:
<g id="someGroup" class="class1 class2">
<path ...></path>
<circle ...></circle>
<whatever ...></whatever>
</g>
Run Code Online (Sandbox Code Playgroud)
和CSS(可能不是全部在一起,但你明白了):
g,
#someGroup,
.class1,
.class2 {
opacity: 0.5;
}
Run Code Online (Sandbox Code Playgroud)
首先,您必须<defs></defs>使用ID 在块中设置掩码,然后将其应用于组.一个例子:
<mask id="easyMask" x="0" y="0" width="1" height="1"
maskContentUnits="objectBoundingBox">
<rect x="0" y="0" width="1" height="1"
style="fill-opacity: 0.25; fill: white;"/>
</mask>
Run Code Online (Sandbox Code Playgroud)
我不会解释掩蔽元素,因为OP似乎已经知道了.但是,要获得详尽的指导,请到这里阅读.无论如何,一旦你在defs中设置了面具,就这样将它应用到组中:
<g style="mask: url(#easyMask);">
<path ...></path>
<circle ...></circle>
<whatever ...></whatever>
</g>
Run Code Online (Sandbox Code Playgroud)
最重要的部分是style="mask: url(#easyMask);"实际应用蒙版的样式元素.它将适用于该g组的所有子元素.只需重新戴上面具#easyMask的ID就可以了!没有尝试过任何其他选择器(如.class1或类似的东西),但#的存在似乎表明CSS风格的选择器.做一个实验:-)