带有遮罩的 SVG 作为 HTML 元素的背景图像
SVG with mask as background-image of HTML element
我想使用 SVG 作为 HTML 元素的 background-image
。但是,当我在 SVG 中的任何位置使用遮罩时,这会失败。在下面的代码中删除 mask="url(#m)"
后,SVG 将毫无问题地显示为背景图像。
HTML:
<div>Some element.</div>
JavaScript:
// The following SVG is correctly rendered as a standalone SVG file, but not in `background-image`.
const svg = `<svg viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
<mask id="m" maskContentUnits="objectBoundingBox">
<rect fill="white" x="0" y="0" width="100%" height="100%" />
</mask>
<rect mask="url(#m)" width="100" height="100" fill="red" />
</svg>`;
document.querySelector("div").style.backgroundImage = `url(data:image/svg+xml;utf8,${encodeURIComponent(svg)}`;
结果:
预期结果:
是否可以像这样在 background-image
中使用 SVG 蒙版?如果不是,是什么原因?
相关地,如果我将 style="transform: translate(0)"
添加到 svg
(尽管其他样式,如 style="background-color: blue"
可以正常工作),背景图像也无法显示。是否可以在 SVG background-image
中使用 transform
?
您的数据语法错误URL
document.querySelector("div").style.backgroundImage = `url('data:image/svg+xml,${encodeURIComponent(svg)}')`;
就是你想要的
const svg = `<svg viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
<mask id="m" maskContentUnits="objectBoundingBox">
<rect fill="white" x="0" y="0" width="100%" height="100%" />
</mask>
<rect mask="url(#m)" width="100" height="100" fill="red" />
</svg>`;
document.querySelector("div").style.backgroundImage = `url('data:image/svg+xml,${encodeURIComponent(svg)}')`;
<div>Some element.</div>
我想使用 SVG 作为 HTML 元素的 background-image
。但是,当我在 SVG 中的任何位置使用遮罩时,这会失败。在下面的代码中删除 mask="url(#m)"
后,SVG 将毫无问题地显示为背景图像。
HTML:
<div>Some element.</div>
JavaScript:
// The following SVG is correctly rendered as a standalone SVG file, but not in `background-image`.
const svg = `<svg viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
<mask id="m" maskContentUnits="objectBoundingBox">
<rect fill="white" x="0" y="0" width="100%" height="100%" />
</mask>
<rect mask="url(#m)" width="100" height="100" fill="red" />
</svg>`;
document.querySelector("div").style.backgroundImage = `url(data:image/svg+xml;utf8,${encodeURIComponent(svg)}`;
结果:
预期结果:
是否可以像这样在 background-image
中使用 SVG 蒙版?如果不是,是什么原因?
相关地,如果我将 style="transform: translate(0)"
添加到 svg
(尽管其他样式,如 style="background-color: blue"
可以正常工作),背景图像也无法显示。是否可以在 SVG background-image
中使用 transform
?
您的数据语法错误URL
document.querySelector("div").style.backgroundImage = `url('data:image/svg+xml,${encodeURIComponent(svg)}')`;
就是你想要的
const svg = `<svg viewBox="0 0 200 100" xmlns="http://www.w3.org/2000/svg">
<mask id="m" maskContentUnits="objectBoundingBox">
<rect fill="white" x="0" y="0" width="100%" height="100%" />
</mask>
<rect mask="url(#m)" width="100" height="100" fill="red" />
</svg>`;
document.querySelector("div").style.backgroundImage = `url('data:image/svg+xml,${encodeURIComponent(svg)}')`;
<div>Some element.</div>