网格不规则拼图应弃用grid-template-areas,改用grid-column/grid-row精确定位,再以clip-path塑形单图并配合transform错位,结合aspect-ratio与object-fit保图比例。

Grid 网格布局实现不规则画廊拼图排版,关键不是“强行用命名区域凑形状”,而是分清两个层次:**结构定位靠 grid-line,视觉塑形靠 clip-path + transform**。纯靠 grid-template-areas 只能拼矩形,L形、六边形、星形等必须换思路。
放弃 grid-template-areas 拼非矩形
它要求同名区域必须构成连续闭合矩形——这是 CSS 规范硬性限制。例如写:
"a a b""a c b"
想让 a 占左上两格+左下第一格(L 形),实际结果是第二行的 a 被忽略或整条声明失效。浏览器不报错,但布局错乱。
正确做法:显式用 grid-column 和 grid-row 定位每个图片,比如:
-
grid-column: 1 / 3; grid-row: 1 / 2;→ 占第1–2列线、第1–2行线(即左上大格) -
grid-column: 1 / 2; grid-row: 2 / 4;→ 占第1列、第2–4行线(即左侧高条)
用 clip-path 塑形单个图片
要让某张图本身是六边形、三角形或斜切角,clip-path 必须加在图片或其直接容器上,而不是 Grid 父容器。加在父容器上只会裁掉整个网格的可视边缘,子项位置和点击区域不变。
例如六边形拼贴:
- 每张图容器设
clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%) - 偶数行图片加
transform: translateX(50%)错位 - 配合固定列宽与精确行高(如
grid-template-rows: repeat(3, calc(1.1547 * 200px)))保证比例
注意:polygon 坐标默认以 border box 左上为原点;若有 padding 或 border,需手动偏移坐标,否则内容会被裁掉。
控制图片比例与裁剪不崩坏
不规则拼图最怕图片拉伸、留白或关键内容被裁。不要对 <img> 直接写 width: 100%; height: 100%——这会覆盖 aspect-ratio,还可能触发双重拉伸。
- 给图片外层容器(如
<figure>)设aspect-ratio: 4/3或16/9,锁定单元格自身比例 -
<img>上用object-fit: cover(推荐)或contain,前者居中裁剪,后者等比缩放 - 若关键内容总被 cover 裁掉,用
object-position: 20% 30%微调焦点区域
响应式与调试技巧
不规则布局在小屏容易拥挤或错位,调试时建议:
- 在 Grid 容器上临时加
outline: 1px solid #000,肉眼验证行列线位置 - Chrome DevTools → Styles 面板 → 点击
display: grid右侧蓝色图标 → 勾选 “Show line numbers” 实时看线号分布 - 媒体查询中重定义
grid-template-areas效果差,应改用@supports (display: grid)降级,并在断点里重写grid-column/grid-row组合


















