clip-path实现多边形裁剪的核心是polygon()按顺序定义顶点坐标,形成可见区域;需统一单位、明确宽高、注意坐标系,兼容性与fallback方案至关重要。

clip-path 实现多边形裁剪,核心就一条:用 polygon() 函数按顺序列出顶点坐标,浏览器自动连线闭合。它不是“画图形”,而是“定义可见区域”——区域外的内容直接不可见,不占布局流,也不触发事件。
用 polygon() 写坐标时必须注意坐标系和单位混用
坐标原点在元素左上角(0, 0),x 向右增长,y 向下增长。所有值支持像素、百分比、calc(),但不能混用单位(比如 50% 0px 会整个失效)。
- 百分比是相对于元素自身宽高计算的,所以元素必须有明确的
width和height,否则50%无从算起 -
calc(100% - 20px)是安全的,但calc(50% + 1em)在部分旧版 Safari 中可能被忽略 - 顶点顺序影响填充规则:顺时针或逆时针都行,但交叉线段(如自相交多边形)会触发
nonzero填充规则,导致意外镂空——调试时可先用纯色背景+描边辅助判断
clip-path 的兼容性坑比想象中深
现代 Chrome/Firefox/Safari(macOS/iOS 15.4+)已原生支持无前缀 clip-path,但以下情况仍需处理:
- Android WebView 旧版本(尤其 Android 10 及以下)只认
-webkit-clip-path - Firefox 以前完全不支持
polygon(),现在支持了,但对path()或 SVG 引用仍有限制 - IE 全系不支持,Edge Legacy(≤79)也不支持——如果项目还需兼容,得 fallback 到伪元素或 SVG
- 动画
clip-path在 Safari 上有性能抖动,尤其是用百分比坐标做过渡时;建议动画阶段改用像素值或降级为transform: scale()模拟
常见多边形写法与易错点
三角形、梯形、平行四边形这些看似简单,参数稍错就变回矩形或空白:
- 正三角形朝上:
clip-path: polygon(50% 0%, 0% 100%, 100% 100%)—— 注意中间两点 y 都是100%,不是100(漏掉 % 单位就无效) - 右倾平行四边形:
clip-path: polygon(20% 0%, 100% 0%, 80% 100%, 0% 100%)—— 第一个点 x=20%,最后一个点 x=0%,形成错位;若写成0 0, 100% 0, 100% 100%, 0 100%,就是标准矩形,没效果 - 圆角梯形?别硬凑
polygon。改用inset(10px 0 10px 0 round 10px)更稳,inset()支持round参数,且兼容性更好
真正难的不是写出形状,而是当设计稿里有个斜切卡片、带缺口的 banner、或者不规则导航栏时,你得快速判断:这个形状是否必须用 clip-path?还是用 mask-image、SVG 、甚至 transform: skewY() + overflow: hidden 更可靠?坐标系统、单位一致性、fallback 方案——这些细节卡住的往往不是语法,而是上线前最后一刻的渲染异常。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











