用flex布局搭后台系统,核心是在根容器和body层级加display: flex与box-sizing: border-box;外层设flex-direction: column,主体区设flex-direction: row;侧边栏固定宽、内容区用flex: 1;移动端用order调整顺序而非display: none;全局必须重置box-sizing: border-box。

直接说结论:用 Flex 布局搭后台系统,核心不是“怎么写”,而是“在哪加 display: flex”和“哪些地方必须加 box-sizing: border-box”。其他都是细节,错一个就导致侧边栏撑出屏幕、内容区留白、移动端卡片堆叠错位。
必须在根容器和 body 层级加 flex-direction: column
后台最常见的结构是「顶部状态栏 + 主体区域」,主体区域再分「左侧导航 + 右侧内容」。如果只在中间某一层加 display: flex,很容易出现滚动条失效、高度塌陷或固定定位错乱。
- 外层容器(比如
.app)设display: flex+flex-direction: column,确保整体纵向堆叠 -
.app-body(即顶部下方的主区域)再设display: flex+flex-direction: row,形成左右分栏 - 不要把
display: flex加在body上——某些浏览器会干扰height: 100vh的计算,导致内容区高度不足 - 移动端切换时,
.app-body的flex-direction改成column比隐藏侧边栏更稳妥,避免重排错乱
侧边栏固定宽度 + 内容区 flex: 1 是唯一可靠方案
很多人用 width: 250px + float 或 position: absolute 控制侧边栏,结果在 Safari 或旧版 Edge 里内容区不自适应,或者滚动条消失。Flex 下最稳的写法就两条:
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
- 侧边栏设固定
width(如240px),不设flex相关属性 - 内容区设
flex: 1—— 它等价于flex-grow: 1; flex-shrink: 1; flex-basis: 0%,能真正填满剩余空间 - 千万别用
flex: auto或flex: initial,它们在不同浏览器下对flex-basis的默认值处理不一致,容易导致内容区宽度忽大忽小 - 如果内容区内部还要分上下(比如面包屑 + 卡片列表),它自己也得是
display: flex; flex-direction: column
移动端响应式的关键不是 display: none,而是 flex-wrap 和 order
单纯用 @media 把侧边栏 display: none 看似简单,但会破坏 Flex 的布局流:内容区突然变宽,内部子元素没重排逻辑,卡片间距错乱、按钮换行异常。
- 推荐做法:保持侧边栏 DOM 存在,用
flex-direction: column+order调整渲染顺序 - 给侧边栏加
order: -1,让它在移动端排到顶部;内容区加order: 1,自然下沉 - 配合
flex-wrap: wrap和width: 100%,让卡片在小屏自动单列排列,不用 JS 控制显隐 - 注意:IE11 不支持
order,如果必须兼容,改用flex-direction: column-reverse+margin-top模拟,但要测试滚动锚点是否偏移
所有 padding/margin 都要配合 box-sizing: border-box
这是最容易被忽略、但影响最大的点。Flex 计算剩余空间时,padding 和 border 默认是加在 width 外的。一个 padding: 20px 的卡片,在 flex: 1 容器里可能直接溢出。
- 全局重置必须写:
* { box-sizing: border-box; },不能只写div或.container - 特别是导航菜单的
ul,默认有padding-left: 40px,不重置会导致菜单项整体右偏 - 按钮、表单控件、卡片这些带内边距的元素,一旦没设
box-sizing: border-box,flex-basis就完全不可控 - 别信“现代浏览器都默认了”——Chrome 128+、Firefox 125+ 确实改了,但 Electron、微信内置浏览器、部分国产安卓 WebView 还是老行为
真正卡住进度的,从来不是 Flex 属性记不全,而是 box-sizing 忘写、flex-direction 加错层级、或者以为 flex: 1 能自动处理内边距。这些点不提前踩一遍,调试时花的时间远超写代码本身。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










