Grid负责页面骨架,Flexbox负责组件内部排列;Grid适用于需同时控制行和列的二维布局(如圣杯布局、卡片墙),Flexbox适用于一维弹性排列(如导航栏、按钮组),二者混合使用时推荐“Grid容器+Flex项目”组合。
Grid 负责页面骨架,Flexbox 负责组件内部排列——这不是建议,而是现代布局的事实标准。
display: grid?当你需要同时控制行和列的结构关系时,display: grid 是唯一合理选择。比如定义 header、main、sidebar、footer 的整体区域划分,或实现卡片墙、仪表盘、图库这类多行多列的二维结构。
grid-template-areas 命名区域后,HTML 结构可完全脱离视觉顺序,语义更清晰repeat(auto-fit, minmax(250px, 1fr)) 这类写法能自动适配容器宽度,无需媒体查询就能响应式分列grid 容器里强行模拟“垂直居中”:它天生支持 place-items: center,比 Flexbox 更直接height: 100% 却没效果,大概率是父级 grid track 没有显式高度(如 grid-template-rows: 1fr)display: flex?当你只关心一个方向上的对齐、分布或弹性伸缩时,display: flex 更轻量、更可控。典型场景是导航栏、按钮组、表单控件、卡片内头像+文字+操作按钮的组合。
justify-content 控制主轴(水平),align-items 控制交叉轴(垂直)——两者配合能轻松实现任意方向的居中flex-wrap: wrap 就能自动换行,flex: 1 或 flex: 0 1 auto 可精细控制伸缩行为order 能跨容器调整顺序——它只作用于直接子元素,嵌套结构中的深层元素无法被外部 Flex 容器重排最稳定、最常用的组合是“Grid 容器 + Flex 项目”,即外层用 Grid 划分宏观区域,每个区域内部用 Flex 排列内容。其他嵌套方式容易踩坑。
立即学习“前端免费学习笔记(深入)”;
display: grid 容器内,某个 div 设置 display: flex:安全、高效、语义清晰display: flex 容器内,某个子项设置 display: grid:语法合法,但通常没必要——Flex 已能解决该层级的对齐问题,引入 Grid 反而增加复杂度display: flex ↔ display: grid:DOM 结构不变,但 layout engine 需要重建整个渲染树,性能不如直接用 Grid 的 grid-template-areas 重定义display: grid 又依赖 align-items 居中:Grid 自带 justify-items/place-items,混用易冲突不是所有“看起来像网格”的布局都该用 Grid;也不是所有“需要居中”的地方都该上 Flex。真正的难点在于边界判断。
gap 在 Grid 中生效,必须回退到 margin ——但 Flex 的 gap 在 Safari 14.1 之前也不支持,得统一处理minmax() 是否用了 min-content 而非 minmax(0, 1fr)
width: 100% 却溢出?可能是 box-sizing 默认为 content-box,加上 box-sizing: border-box 再试