应配合@media查询在小屏下改为单列布局,如"header" "main" "footer";导航项设grid-column:1/-1和min-height:44px确保触控友好。
直接写死 grid-template-areas 在小屏下会强制保留所有区域宽度,导致横向滚动或内容溢出。关键不是“怎么写”,而是“什么时候写”——必须配合 @media 拆分布局,桌面用多区域,手机改单列流式。
header nav main footer 四个区域,nav 单独占一栏nav 收进 header 或抽成汉堡菜单,grid-template-areas 改成 "header" "main" "footer"
grid-template-areas: "header nav main footer" —— 这是手机端灾难的起点导航链接(a)如果没显式声明 grid-column,在 grid-auto-flow: column 下容易按列顺序错排,尤其当部分链接加了 display: none 或条件渲染时。
grid-column: auto 或固定序号(如 grid-column: 2),避免依赖自动流向grid-column: 1 / -1 让它横跨整行,而不是留空或挤到角落grid-row 值不要跨太多行——导航项一般只占一行高度,设成 grid-row: 1 就够了失效通常是因为父容器没设 width: 100% 或子项用了 min-width,导致 justify-content: center 失去作用范围;而 gap 在小屏下若值过大(比如 2rem),会直接吃掉可用空间。
gap 改成 0.5rem 或 8px,避免按钮间空太大justify-content 只对 inline 轴有效,如果导航是 grid-template-columns: repeat(4, 1fr),那它对齐的是四列整体,不是单个链接nav 加 justify-items: center,或者给每个 a 加 justify-self: center
Grid 不会自动扩展点击热区,a 标签本身尺寸小,又没设 padding 或 min-height,手指一点就容易误触或失焦。
立即学习“前端免费学习笔记(深入)”;
min-height: 44px(iOS 推荐最小触控高度)和 padding: 0.75rem 1rem
grid-area 占位,热区必须由元素自身盒模型撑开display: contents 包裹 a,触控区会消失——这个属性会让元素不生成盒,直接剔除最麻烦的其实是 grid-template-areas 的隐式命名依赖:一旦某个区域名拼错、漏定义,整个布局可能静默降级为 auto-flow,而你根本看不出哪里断了。检查时盯住控制台的 CSS Grid Inspector,别光看页面效果。