CSS Flex 布局(弹性布局),这是前端开发中最常用的移动端 / 响应式布局方案—— 它能让容器内的子元素灵活地分配空间、对齐排列,告别传统的浮动(float)布局痛点。我会从核心概念、常用属性、实战案例(结合你之前的评论框代码)三个维度讲清楚,新手也能快速上手。
一、Flex 布局的核心概念(先搞懂这 2 个,事半功倍)
Flex 布局的核心是「容器」和「项目」:
Flex 容器(Flex Container):设置了 display: flex; 的父元素(比如你代码里的 .wrapper);
Flex 项目(Flex Item):容器内的直接子元素(比如 .wrapper 里的 i.avatar、textarea、button)。
直观示意图
plaintext
┌─────────────────────────── Flex容器 ───────────────────────────┐
│ ┌── Flex项目 ┐ ┌────── Flex项目 ──────┐ ┌── Flex项目 ┐ │
│ │ avatar │ │ textarea │ │ button │ │
│ └───────────┘ └──────────────────────┘ └───────────┘ │
└──────────────────────────────────────────────────────────────┘
二、Flex 布局的核心属性(分「容器属性」和「项目属性」)
- 给「容器」设置的属性(控制整体排列)
属性名 作用 常用值 你的代码示例
display: flex 把元素设为 Flex 容器,子元素自动变成 Flex 项目 flex(块级容器)、inline-flex(行内容器) .wrapper { display: flex; }
justify-content 控制项目在「主轴」(默认水平)上的对齐方式 flex-start(左对齐,默认)、flex-end(右对齐)、center(居中)、space-between(两端对齐)、space-around(均匀分布) .wrapper { justify-content: flex-end; }
align-items 控制项目在「交叉轴」(默认垂直)上的对齐方式 flex-start(上对齐)、flex-end(下对齐)、center(垂直居中)、stretch(拉伸填满) 比如 .wrapper { align-items: center; } 让头像 / 输入框 / 按钮垂直居中
flex-direction 定义主轴方向(控制项目排列方向) row(水平从左到右,默认)、row-reverse(水平从右到左)、column(垂直从上到下) -
flex-wrap 控制项目是否换行(默认不换行,会挤压项目) nowrap(不换行,默认)、wrap(换行)、wrap-reverse(反向换行) - - 给「项目」设置的属性(控制单个项目)
属性名 作用 常用值 你的代码示例
flex 简写属性,控制项目的「伸缩性」(核心!),格式:flex: 份数 基准宽度 缩放优先级 flex: 1(占满剩余空间)、flex: 0 0 70px(固定宽度 70px,不缩放) .wrapper textarea { flex: 1; }
align-self 单独设置某个项目的交叉轴对齐方式(覆盖容器的align-items) center、flex-end、flex-start等 -
order 控制项目的排列顺序(数值越小越靠前,默认 0) 0、1、-1(比如让按钮排到最前面) -
三、实战拆解(结合你的评论框代码)
你之前的代码里已经用到了 Flex 布局的核心,我帮你拆解并优化:
css
/ 你的容器样式 /
.wrapper {
min-width: 400px;
max-width: 800px;
display: flex; / 开启Flex布局 /
justify-content: flex-end; / 项目右对齐 /
/ 补充:让项目垂直居中,更美观 /
align-items: center;
margin: 10px auto; / 容器水平居中 /
}
/ 你的项目样式 /
.wrapper .avatar { / 项目1:头像 /
width: 48px;
height: 48px;
margin-right: 20px; / 项目间间距(替代flex的space-between) /
/ 固定尺寸,不缩放 /
flex: 0 0 48px;
}
.wrapper textarea { / 项目2:输入框 /
flex: 1; / 核心!占满容器剩余空间 /
height: 30px;
padding: 10px;
}
.wrapper button { / 项目3:发布按钮 /
width: 70px;
margin-left: 10px;
/ 固定宽度,不缩放 /
flex: 0 0 70px;
}
核心效果解析:
display: flex 让 .wrapper 里的头像、输入框、按钮排成一行;
textarea { flex: 1 } 让输入框自动占满「容器宽度 - 头像宽度 - 按钮宽度 - 间距」的剩余空间,适配不同屏幕;
justify-content: flex-end 让这三个项目整体右对齐(你可以改成 center 试试居中效果);
补充 align-items: center 后,头像 / 输入框 / 按钮会垂直居中,不会出现高低不齐的问题。
四、Flex 布局的经典场景(新手必用)
场景 核心属性组合
水平垂直居中 容器:display: flex; justify-content: center; align-items: center;
两栏布局(侧边栏固定 + 主内容自适应) 侧边栏:flex: 0 0 200px; 主内容:flex: 1;
均分列布局(3 列等宽) 三个项目都设 flex: 1;
底部固定(页面内容不足时,页脚贴底部) 容器:display: flex; flex-direction: column; min-height: 100vh; 主内容:flex: 1;
五、避坑点(新手常犯)
❌ 给 Flex 容器的子元素用float/clear:Flex 布局会覆盖浮动,浮动失效;
❌ 行内元素设display: flex:要先转成块级(display: block)或直接用inline-flex;
❌ 项目设width: 100% 同时设flex: 1:会冲突,优先用flex: 1控制自适应;
❌ 忘记设置flex-wrap: wrap:项目总宽度超过容器时,会挤压项目而不是换行。
总结
Flex 布局的核心是「容器 + 项目」,容器设display: flex后,子元素自动变成弹性项目;
常用核心属性:justify-content(主轴对齐)、align-items(交叉轴对齐)、flex: 1(项目自适应);
你的评论框代码已经用到了 Flex 的核心(display: flex+flex: 1),补充align-items: center能让布局更美观。