DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 $200 免费积分!
CSS 中的 clip-path
属性允许您指定要显示的元素的特定区域,其余部分将被隐藏(或“裁剪”)掉。
.clip-me {
/* Example: clip away the element from the top, right, bottom, and left edges */
clip-path: inset(10px 20px 30px 40px); /* or "none" */
/* Example: clip element into a Heptagon */
clip-path: polygon(50% 0%, 90% 20%, 100% 60%, 75% 100%, 25% 100%, 0% 60%, 10% 20%);
/* Deprecated version */
position: absolute; /* absolute or fixed positioning required */
clip: rect(110px, 160px, 170px, 60px); /* or "auto" */
/* values descript a top/left point and bottom/right point */
}
曾经有一个 clip
属性,但请注意它已 弃用。
最常见的用例是图像,但它并不局限于此。 您也可以轻松地将 clip-path
应用于段落标签,并仅显示一部分文本。
<img class="clip-me" src="/images/image-to-be-clipped.png" alt="Descriptioin of image">
<p class="clip-me">
I'll be clipped.
</p>
inset()
中的这四个值(在上面的 CSS 中)代表顶部/左侧点和底部/右侧点,它们形成了可见的矩形。 矩形外部的所有内容都将被隐藏。
其他可能的取值
.clip-me {
/* referencing path from an inline SVG */
clip-path: url(#c1);
/* referencing path from external SVG */
clip-path: url(path.svg#c1);
/* polygon */
clip-path: polygon(5% 5%, 100% 0%, 100% 75%, 75% 75%, 75% 100%, 50% 75%, 0% 75%);
/* circle */
clip-path: circle(30px at 35px 35px);
/* ellipse */
clip-path: ellipse(65px 30px at 125px 40px);
/* inset-rectangle() may replace inset() ? */
/* rectangle() coming in SVG 2 */
/* rounded corners... not sure if a thing anymore */
clip-path: inset(10% 10% 10% 10% round 20%, 20%);
}
示例 SVG 裁剪路径
<clipPath id="clipping">
<circle cx="150" cy="150" r="50" />
<rect x="150" y="150" width="100" height="100" />
</clipPath>
clip-path
在一开始不支持 path()
函数,这非常奇怪,因为 path()
已经是 motion-path
等属性 的一个东西。 不过 Firefox 现在支持它了,我们正在等待其他浏览器的支持。 请参见 clip-path: path(); 的初始实现。
制作您自己的
在我们能够可靠地使用 path()
之前,最适合用于创建奇特的自定义形状的裁剪方式是 polygon()
。 这里有一个来自 Mads Stoumann 的非常棒的编辑器,它也适用于圆形和椭圆形
更多信息
- CSS 中的裁剪和遮罩
- WPD 上的 clip-path
- MDN 上的 clip-path
- Clippy: Bennett Feely 的 clip-path 制作器
- MDN 上的裁剪和遮罩
- (已弃用)CSS 裁剪属性(Impressive Webs)
- CSS 遮罩规范
- CSS 遮罩 由 Dirk Schulze
- CSS 和 SVG 中的裁剪 – clip-path 属性和元素 由 Sara Soueidan
- CodePen 上带 clip-path 标签的笔
- 演示和浏览器支持演示笔 由 Yoksel
- SVG 遮罩 由 Jakob Jenkov
- Alan Greenblatt 关于裁剪和遮罩功能 浏览器支持级别的研究
浏览器支持
此浏览器支持数据来自 Caniuse,其中有更多详细信息。 数字表示浏览器在该版本及更高版本上支持该功能。
桌面
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
130 | 54 | 否 | 127 | TP |
移动/平板电脑
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
127 | 127 | 127 | 18.0 |
嘿,很高兴你喜欢这张图片。:)
只是一个小小的更正。你说
“规范说使用逗号来分隔值。IE 4-7 支持此属性,只是没有空格。”
我认为你的意思是说“…只是没有逗号”或“…只是有空格”。
“这四个值代表“顶部/左侧”点和“底部/右侧”点,形成了可见的矩形。矩形之外的所有内容都隐藏。”
我认为“顶部/左侧”应该是“顶部/右侧”,而“底部/右侧”应该是“底部/左侧”。
每天学点新东西 :P
需要注意的是,如果要支持旧版本的 IE,实际上应该避免使用逗号。使用空格来分隔 T R B L 将跨浏览器工作。
顺便说一句:我们 Noble Desktop 的团队是 CSS-Tricks 的忠实粉丝。感谢你们做出的贡献!
很棒的文章!知道 iOS 上的支持情况吗?我正在使用运行 iOS 4.2.3 的第二代 iPod Touch,但我没有看到剪切效果。添加
-webkit-
前缀没有效果,似乎是这样。有什么想法吗?Can I Use 指出 IE 不支持。这里发生了什么?
iOS 8 Safari 似乎不支持动画 clip-paths,正如我在使用 velocity.js 时发现的。
这很酷,但它似乎在 video 标签上不起作用。我该如何在 video 标签上实现这种效果?我在 StackOverflow 上问了这个问题。
不幸的是,他们不断地移动目标,这篇文章没有说明之前和之后的语法,我认为这对于使剪切在所有浏览器版本中正常工作非常重要。
我知道我下面的 v34 剪切有效,但我正在努力使新的 v35 剪切工作,所以任何帮助都将不胜感激
我对这篇文章也很感兴趣,我会关注,但我预计不会有太多更新。由于 clip 现在已经消失,而 clip-path 只有部分支持,我很好奇是否有其他方法来复制这种行为,或者我们是否要一直等到更好的浏览器支持实现(我真的希望不要)。
它在 w3cvalidator 中无效,出现以下错误:Property clip-path doesn’t exist
.our-genius .style1 {
float:left;
position: relative;
/Chrome,Safari/
-webkit-clip-path: polygon(0px 424px,491px 500px,415px 0px,0px 0px);
-ms-clip-path: polygon(0px 424px,491px 500px,415px 0px,0px 0px);
/Firefox/
clip-path: url(“index.html#clipPolygon1”);
-moz-clip-path: url(“index.html#clipPolygon1”);
-moz-clip-path: polygon(0px 424px,491px 500px,415px 0px,0px 0px);
}
嗨。它对 swf 内容有效吗?我尝试过对图像进行剪切,但 Flash 内容没有被剪切
您好,
clip-path 仅在 Webkit 中使用前缀才有效。也许应该在本文中加入这一点…
此外,大多数浏览器中的 CSS 实现非常不稳定,我建议任何考虑在 CSS 中使用剪切的人——只需将图像或元素包裹在一个周围的 DIV 中,并将该 DIV 设置为 overflow hidden,然后调整 DIV 的尺寸(它是一个矩形)…
这在所有浏览器中每次都能正常工作….
我认为应该避免使用 clip 和 clip-path。至少在构建网络浏览器的人们团结一致并达成一致之前…
再次,一个伟大的提案变得一团糟!
我制作了一个关于三种不同剪切技术的小演示。看看 mattias.pw/pens/2016/08/08/clipping-101/。
不错的演示!也感谢你提醒我关于这篇文章。不幸的是,clip-path 的进展远没有达到我希望它现在已经达到的水平。巧合的是,我目前正在做的一个网站非常需要这个功能。不幸的是,我将不得不使用 SVG,希望很快就能实现!
您好!我是否需要添加 -o- 和 -moz- 前缀才能使其在非 -webkit- 浏览器中工作?
@keyframes rotacion-electrica {
-webkit-transition-timing-function: linear;
transition-timing-function: linear;
from {
-webkit-clip-path: circle(60% at 50% 50%);
clip-path: circle(60% at 50% 50%);
opacity: 0.9;
}
to {
-webkit-clip-path: circle(60% at 50% 50%);
-webkit-transform:rotate(0deg);
clip-path: circle(60% at 50% 50%);
transform: rotate(360deg);
opacity: 1;
}
}
让·菲利普
http://www.iliiet.com/portal
如何在 MS Edge 浏览器中使用 clip-path 属性?似乎没有支持。
同样,对于 Mozilla,我们必须将 layout.css.clip-path-shapes.enabled 标志设置为 true 才能支持此规则,但我的最终客户可能不知道这一点,是否有解决方法?
任何帮助将不胜感激!:)
剪切带有背景图像的元素怎么样?
假设你有一个带有简单(非重复)背景图像的 div 标签,并且想要剪切该标签的底部。此外,还需要一个带有 2px 实线边框的悬停操作。跨浏览器和响应式的解决方案是什么?
感谢你写了这篇文章!
剪切路径 = 不支持 IE/Edge。 https://caniuse.cn/#feat=css-clip-path。Edge 将其标记为中等优先级添加… 从 2014 年开始。
当我放大时,文本从我的多边形中消失了,我刚开始学习样式设计,非常感谢你的帮助
-webkit-clip-path: polygon(0 51%, 100% 72%, 100% 100%, 0% 100%);
clip-path: polygon(0 51%, 100% 72%, 100% 100%, 0% 100%);
截至 2019 年 8 月,MS Edge 仍然正式不支持 clip-path:https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18788318/
他们的页面(以及他们内部链接的文档)简直是笑话。在某些地方,支持是“已发布”和“受支持的”,但在其他地方却说根本不支持。
我和我的许多朋友一样,非常讨厌为了 Microshaft 的兼容性而继续使用 SVG 来修补我的页面。我职业生涯的大部分时间都花在了为了微软浏览器而修补我的干净 HTML 代码上。
正如我们在英国所说,他们的左脑不知道右脑在做什么。
真可耻。为什么他们不直接放弃 IE 和 Edge,这真是我们大家都不理解的事情。
</rant>
是否有转换器可以将绝对值转换为路径的响应式剪切路径的百分比?
如果你需要规则的、等边多边形——从 3 边的三角形到 100 边的百边形——我专门为此制作了一个新工具
它还有一个“内嵌”选项,它会在多边形边上创建一个中点,该中点可以向内拖动(用于酷炫的效果和动画!)。它提供了剪切路径和 SVG 代码的实时输出。
当剪裁图像时,图像的位置从静态更改为相对。如果不是,为什么它会变得可见?
太棒了!