初学者写 CSS Grid 最易在“看似能跑”和“真正可控”间掉坑,核心在于未建立对 grid-template-* 和 gap 的显式控制意识:须先用 grid-template-columns/rows 定义显式骨架,用 gap 替代 margin 控制间距,通过 justify-items/align-items 精确控制子项对齐,并基于命名线或明确轨道数使用 grid-column/grid-row。
初学者写 CSS Grid,最容易在“看似能跑”和“真正可控”之间掉坑。问题往往不出在语法报错,而在于没建立对网格结构的显式控制意识——尤其是 grid-template-* 和 gap 这两个基础但关键的环节。
很多人写了 display: grid,接着就直接上 grid-auto-columns: 1fr 或 grid-auto-rows: 100px,结果布局飘忽、响应异常。
宽布局,应写:grid-template-columns: repeat(3, 1fr),而不是依赖 grid-auto-columns
grid-template-*?浏览器会悄悄用单列隐式网格撑着,内容一变就错位给网格项加 margin 来制造间隔,是早期 Flexbox 思维残留,Grid 里这会破坏对齐、引发重叠甚至触发隐式网格扩张。
row-gap/column-gap)是专为网格设计的间距属性,只作用于网格单元格之间,不影响项目自身盒模型margin 不仅要反复计算方向和边界,还会让项目实际占用空间变大,导致列宽计算失准gap: 12px,清爽、可继承、响应友好gap 对 flex 布局也生效(现代浏览器),但 Grid 中它是唯一推荐方案新手常以为只要 display: grid,再配个 justify-content: center 就能居中所有子项——其实这只影响整个网格容器在父容器里的位置,跟内部子项排布毫无关系。
stretch),纵向靠 align-items
justify-items: center; align-items: center
justify-self 或 align-self,别改全局看到 grid-column: 2 / 4 就照抄,却不检查容器有没有至少 4 条垂直线(即至少 3 列)。
grid-template-columns: [start] 1fr [main] 2fr [end],然后子项写 grid-column: start / end
span,如 grid-column: span 2 —— 它可能跨到隐式区域,造成空白或重叠