display: grid 是现代网格布局唯一正解,但需确保父容器正确设为网格容器、有有效宽度且处于常规文档流,否则 grid 属性无效;grid-template-columns 按场景选用 repeat()、百分比或混合值;定位时注意线号逻辑和区域命名优先级;Grid 与 Flex 各司其职,依维度需求选择嵌套。
直接用
就是现代 HTML 网格设计的唯一正解,不需要框架、不依赖 JS、不拼 float 或 inline-block —— 但前提是父容器真被识别为网格容器,否则所有
、
都是摆设。
为什么 grid-layout 不生效?90% 是因为这三件事没做
浏览器根本不认你写的网格属性,不是语法错,而是上下文缺失:
父容器没加
或
—— 所有子项的
属性在非网格容器里完全被忽略
父容器宽度为
或未设置(比如空 div、未设
/
、未继承父宽),导致轨道塌陷,看着像“没反应”
父容器被
、
或
干扰了文档流,Grid 要求容器参与常规流才能计算轨道
调试时打开开发者工具,直接看父元素的 Computed 样式里有没有
和实际生效的
值,比查控制台报错更直接。
写法选哪个?按场景分
固定列数、等宽、响应式自适应、内容驱动高度……不同目标对应不同写法,混用容易出错:
立即学习
“
前端免费学习笔记(深入)
”;
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
三列等宽卡片墙:
—— 简洁,但缩放或字体变化时可能因子项内容撑开导致列宽微差
九宫格(严格 3×3):
—— 百分比堵住浮点误差,配合
(别用
别名,IE11 不认)
响应式自适应列数:
—— 最小 250px,超出自动换行,比媒体查询写三套更轻量
混合比例布局(如侧边栏+主内容):
或
—— 固定值 + 弹性值组合,避免用
和
混搭引发计算歧义
和
定位时最常踩的坑
写坐标线编号看似直观,但线号和跨距逻辑容易反直觉:
表示从第 2 条线开始、到第 4 条线结束(即跨 2 列),不是“占第 2 和第 4 列”
是横跨全部列的最简写法,比
更鲁棒,不受预设列数限制
用
命名区域(如
)后,就别再给同一元素加
—— 后者会覆盖前者,调试时很难发现
等价于
,但显式写
更易读,尤其当你要强调起始行为“由内容决定”
Grid 和 Flexbox 到底谁嵌谁?别硬套“宏观/微观”话术
真实项目里不是“Grid 做骨架、Flex 做细节”,而是看维度需求:
需要同时约束行高 + 列宽 + 项目跨格 → 用 Grid 容器(比如仪表盘左导航+右数据表格+底部状态栏)
只沿一个方向排列、对齐、伸缩(比如按钮组、表单项标签+输入框、文章标题+副标题)→ 用 Flex,
在 Grid 项内部完全合法且高效
千万别把 Grid 当 Flex 用:在 Grid 容器上只设
想居中所有子项?它不会生效 —— Grid 的对齐要靠
/
或子项自身的
真正容易被忽略的是:Grid 的
默认是
,当子项没指定位置时,它按行优先填满;如果内容天然按列组织(比如时间轴、垂直滚动列表),记得设成
,否则布局会意外错乱。
display: gridgrid-columngrid-template-columnsdisplay: griddisplay: inline-gridgrid-column0widthmax-widthfloatposition: absolutedisplay: contentsdisplay: gridgrid-template-columnsgrid-template-columnsgrid-template-columns: repeat(3, 1fr)grid-template-columns: 33.33% 33.33% 33.34%grid-gap: 8pxgapgrid-template-columns: repeat(auto-fit, minmax(250px, 1fr))grid-template-columns: 200px 1fr150px minmax(300px, 1fr) 200px%frgrid-columngrid-rowgrid-column: 2 / 4grid-column: 1 / -1span 12grid-areagrid-template-areas: "header header" "main sidebar"grid-columngrid-row: span 2grid-row: auto / span 2auto / span 2display: flexjustify-contentjustify-itemsalign-itemsjustify-selfgrid-auto-flowrowcolumn