clip-path 必须作用于每个子项而非 grid 容器,否则仅裁剪容器视觉区域而子项布局、交互区域不变;六边形拼接需子项重叠+统一 clip-path+精确尺寸控制;推荐用百分比坐标并双写 -webkit-clip-path 保障兼容性。

clip-path 必须作用在每个子项上,不能只加在 grid 容器上
给 .grid 容器加 clip-path: polygon(...),只会裁掉容器外框的视觉区域,子项依然按原始矩形网格排布——它们的位置、尺寸、hover 响应区、甚至点击热区都完全没变,只是“看不见”了超出部分。这常被误认为“实现了多边形网格”,实际只是假象。
真正要让每个图片变成六边形、三角形或斜切形状并紧密拼接,clip-path 必须写在每个 <img> 或其 wrapper 元素上。Grid 只负责定位,裁剪由子项自己完成。
- 错误写法:
.gallery { clip-path: polygon(0 0, 100% 0, 100% 100%); } - 正确写法:
.gallery > img:nth-child(1) { clip-path: polygon(0 0, 50% 0, 100% 100%, 0 100%); } - 注意:不同子项的
clip-path值往往不同,尤其在做无缝拼接时(如六边形蜂窝)
六边形拼接的关键是重叠 + 统一 clip-path + 精确尺寸控制
纯 CSS 实现六边形网格不是靠“六个格子围成一个六边形”,而是让多个正方形图片在同一个 grid-area 内重叠,再用相同的 clip-path 裁出六边形,视觉上自然形成蜂窝效果。
核心参数必须同步控制:
立即学习“前端免费学习笔记(深入)”;
- 所有
<img>设置相同width和aspect-ratio: 1.15(六边形高宽比近似值) - 统一使用
clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%) - 用
grid-area: 1 / 1让它们落在同一网格单元内,靠z-index或 DOM 顺序控制叠层 - 父容器设
gap: 0,避免默认间隙破坏拼接
polygon() 坐标单位选百分比还是像素?取决于响应式需求
clip-path: polygon() 中的坐标用 % 还是 px,直接影响缩放行为和维护成本。
- 用
%:坐标基于元素自身宽高,天然响应式,但复杂图形(如不规则星形)调试困难,微调需反复试值 - 用
px:绝对精准,适合固定尺寸场景(如图标网格),但窗口缩放或字体缩放时易错位 - 混合用法常见:X 轴用
%(水平对齐稳定),Y 轴用px(控制垂直切割精度),例如polygon(0 0, 100% 0, 100% 24px, 50% 100%, 0 24px)
推荐起步用 %,上线前用 calc() 补偿小数精度问题,比如把 33.333% 写成 calc(100% / 3)。
浏览器兼容性与降级策略不能只看 caniuse 数据
clip-path 在 Chrome/Firefox/Edge 106+ 支持良好,但 Safari 对 polygon() 的支持直到 v16.4 才稳定(2023 年中),且旧版 Safari 仍需 -webkit-clip-path 前缀。
- 不加前缀 → Safari 15.6 及更早版本直接忽略整个声明,子项显示为原始矩形
- 只加
-webkit-clip-path→ Firefox/Chrome 新版可能不识别,导致无裁剪 - 安全写法:始终双写,
clip-path在前,-webkit-clip-path在后(后者会被新浏览器忽略) - 降级建议:用
@supports (clip-path: polygon(0 0))包裹高级样式,内部提供border-radius或简单圆角 fallback
最易被忽略的一点:当多个子项共用同一组 clip-path 值做拼接时,只要其中任意一项因兼容性失效,整个拼接逻辑就断裂——视觉上不再是“无缝”,而是露出白边或错位。务必在真实 Safari 设备上验证最终效果。


















