我想使用SVG形状剪辑我的元素,该形状在同一个HTML文件(内联SVG)中定义。
适用于clip-path
:
div {
width: 200px;
height: 200px;
background-color: red;
clip-path: url("#c");
}

<div>
<svg>
<defs>
<clippath id="c">
<circle cx="100" cy="100" r="50" />
</clippath>
</defs>
</svg>
</div>
&#13;
但是当使用蒙版时,虽然这在Firefox中运行良好,但它在Chrome中不应用任何遮罩:
div {
width: 200px;
height: 200px;
background-color: red;
mask: url("#m");
}
&#13;
<div>
<svg>
<defs>
<mask id="m">
<circle cx="100" cy="100" r="50" fill="white" />
</mask>
</defs>
</svg>
</div>
&#13;
搜索(example),Chrome似乎不希望蒙版引用定义,而是指整个图像。有没有办法在内联时引用整个图像?或者,我还能做些什么来从内联元素中应用蒙版?
答案 0 :(得分:1)
这是一个丑陋的js解决方案,
<mask>
,webkit-image
CSS规则,以便它不会污染其他浏览器。
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
var mask = document.querySelector('mask');
svg.innerHTML = mask.innerHTML;
var str = new XMLSerializer().serializeToString(svg);
str = 'data:image/svg+xml;charset=utf8,' + encodeURIComponent(str);
var div = document.getElementById('mask-me');
div.style.webkitMaskImage = 'url('+str+')';
&#13;
#mask-me {
width: 200px;
height: 200px;
background-color: red;
mask: url(#m);
}
&#13;
<div id="mask-me">
<svg>
<defs>
<mask id="m">
<circle cx="100" cy="100" r="50" fill="white" />
</mask>
</defs>
</svg>
</div>
&#13;
答案 1 :(得分:0)
上次我查看Chrome并不支持mask
媒体资源。 It only supports mask-image
.
我想仍然如此。