CSS Grid:终于不用再用 float 布局了,感谢天感谢地
一个前端老兵的回忆:那些年被 float 支配的恐惧
在 CSS Grid 出现之前,前端工程师的日常是这样的:
- 想要两栏布局?用 float: left + width: 50%
- 想要三栏?再 float 一个
- 想要垂直居中?对不起,请使用 position: absolute + top: 50% + transform: translateY(-50%) 这个组合咒语
- 想要等分网格?用 display: inline-block 然后被空格问题折磨一整天
每个前端开发都有一张 flexbox 打地鼠的表情包:搞定一个布局问题,冒出来三个新问题。
Grid 来了!二维布局的救星
Flexbox 解决了一维布局的问题,但当你需要同时控制行和列——比如一个 3x3 的网格——Flexbox 就开始力不从心了。就像你用筷子吃火锅完全 OK,但让你用筷子喝汤……有点为难。
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: 100px 200px 100px;
gap: 10px;
}
就这?对,就这几行代码,你得到了一个三列等宽、三行不等高、间距 10px 的网格。以前用 float 搞这个,你得写多少 HTML 容器和 CSS clearfix?说出来都是泪。
grid-template-areas:排版如画图
.container {
display: grid;
grid-template-columns: 200px 1fr 200px;
grid-template-rows: 80px 1fr 60px;
grid-template-areas:
"header header header"
"sidebar main aside"
"footer footer footer";
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.aside { grid-area: aside; }
.footer { grid-area: footer; }
看到 grid-template-areas 了吗?你用字符串画了一个页面的“地图”。header 占了第一行三列,sidebar/main/aside 分别占第二行的三列,footer 占第三行三列。想改成左侧没有 sidebar?把 sidebar 换成 . 就行了!改布局就跟改字符串一样简单。
Grid vs Flexbox
简单粗暴的标准:
- 一维布局(一行或一列)→ Flexbox
- 二维布局(行+列同时控制)→ Grid
- 想把内容居中?→ 两个都可以,Grid 甚至还更简单
Flexbox 像排列一排乐高人仔,Grid 是搭一整块乐高底板。
总结
CSS Grid 是前端布局的终极解决方案。自从有了它,我的 float 使用频率从“每天”变成了“这辈子都不会再用”。如果你还在用 clearfix 这种上古黑魔法——停下吧,现代 CSS 已经不需要了。欢迎来到 Grid 时代,这里的布局不用再打地鼠了 🎉