千万别再用 table 和暴力 div 做网格了,血的教训...

淦!昨天凌晨两点还在给一个三年前的破站做响应式适配,就因为当年手贱用了一堆 floatdisplay: inline-block 拼出来的所谓“网格”,现在每加一个板块都得拿计算器算百分比,一个媒体查询套一个媒体查询,代码比我的发际线还乱。老板还问我“为什么别人的站那么丝滑”,我特么……

如果你不想像我一样被上古代码缠住脚脖子,听我一句劝:

1. 现代王者:CSS Grid Layout
这玩意儿就是为网格而生的!别再手动算12栏24栏了,声明一个网格容器,几行代码搞定复杂布局,比 table 语义好一万倍,比乱漂的 div 精准到不知道哪里去了。

.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); /* 核心魔法!自动响应 */
gap: 20px; /* 间隙,再也不用 margin 负值 hack 了 */
}

就这么简单!auto-fitminmax() 配合,容器有多宽,项目就自动排列,根本不用写一堆 @media。想搞不对称布局?grid-template-areas 画个图就行,直观到哭。(MDN官方文档保命,多看例子)

2. 灵活搭档:Flexbox
Grid 是二维的(行列一起管),Flexbox 是一维的(主要管行或列)。但如果是简单的等分布局、导航栏、卡片流,用 Flex 更快:

.card-container {
display: flex;
flex-wrap: wrap; /* 关键!允许换行 */
gap: 15px;
justify-content: space-between; /* 两端对齐,空间分布 */
}
.card {
flex: 1 1 300px; /* 放大、缩小、基础宽度。核心! */
}

flex: 1 1 300px; 这句意思是“大家尽量平分空间,但别小于300px,不够了就往下掉”。比写 width: 33.333% 然后被 padding 撑爆布局高明到不知道哪里去了。

3. 血的教训(必看坑点)

  • 别混用! 一个容器用了 display: grid,就别在里面用 float 或者 vertical-align,法则会打架打到你怀疑人生。
  • 老旧项目 如果还要兼容 IE11,Grid 基本废了(部分支持老语法),那就乖乖用 Flexbox 加 polyfill,或者……说服老板放弃那1%的用户吧。
  • 移动端优先 写媒体查询时,从小屏幕开始,用 min-width。在大屏用 Grid 定义复杂布局,小屏用 Flex 堆叠,思路清晰得一批。

最后,真别自己造轮子了。现在前端框架(比如 Tailwind CSS)的网格工具类,或者UI库的栅格系统,都是基于这些现代CSS的封装,比自己写的稳当。我重构那个破站,最后就是用 Grid 重写了核心板块,代码量少了60%,加载都快了点。(这是CSS Grid的终极可视化指南,存好)

总之,忘掉 Table,慎用 Float,拥抱 Grid 和 Flexbox。你的时间和头发都很宝贵。好了,我继续去和那个祖传代码搏斗了……(点烟)

相关推荐