LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Flex 布局中容易踩的那些坑,你踩过几个?

zhenglin
2026年1月6日 14:45 本文热度 357
Flex 布局中容易踩的那些坑,你踩过几个?


在日常开发中,Flex 布局几乎是写页面绕不过去的一道坎。它强大、灵活,看起来也“简单易用”,但一旦涉及复杂嵌套和内容溢出。

很多同学就懵了,明明写了 flex: 1,为什么内容却把整个布局撑爆了?又或者明明设置了 flex-basis: 0%,但布局偏偏不听话?


今天这篇文章,我们就来聊聊 Flex 布局中几个非常容易踩坑但极具实用价值的知识点,希望大家看完后都能成为真·Flex高手 💪


🌱 基础热身:Flex 布局是个啥?

Flex(全称 Flexible Box)是一种 CSS3 的布局模式,最适合处理“一维方向”的布局,比如横向菜单、纵向分栏、左右结构自适应等。

使用起来也很简单,核心就两步:

.parent {

  display: flex;            /* 开启 Flex 布局 */

  flex-direction: row;      /* 主轴方向,row 是默认横向 */

}

然后子元素可以设置:

.child {

  flex: 1;

}


这表示“尽可能占用剩余空间”。

看到这里你可能会觉得:so easy!但别急,坑还在后面等你……


🧩 flex 缩写属性到底包含了什么?

我们经常看到这样的写法:

.child {

  flex: 1;

}

其实这是一个缩写,相当于:

代码高亮:

.child {

  flex-grow: 1;

  flex-shrink: 1;

  flex-basis: 0%;

}


注意:如果你只写了 flex: 1,浏览器默认会把 flex-basis 当作 0%,而不是我们以为的 0px


这就引出下面一个很容易被忽视的问题:0% 和 0(0px)是不同的!


🎯 flex-basis: 0 和 0% 有啥区别?

先说一句结论:

✅ 推荐大家写 flex: 1 1 0不要写 0%,直接写数字 0 更靠谱!

为什么这么说?

  • flex-basis: 0 是绝对值,表示起始尺寸就是 0;

  • flex-basis: 0% 是百分比,要基于父容器来计算,如果父容器的尺寸是“auto”或者“受内容撑开的”,那就……很可能会出现奇怪的布局行为。

简单说,浏览器可能会根据内容来“猜”,而不是你说了算。

所以写 flex: 1 1 0 更明确,不容易出错,建议全团队都统一用这个写法 ✅。



🧨 flex 子元素为什么有时被撑爆了?

这个问题是 Flex 布局里最常见、也最容易让人抓狂的坑之一

比如你写了一个三段式页面布局:

<div class="app">

  <div class="header">Header</div>

  <div class="content">内容很多很多很多很多...</div>

  <div class="footer">Footer</div>

</div>

.app {

  display: flex;

  flex-direction: column;

  height: 100vh;

}


.header, .footer {

  flex: 0 0 60px;

}


.content {

  flex: 1 1 0;

}

你以为 .content 会自动占满剩余空间?错!如果 .content 内容很多,它会直接把自己撑大,把 .footer 都挤出去了!


为什么?


因为浏览器默认会给 Flex 子项加个 min-height: auto(或 min-width: auto,也就是说:子项至少要包住自己的内容

这就导致了我们设置的 flex-shrink: 1 形同虚设,它根本不会去收缩。




🛠 解决方案:加上 min-height: 0

只需要一行代码,立刻解决问题:

.content {

  flex: 1 1 0;

  min-height: 0;     /* ✅ 关键修复点 */

  overflow: auto;     /* ✅ 如果内容很多,别忘记滚动 */

}

如果你用的是横向布局,就把 min-height 换成 min-width: 0

🔥 为什么一定要写这个?

来自 MDN 的官方原话:

By default, flex items have a min-height (or min-width) of auto, which means their size will not shrink below their content size even if flex-shrink allows it

就是说,默认你不设置,子元素就会自动撑开。这就是你 layout 崩坏的罪魁祸首!



总结一下本文几个关键知识点:

 

参考文章:原文链接


该文章在 2026/1/6 14:45:36 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved