解密Flex布局:为什么flex:1仍会导致内容溢出

作者:卸任日期:2025/11/29

前言

今天在解决别的bug时发现了个很奇怪的东西,我的容器明明设置了flex:1为什么还会导致内容溢出,导致比我设想的flex:1尺寸来得大。

后来才知道

浏览器默认为flex容器的子元素设置了 min-width: auto;min-height: auto,这意味着子元素的最小宽度和高度不能小于其内容的宽度和高度。

这就是为什么明明是flex:1,但是为什么比预想的要大了。

正文

单单文字说明还是难以理解,来看图和代码吧

有问题的代码,父元素设置100vw,子元素设置flex:1;

1function App() {
2  return (
3    <div
4      style={{
5        display: "flex",
6        height: "100vh",
7        width: "100vw",
8        gap: "10px",
9      }}
10    >
11      <div
12        style={{
13          width: "200px",
14          textAlign: "left",
15          backgroundColor: "red",
16        }}
17      >
18        Left
19      </div>
20      <div
21        style={{
22          flex: 1,
23          textAlign: "left",
24          backgroundColor: "blue",
25        }}
26      >
27        <section
28          style={{
29            height: "100%",
30            width: "100%",
31            overflow: "auto",
32            backgroundColor: "lightcyan",
33          }}
34        >
35          <div>
36            <div>asdasd</div>
37            <div>
38              asdasdasdasdasdsadsadasdsadasdiuoasdgiasgdfasghdiopasdyiuskafdgiuashdasgvdsadpjnasildgsaodiasoudgasiugdasyfdgasudiyfasdhoiashdgiouasgdiu
39            </div>
40            <div>asdasd</div>
41          </div>
42        </section>
43      </div>
44    </div>
45  );
46}
47

预计是滚动条只在右边区域,总页面没有滚动条。但是实际的总页面有滚动条,右边区域没有滚动条。这就是浏览器默认为flex容器的子元素设置了 min-width: auto;min-height: auto,这意味着子元素的最小宽度和高度不能小于其内容的宽度和高度,把右侧的内容撑大了,导致内容溢出了。

如何解决呢

  1. 设置 overflow,利用BFC
  2. 设置 min-width: 0

任意使用一种都可以,是我们预计的情况了。

修改后代码

1function App() {
2  return (
3    <div
4      style={{
5        display: "flex",
6        height: "100vh",
7        width: "100vw",
8        gap: "10px",
9      }}
10    >
11      <div
12        style={{
13          width: "200px",
14          textAlign: "left",
15          backgroundColor: "red",
16        }}
17      >
18        Left
19      </div>
20      <div
21        style={{
22          flex: 1,
23          textAlign: "left",
24          backgroundColor: "blue",
25          minWidth: 0, //关键
26        }}
27      >
28        <section
29          style={{
30            height: "100%",
31            width: "100%",
32            overflow: "auto",
33            backgroundColor: "lightcyan",
34          }}
35        >
36          <div>
37            <div>asdasd</div>
38            <div>
39              asdasdasdasdasdsadsadasdsadasdiuoasdgiasgdfasghdiopasdyiuskafdgiuashdasgvdsadpjnasildgsaodiasoudgasiugdasyfdgasudiyfasdhoiashdgiouasgdiu
40            </div>
41            <div>asdasd</div>
42          </div>
43        </section>
44      </div>
45    </div>
46  );
47}
48

结语

有兴趣的可以去试试


解密Flex布局:为什么flex:1仍会导致内容溢出》 是转载文章,点击查看原文


相关推荐


C++26:开启新纪元
码事漫谈2025/11/26

对于C++开发者而言,语言的进化从未停止。C++26,作为C++23之后的下一代标准,并非一次简单的修补,而是一次旨在重塑我们编写高性能、高维护性代码方式的雄心勃勃的尝试。它将并发编程、编译时计算和类型安全提升到了前所未有的高度,这足以颠覆我们长期以来形成的某些编程习惯和认知。 一、 并发编程的范式转移:从“手工管理”到“声明式执行” 传统的C++并发编程依赖于直接操作 std::thread、std::async 和 std::mutex。这种方式强大但繁琐,且极易出错。C++26 引入的 s


kotlin-6
风冷2025/11/24

太棒了!现在让我们探索 Kotlin 的终极境界——元编程、编译器插件、深度优化和未来特性。这将带你进入 Kotlin 语言设计的核心领域。 Kotlin 终极探索:元编程与语言深度 三十九、注解处理器与代码生成(KSP) 1. 使用 KSP(Kotlin Symbol Processing) // 1. 定义注解 @Target(AnnotationTarget.CLASS) annotation class JsonSerializable @Target(AnnotationTarge


🧭 Claude Code 用户工作区最佳实践指南
LeonGao2025/11/23

