被现代 CSS 布局爽到了!这几个技巧彻底改变我的开发习惯
本文最后更新于235 天前,其中的信息可能已经过时,如有错误请发送邮件到109484028@qq.com

最近重构老项目,把以前用浮动、定位堆出来的布局,全换成了现代 CSS 方案 ——Grid、Flexbox、Container Queries 这些,写完直接感叹:原来布局可以这么省心!今天就聊聊实战里最常用的几个技巧,以及那些 “早知道早省事” 的经验~

首先必须吹爆 Grid 布局,尤其是做整体页面框架的时候,以前用 “header+main+footer” 还要算 margin、清浮动,现在几行代码就能搞定。比如经典的 “三栏布局”(导航 + 内容 + 侧边栏),用grid-template-areas直接 “画” 结构,谁在哪个位置一目了然:

.layout {

  display: grid;

  grid-template-areas: 

    "header header header"

    "nav content sidebar"

    "footer footer footer";

  grid-template-columns: 200px 1fr 200px; /\* 中间内容自适应 \*/

  gap: 1rem; /\* 自带间距,不用算margin \*/

}

最香的是响应式调整,比如移动端要把三栏叠成一栏,只要改下grid-template-areasgrid-template-columns,不用动 HTML 结构,比以前写 N 个媒体查询改浮动方便太多。

然后是 Flexbox,做卡片列表、组件内部对齐的时候简直是神器。以前写卡片布局,要算 “一行能放几个”“不够宽时换行”,现在用flex: 1 1 300px就能实现 “卡片最小 300px,够宽就平分空间”,再加上flex-wrap: wrap自动换行,省了一堆计算:

.card-container {

  display: flex;

  flex-wrap: wrap;

  gap: 1rem;

}

.card {

  flex: 1 1 300px; /\* 伸缩性+基准宽度,完美适配不同屏幕 \*/

}

还有个小细节:用flex-direction: column+flex: 1能让卡片内容 “撑满剩余高度”,比如卡片里的文字区不管内容多少,都和其他卡片对齐,以前要靠 JS 算高度,现在 CSS 一行搞定,太爽了!

今年新学的 Container Queries 更是颠覆认知 —— 以前响应式只能 “看屏幕宽度”,现在能 “看父容器宽度” 了!比如卡片在窄容器里是上下布局,放到宽容器里自动变成左右布局,不用再纠结 “屏幕多大时改样式”,直接盯着父容器写规则:

.card-container {

  container-type: inline-size; /\* 开启容器查询 \*/

}

@container (min-width: 400px) {

  .card {

    flex-direction: row; /\* 父容器够宽,卡片横排 \*/

  }

}

比如在侧边栏里的卡片是竖排,放到主内容区自动横排,完全不用写媒体查询,适配逻辑更直观了。

不过也踩过两个小坑:一是刚开始用 Grid 的时候,总忘了gapmargin的区别,加了gap又加margin导致间距翻倍;二是 Container Queries 目前还需要给父容器加container-type,忘了加就没效果,后来养成了 “写容器查询先开容器类型” 的习惯。

另外,CSS 变量一定要用!把间距、颜色、基准宽度定义成变量,比如--spacing-unit: 8px,后面改样式的时候不用到处找数值,直接改变量就行。我还会用clamp()做自适应宽度,比如--card-width: clamp(300px, 30vw, 400px),卡片宽度既不会太小也不会太大,适配各种屏幕刚好。

最后想说,现在写 CSS 真的不用再 “委屈自己” 了,别再依赖浮动和定位堆布局,试试 Grid、Flexbox 这些现代方案,效率能提一倍不止。如果你们有 “用 CSS 变量做主题切换”“Grid 嵌套布局” 的经验,也欢迎评论区分享,一起少写冗余代码~ ✨

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