代码之家  ›  专栏  ›  技术社区  ›  varkor

用掩码作为HTML元素背景图像的SVG

  •  0
  • varkor  · 技术社区  · 4 年前

    我想使用SVG作为 background-image HTML元素的。但是,当我在SVG中的任何地方使用掩码时,这将失败。什么时候? mask="url(#m)"

    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)}`;
    

    ( JSFiddle link )

    no background image

    预期结果: intended background image

    是否可以在 背景图像 这样地?如果没有,原因是什么?

    相应地,如果我添加,背景图像也无法显示 style="transform: translate(0)" svg (虽然其他风格,比如 style="background-color: blue" transform 在SVG中 背景图像 ?

    1 回复  |  直到 4 年前
        1
  •  3
  •   Robert Longson    4 年前

    数据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>