CSS布局混乱主因是结构未预设、样式未分层;应先语义化拆分模块(如header/sidebar/main/footer),再于需对齐的父容器上精准启用Flex,配合命名空间避免污染。
写 CSS 布局时越写越乱,通常不是因为技术不够,而是结构没提前想清楚、样式没合理分层。用 Flex 布局本身不能自动理清逻辑,关键在于“先拆模块,再用 Flex 控制内部关系”。
别一上来就写 .container 或 .main,先看设计稿或需求,用语义化容器明确划分功能区域,比如:
—— 顶部导航栏 —— 左侧菜单栏 —— 主内容区 —— 底部信息每个模块单独写样式,互不干扰。例如:.sidebar { width: 240px; } 和 .content { flex: 1; } 就不会互相覆盖。
Flex 最适合解决“一组子元素怎么排”的问题,不是用来撑满整个页面的。常见误用是给 body 或最外层 div 加 display: flex,结果所有后代都受牵连。
正确做法是:只在真正需要对齐/分布的父容器上启用 Flex,比如:
.nav 加 display: flex; justify-content: space-between;
.card-list 加 display: flex; flex-wrap: wrap; gap:
16px;
.form-row 加 display: flex; align-items: center;
初级项目容易出现类名重复、样式意外生效。建议每个模块用统一前缀,比如:
header-logo、header-nav、header-user
card-title、card-desc、card-action
这样即使多个模块都有 title,也不会互相影响。配合现代编辑器(如 VS Code)的类名提示,写起来也更顺。
布局乱了,别急着删代码。打开 DevTools,选中一个元素,看它的:
flex 或 overflow 截断display 和 flex-direction 是不是你预期的很多时候问题不在你写的那几行,而在某层祖先悄悄加了 flex-direction: column 或 align-items: stretch。
不复杂但容易忽略:拆模块是思维习惯,Flex 是工具。先画草图分块,再逐个用 Flex 搞定内部,整体会清爽很多。