当前位置: 首页 > news >正文

弹性盒子布局

弹性盒子(Flexbox)是一种灵活的线性容器。如果希望元素在水平或垂直方向依次排列,并且能够根据容器尺寸自动调整元素位置和大小,可以使用弹性盒子布局。

弹性盒子布局包括两部分:flex容器和flex元素。如果一个元素的 display 属性是 flex ,它就成为flex容器,它的下级元素成为flex元素。flex容器是块元素,独占一行。如果不希望flex容器产生换行,可以将容器的 display 属性设置为 inline-flex 。

弹性盒子是一种线性容器,这条线叫做主轴。沿着主轴方向,flex元素在flex容器中依次排列。主轴方向由flex容器的 flex-direction 属性决定,值可以是

表1  flex-direction
flex-direction排列方向
row(默认值)左起水平向右
row-reverse右起水平向左
column上起垂直向下
column-reverse下起垂直向上

flex元素的宽度(高度)由flex元素的属性 flex-basis (优先级高)或 width ( height )决定。flex元素未必总能恰好排满主轴,通常需要处理“排不满”和“排不下”两种情况。

“排不满”有两种处理方法:一是拉伸元素覆盖剩余空间,二是用空白填充剩余空间。

表2  “排不满”的处理方法
处理方法元素属性值
拉伸元素flex元素flex-grow: 1;
填充空白-在终点填充flex容器justify-content: start;
填充空白-在起点填充flex容器justify-content: end;
填充空白-在两端填充flex容器justify-content: center;
填充空白-在元素周围填充flex容器justify-content: space-betwwen;
填充空白-在元素周围填充flex容器justify-content: space-around;
填充空白-在元素周围填充flex容器justify-content: space-evenly;

如果主轴没有排满,剩余空间按比例分配给各个flex元素,权重就是元素的 flex-grow 值。 flex-grow 默认值是0,表示不会为元素分配剩余空间。

如果采用填充空白的方法,需要设置flex容器的 justify-content 属性,取值如下:

表3  justify-content
justify-contentflex元素排列方式
start(默认值)第一个在行首,紧邻排列。
end最后一个在行尾,紧邻排列。
center居中紧邻排列。
space-between第一个行首,最后一个行尾,均匀排列。
space-around均匀排列,元素之间距离相同,均是容器与(首尾)元素距离的2倍。
space-evenly均匀排列,元素之间、容器与(首尾)元素的距离相同。

“排不下”有五种处理方法:一是收缩元素适配主轴长度,二是换行,三是溢出,四是截断,五是使用滚动轴。

表4  “排不下”的处理方法
处理方法元素属性值
收缩元素flex元素flex-shrink: 1;
换行flex容器flex-wrap: wrap;
溢出flex容器flex-wrap: nowrap;
截断flex容器flex-wrap: nowrap; overflow: hidden;
滚动轴flex容器flex-wrap: nowrap; overflow: scroll;

flex-shrink 和 flex-grow 相对的属性,当主轴空间不足时,元素以 flex-shrink 为比例收缩。区别在于, flex-shrink 默认值是1,即在默认情况下,均匀收缩flex元素以适配主轴长度。 flex-wrap 属性用于控制换行方式,如果主轴排满了,后续元素会在新一行(列)上继续排列。新的一行(列)默认排列在原行(列)的下方(右侧),这个方向叫做交叉轴方向。交叉轴是与主轴垂直且向下或向右的方向。

表5  flex-wrap
说明
wrap换行(列)。新行(列)沿交叉轴方向(下方/右侧)排列。
nowrap(默认值)不换行(列)。
wrap-reverse换行(列)。新行(列)沿交叉轴方向反向(上方/左侧)排列。

在不换行(列)的情况下,通过控制flex容器的 overflow 属性,可以实现溢出、截断或滚动轴效果。

表6  overflow值
visible(默认值)溢出。显示超出容器尺寸的内容,侵入其他元素的盒模型空间。
hidden截断。不显示超出容器尺寸的内容。
scroll滚动条。提供滚动条,拖动时显示超出容器尺寸的内容。

讲完了主轴上元素的排列方式,现在介绍元素在交叉轴方向的对齐方式,它由flex容器的 align-items 属性决定。

表7  align-items属性
align-items说明
start(默认值)按交叉轴起点对齐
end按交叉轴终点对齐
center按交叉轴居中对齐
baseline按文字基线对齐
stretch拉伸元素,填充容器高度

如果某个flex元素希望拥有独立的对齐方式,可以使用flex元素的 align-self 属性,它会在flex元素中覆盖flex容器的 align-items 属性。两个属性取值是一样的。

flex元素默认按照元素在HTML文档中的顺序排列。调整 order 属性可以修改flex元素顺序,越大越靠后,默认值是0。

为了简化编码,CSS提供了关于flex的缩写。

表8  flex缩写
元素缩写含义
flex元素flex: 2;单值,无单位数字flex-grow
flex: 30px;单值,距离flex-basis
flex: 1 30px;双值flex-grow flex-shrink
flex: 2 2 10%;三值flex-grow flex-shrink flex-basis
flex容器flex-flow: row;单值flex-direction
flex-flow: wrap;单值flex-wrap
flex-flow: column wrap;双值flex-direction flex-wrap

相关文章:

  • 预训练大模型与元训练大模型在医疗AI项目中的选型对比分析
  • DELL R740服务器闪黄灯不开机故障案例
  • CSdiy java 05
  • 除了Object.freeze(),JavaScript中还有哪些优化性能的对象限制方法?
  • 蓝牙BLE
  • 蓝桥杯 18. 机器人繁殖
  • whois为什么有时会返回两个不同的域名状态
  • 【权限模型】RBAC模型详解
  • Spring Security源码解析
  • DeepSeek+Dify之三工作流引用知识库案例
  • 解锁服务器迁移的未来:《2025 服务器迁移效率白皮书》(附下载)
  • 安卓开发学习随记
  • Redis 常见问题深度剖析与全方位解决方案指南
  • 「地平线」创始人余凯:自动驾驶尚未成熟,人形机器人更无从谈起
  • 【Java学习笔记】传参机制
  • 仙宫云ComfyUI —【Wan2.1】AI视频生成部署
  • uniapp利用生命周期函数实现后台常驻示例
  • 代码随想录算法训练营第二十九天
  • 《淘宝 API 数据湖构建:实时商品详情入湖 + Apache Kafka 流式处理指南》
  • 为什么使用ThreadLocal后要调用remove()方法呢?
  • 杭州银行一季度净赚超60亿增逾17%,增速较去年同期有所回落
  • 中介在网上非法贩婴“一个孩子8.5万元”?丹阳警方介入
  • “90后”樊鑫履新乌兰察布市察右中旗副旗长人选
  • 上海通报5起违反中央八项规定精神问题
  • 4月份全国93个国家气象站日最高气温达到或突破极值
  • 贸促会答澎湃:5月22日将举办2025年贸易投资促进峰会