菜单
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

SVG 剪裁与遮罩


SVG 剪裁与遮罩

SVG 元素可以被剪裁和遮罩。

<clipPath> 元素用于剪裁 SVG 元素。

<mask> 元素用于对 SVG 元素应用遮罩。


SVG 剪裁

剪裁是从元素中移除一部分。

对于剪裁,我们使用 <clipPath> 元素。

<clipPath> 元素内的每个路径/元素都会被检查和评估。然后,目标中位于此区域之外的任何部分都将不会被渲染。换句话说:路径之外的任何内容都被隐藏,路径之内的任何内容都被显示!

<clipPath> 元素通常放置在 <defs> 部分中。

我们来看一些例子

在此示例中,我们创建一个以 (50,50) 为中心,半径为 50 的红色圆圈

Sorry, your browser does not support inline SVG.

这是 SVG 代码

示例

<svg width="200" height="100" xmlns="http://www.w3.org/2000/svg">
  <circle cx="100" cy="100" r="100" fill="red" />
</svg>

现在我们添加一个带有单个 <rect> 元素的 <clipPath> 元素。这个 <rect> 元素将覆盖圆的上半部分。<rect> 将不会被绘制;相反,它的大小和位置将用于确定圆的哪些像素将显示。由于矩形只覆盖圆的上半部分,圆的下半部分将消失。

Sorry, your browser does not support inline SVG.

这是 SVG 代码

示例

<svg width="200" height="100" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <clipPath id="cut-bottom">
      <rect x="0" y="0" width="200" height="50" />
    </clipPath>
  </defs>
  <circle cx="100" cy="100" r="100" fill="red" clip-path="url(#cut-bottom)" />
</svg>
自己动手试一试 »


SVG 遮罩

对于遮罩,我们使用 <mask> 元素。

<mask> 元素用于对 SVG 元素应用遮罩。

遮罩通过 mask 属性引用。

这是一个简单的遮罩示例

Sorry, your browser does not support inline SVG.

这是 SVG 代码

示例

<svg width="200" height="120" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <mask id="mask1">
      <rect x="0" y="0" width="100" height="50" fill="white" />
    </mask>
  </defs>
  <rect x="0" y="0" width="100" height="100" fill="red" mask="url(#mask1)" />
  <rect x="0" y="0" width="100" height="100" fill="none" stroke="black" />
</svg>
自己动手试一试 »

上面的示例定义了一个 ID 为 "mask1" 的遮罩。<mask> 元素内部有一个 <rect> 元素。这个 <rect> 元素定义了遮罩的形状。

该示例还定义了一个使用遮罩的 <rect> 元素。遮罩通过 mask 属性引用。

红色矩形应该有 100 像素高,但垂直方向上只有前 50 像素可见。这是因为遮罩矩形只有 50 像素高。矩形只在被遮罩矩形覆盖的部分可见。

最后一个 <rect> 元素只是为了显示没有遮罩的矩形大小。

这是另一个使用 <circle> 元素定义遮罩形状的示例

Sorry, your browser does not support inline SVG.

这是 SVG 代码

示例

<svg width="200" height="120" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <mask id="mask2">
      <circle cx="50" cy="50" r="30" fill="white" />
    </mask>
  </defs>
  <rect x="0" y="0" width="100" height="100" fill="red" mask="url(#mask2)" />
  <rect x="0" y="0" width="100" height="100" stroke="black" fill="none"/>
</svg>
自己动手试一试 »

填充颜色和不透明度

<mask> 元素内部元素的填充颜色定义了引用遮罩的元素的填充颜色的不透明度。

在上面的示例中,我们只使用了 fill="white"。在遮罩中,白色被视为将显示区域,而黑色被视为将遮罩区域。

颜色越接近 #ffffff (白色),遮罩就越不透明;颜色越接近 #000000 (黑色),遮罩就越透明。

Sorry, your browser does not support inline SVG.

这是 SVG 代码

示例

<svg width="200" height="120" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <mask id="mask3">
      <rect x="0" y="0" width="100" height="30" fill="#232323" />
      <rect x="0" y="30" width="100" height="40" fill="#454545" />
      <rect x="0" y="70" width="100" height="30" fill="#878787" />
    </mask>
  </defs>
  <rect x="0" y="0" width="100" height="100" fill="red" mask=" url(#mask3)"/>
</svg>
自己动手试一试 »

遮罩中的渐变

在此示例中,遮罩形状使用渐变作为填充颜色

Sorry, your browser does not support inline SVG.

这是 SVG 代码

示例

<svg width="200" height="120" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <linearGradient id="gradient1">
      <stop offset="0%" stop-color="#ffffff" />
      <stop offset="100%" stop-color="#000000" />
    </linearGradient>
    <mask id="mask4">
      <rect x="0" y="0" width="100" height="100" fill="url(#gradient1)" />
    </mask>
  </defs>
  <rect x="0" y="0" width="100" height="100" fill="red" mask=" url(#mask4)"/>
</svg>
自己动手试一试 »

×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持