html - 使用 html 中定义的 svg mask 进行 mask

标签 html css svg mask

我正在尝试使用我在 html 内容中创建的 SVG 形状进行一些非常简单的 mask 测试。 我尝试过不同的选项:

  • 掩码,-webkit-掩码
  • 掩码图像,-webkit-掩码图像
  • 不同的 MaskUnit 和 MaskContentUnit
  • mask-type:是否亮度

我无法让它发挥作用,我必须做一些错误和愚蠢的事情。

<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Mask with SVG</title>
        <link rel="stylesheet" href="/style.css" />
    <style>
        .testMask {
            -webkit-mask-image: url(#torch);
            mask-image:url(#torch);
        }
    </style>
</head>
<body>
   <svg width="0" height="0">
        <defs>
            <mask id="torch">
                <circle cx="0.5" cy="0.5" r="0.1" fill="white" />
            </mask>
        </defs>
    </svg>
    <div id="mainPage">
        <img src="/img/Japan.jpg" class="testMask">
    </div>
</body>

是不是有什么问题啊? 第二个问题是,有没有办法通过js改变mask坐标?我希望它跟随鼠标指针。

谢谢!

最佳答案

<mask> 的默认单位内容元素为objectBoundingBox (即 maskContentUnits="objectBoundingBox" )。在此模式下,作为 mask 一部分的元素中使用的坐标相对于边界框。换句话说,(0,0) 位于左上角,(1,1) 位于右下角。

所以你的 (50,50) 处的圆远离蒙版边缘。

最好坚持使用 objectBoundingBox 单位,因此请尝试以下操作:

<mask id="torch" >
    <circle cx="0.5" cy="0.5" r="0.1" fill="white" />
</mask>

注意:

使用内联 SVG 进行 mask 可以在 Firefox 中使用(请参阅 http://jsfiddle.net/dv6mx96t/ ),但不能在 Chrome 中使用。对于跨浏览器工作的蒙版,您需要使用外部图像。该图像可以是 SVG 或 PNG 等。

例如:

.testMask {
    mask: url(mask.svg);
}

其中mask.svg是:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1">
    <circle cx=".5" cy=".5" r=".35" fill="white" />
</svg>

关于html - 使用 html 中定义的 svg mask 进行 mask ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31089898/

相关文章:

javascript - JS绘制一个箭头从一个div指向另一个

javascript - 拉斐尔 JS 服务器端

html - CSS 导航栏悬停问题

python - 使用BeautifulSoup根据文本内容删除元素

jquery - 根据选定的下拉菜单设置 td 单元格的背景颜色

html - CSS 菜单 IE7 问题

javascript - 为什么 getElementById 对文档元素内的元素不起作用?

html - 在索引页上显示另外两个不同表的数据

overflow hidden 的CSS

javascript - 流程图和状态机