🪞一、什么是“Claude Code 工作区”? Claude Code 是 Anthropic 推出的智能代码助手环境,它与你的本地或云端项目文件系统实时同步。 简单说: 它不仅是一个“聊天机器人”,更像是你的“协作程序员”,能直接动手改代码。 而“工作区(Workspace)”则是 Claude 操作的地盘。 这包含: 项目的目录结构 源代码与配置文件 构建、测试、运行环境 上下文记忆(Claude 自己的“脑内编辑区”🧠) 所以,要玩转 Claude Code,你不是在教它写代


【开题答辩全过程】以 基于Android家庭医务助手APP的设计与实现为例,包含答辩的问题和答案
毕设源码-钟学长2025/11/21

个人简介 一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家的关注与支持! 各位老师好,我的毕业设计题目是《基于Android家庭医务助手APP的设计与实现》。该系统主要面向老年人、慢性病患者、孕妇儿童等特殊群体,旨在通过移动互联网技术提供便捷的居家医疗服务。核心功能


在AWS上订阅Kiro
thinktik2025/11/19

Kiro 的简单介绍 kiro是AWS推出的AI IDE,与市场上其他"氛围编程"工具(如Cursor和Windsurf)的区别在于,它是最先提出了SPEC模式的IDE,它会首先根据用户提示生成"规范"或规格说明。在这些规格说明中,Kiro会生成明确的需求、结构化设计和经过测试验证的实现任务,然后再开始工作。 AWS还推出了命令行界面功能Kiro CLI。这一新产品将Kiro带入终端,提供逐行、基于文本的方式与开发智能体交互。与依赖图标和菜单等视觉元素的图形用户界面不同,CLI需要按顺序输入命令


从0搭建Agentic RAG智能推荐系统(无需向量化)|Python实战分享
大模型教程2025/11/18

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI。 传统RAG(检索增强生成)依赖向量化检索,流程复杂且资源消耗大。而Agentic RAG提供了一种更轻量的替代方案——无需向量化,仅需结构化内存数据库即可实现高效检索+生成。 <图片源于:LLM大模型> Agentic RAG在传统RAG流程的基础上加入了一个重要角色——Agent(智能体) 。它不仅能检索,还能根据任务动态选择工具、拆解问题、调用外部API,甚至多轮迭代优化结果。这意味着它可以: 不依赖大型向量数


【赵渝强老师】OceanBase的连接与路由管理
赵渝强老师2025/11/17

OceanBase数据库连接路由管理组件ODP(OceanBase Database Proxy)是OceanBase数据库专用的连接路由管理集群。OceanBase数据库用户的数据会以多副本的形式存放在各个OBServer节点上,ODP接收用户发出的SQL请求,并将SQL请求转发至最佳目标OBServer节点,最后将执行结果返回给用户。 一、 ODP简介 OceanBase数据库与传统单机数据库不同,OceanBase数据库是分布式数据库,每个表甚至每个表的不同分区都可能存放在不同的机器上


Redis(127)Redis的内部数据结构是什么?
Victor3562025/11/16

Redis 是一个高性能的内存数据库,其底层实现依赖于多种数据结构。这些数据结构不仅决定了 Redis 的高性能,也使得 Redis 在处理不同类型的数据时能够保持高效。下面详细介绍 Redis 的内部数据结构,并结合具体代码示例进行解释。 1. 字符串(String) 字符串是 Redis 中最基本的数据类型。它不仅可以存储文本,还可以存储二进制数据,如图像或序列化对象。 示例代码 import redis.clients.jedis.Jedis; public class RedisStr


基于STM32与RS485总线的串口通信
listhi5202025/11/14

一、硬件架构设计 1. 硬件连接示意图 STM32(F103C8T6) MAX485芯片 LabVIEW PC - - USART1_TX → DI → RO (MAX485) USART1_RX ← RO → DI (MAX485) DE/RE → GPIOA.8 → DE/RE (控制) GND → GND 3.3V → VCC 2. 关键元器件选型 元件型号作用MCUSTM32F103C8T6主控芯片R


电脑硬盘数据恢复原理及核心技术解析
电脑小白技术2025/11/13

数据恢复技术的核心在于理解文件删除的底层逻辑。当文件被删除时,操作系统并未立即清除数据,而是将文件占用的空间标记为可覆盖。这意味着,只要这些空间未被新数据覆盖,文件就有机会被恢复。数据恢复技术通过扫描硬盘,寻找这些被标记为可覆盖但尚未被覆盖的数据块,从而实现文件的恢复。 在实际应用中,数据恢复技术已成功帮助无数人找回误删的重要文件。无论是个人用户还是企业,数据恢复技术都发挥着不可替代的作用。通过本文,我们将深入探讨数据恢复技术的原理、方法及其应用案例,带您了解这一神秘而实用的技术。 硬盘

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读