css - 剪辑路径 svg 适用于图像,但不适用于 div

标签 css svg clip-path

在 MDN 上有一个关于如何在图像上使用 clip-path svg 的示例。相同的剪辑路径似乎不适用于 div 元素。有人可以澄清一下:

  • 为什么这段代码不能按预期工作
  • 一种使 svg 剪辑路径在 div 上工作的方法

示例代码 ( based on MDN docs ) 裁剪图像

#clipped {
  clip-path: url(#cross);
}
<img id="clipped" src="https://mdn.mozillademos.org/files/12668/MDN.svg"
    alt="MDN logo">
<svg height="0" width="0">
  <defs>
    <clipPath id="cross">
      <rect y="110" x="137" width="90" height="90"/>
      <rect x="0" y="110" width="90" height="90"/>
      <rect x="137" y="0" width="90" height="90"/>
      <rect x="0" y="0" width="90" height="90"/>
    </clipPath>
  </defs>
</svg>

div 上的相同剪辑路径(这似乎不起作用)

#clipped {
  width: 100px;
  height: 100px;
  background: black;
  clip-path: url(#cross);
}
<div id="clipped"></div>
<svg height="0" width="0">
  <defs>
    <clipPath id="cross">
      <rect y="110" x="137" width="90" height="90"/>
      <rect x="0" y="110" width="90" height="90"/>
      <rect x="137" y="0" width="90" height="90"/>
      <rect x="0" y="0" width="90" height="90"/>
    </clipPath>
  </defs>
</svg>

最佳答案

您的问题的解决方案是使用 clipPathUnits="objectBoundingBox" 并构建大小介于 0 和 1 之间的剪切路径,如下所示:

#clipped {
  margin:1em;
  width: 100px;
  height: 100px;
  background: black;
  display:inline-block;
  clip-path: url(#cross);
}
#clipped.big{
  width: 200px;
  height: 200px;
}
<div id="clipped"></div>
<div id="clipped" class="big"></div>
<svg viewBox="0 0 1 1">
  
    <clipPath id="cross" clipPathUnits="objectBoundingBox">
       <rect y="0" x="0" width=".4" height=".4"/>
       <rect y="0.6" x="0" width=".4" height=".4"/>
       <rect y="0" x="0.6" width=".4" height=".4"/>
       <rect y="0.6" x="0.6" width=".4" height=".4"/>
    </clipPath>
  
</svg>

关于css - 剪辑路径 svg 适用于图像,但不适用于 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59015247/

相关文章:

css - 有没有一种 CSS 方法可以根据文本字符串的大小自动设置元素的宽度?

PHP 剥离内容以固定行数

css - 是否可以在内联 svg 中使用 css 变量?

html - 使用 SVG 的最佳实践,关于高度和宽度?

html - CSS半月背景图像 mask

javascript - Slidetoggle JS 元素内的文本中断

CSS 换行图像或 "center float"

c++ - 使用 QPainter 渲染 SVG 文件

CSS 剪辑路径在带有子元素/伪元素的 Safari 中不起作用

html - CSS — 如何模糊 SVG 蒙版?