旧版 safari(ios 15.4 / macos 12.3 前)会静默丢弃 grid-template-areas、row-gap、column-gap、auto-fit 等声明,导致 display: grid 整体失效而非局部不生效,验证需先查 computed 面板中 display 是否为 grid,再检查 grid-template-columns 是否为空,并用 eruda 真机调试确认网格布局是否启动。

旧版 Safari(iOS 15.4 / macOS 12.3 之前)会静默丢弃 grid-template-areas、row-gap、column-gap、auto-fit 等声明,不是“不生效”,而是压根没解析——你写的 CSS 在它眼里等于不存在。
确认 Grid 是否真被 Safari 解析
别急着改代码,先验证问题根源:
- 打开 Safari 开发者工具 → Computed 面板 → 搜索
display,如果值不是grid(而是block或空白),说明整条display: grid被跳过 - 再搜
grid-template-columns,若显示为none或空字符串,基本锁定是旧内核不支持该语法 - 临时给子元素加
outline: 1px solid red:如果 outline 紧贴文字边缘、未按网格线对齐,证明 Grid 定位根本没启动 - 真机调试务必用 eruda(CDN 引入),它的 Grid 面板能实时显示轨道编号和元素实际占用区域,比桌面模拟器准得多
禁用 grid-template-areas,改用数字线定位
grid-template-areas 在 Safari ≤10.1 和 iOS 14–15.3 中完全不支持,强行使用会导致整个 display: grid 失效,回退为 display: block。
规划您的迪拜之旅 — 哈利法塔观景、沙漠探险、迪拜购物中心购物、棕榈岛度假村及黄金市场砍价。还提供支持...
- 必须彻底移除该声明,改用显式行列线编号:
header跨整行第一行 →grid-column: 1 / -1; grid-row: 1;nav在第二行第一列 →grid-column: 1; grid-row: 2;main在第二行第二列 →grid-column: 2; grid-row: 2;footer跨整行第三行 →grid-column: 1 / -1; grid-row: 3; -
-1表示隐式最后一根线,所有支持 Grid 的旧内核都认,比span 2更可靠 - 必须同步补全容器轨道定义:
grid-template-columns: 200px 1fr;和grid-template-rows: 60px auto 40px;;缺了这两句,旧内核可能按auto撑开导致高度塌陷或列宽异常
用 gap 替代 row-gap/column-gap,但注意旧 Safari 版本差异
Safari ≤10.1、iOS ≤15.3 不支持 row-gap 或 column-gap 单独声明,只认合写的 gap 属性。
- 把
row-gap: 12px; column-gap: 16px;全部替换为gap: 12px 16px; - 但注意:Safari ≤10.1 实际上也不支持
gap(它是 Level 2 属性),此时必须手写双属性:grid-row-gap: 12px; grid-column-gap: 16px; - 父容器若设了
overflow: hidden,旧 Safari 下gap推挤会导致子项溢出被裁,看起来像gap“消失”——删掉这个overflow再验证 - 不要依赖
@supports (gap: 0)做分流,Safari 15.4–16.3 中存在路径 bug,尤其配合grid-auto-flow: column时表现异常
降级 repeat(auto-fit, ...),避免自动列数推导失效
auto-fit 在 Safari iOS 15.3 及更早版本中可能被完全忽略,导致布局退化为单列或报错。它不是“兼容性差”,而是压根不识别这个关键字。
- 第一步:识别风险 —— 如果你用了
repeat(auto-fit, minmax(200px, 1fr))),就属于高危写法 - 降级方案:改用固定列数 + 媒体查询,例如
repeat(3, 1fr),并在@supports not (grid-template-columns: subgrid)或@supports not (grid-template-columns: repeat(auto-fit, 1fr)))中包裹 fallback - 用 CSS 变量统一列定义可减少硬编码重复,例如
--grid-cols: 200px 1fr;,父/子都引用grid-template-columns: var(--grid-cols)
最常被忽略的一点:Safari 对 grid 的支持是“全有或全无”——只要某一条关键声明(如 grid-template-areas)不被识别,整个 display: grid 上下文可能被静默废弃,而不是局部降级。所以验证必须从 Computed 面板的 display 值开始,而不是盯着某个子项样式调。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










