Flexible Box (弹性盒)模型,通常被称为 flexbox,是一种一维的布局模型。使用flex
布局,对于以前相对较难实现的样式更加简单,在使用flex
以前需要了解一些概念。
轴线
flex
布局是相对于两条轴线进行布局,分别是主轴(Main Axis)与交叉轴(Cross Axis),主轴可以通过属性flex-direction
进行指定,交叉轴则垂直于主轴。默认条件下,主轴与交叉轴的方向如图
以开启
flex
的容器(flex container
)的左上顶点为原点,向右为主轴,向下为交叉轴
Flex 容器
flex
容器指的是开启flex
布局的元素,其直接子元素又叫做flex
元素(flex item)
通过
display: flex;
或display: inline-flex
当元素变为flex
容器之后,其直接子元素,不再严格区分块级元素与行内元素
但是容器本身还是区分的,由上面的两个属性值可以看出
使用
想要使用flex
就要先开启弹性盒布局,通过设置display
属性值为flex
或inline-flex
开启。之后通过设置作用于容器或flex 元素的属性来完成布局
作用于容器的属性
- flex-direction:设置主轴方向
- row: 默认值,按行 从左至右
- row-reverse: 按行 从右至左
- column:按列 从上至下
- column-reverse:按列 从下至上
交叉轴与主轴保持垂直
- flex-wrap:是否换行
- nowrap :默认值,不换行,如果超出范围按照主轴进行压缩排列
- wrap:换行
- wrap-reverse:换行,但是从主轴的对面开始排列,方向还是按照主轴(按我的理解看是这样)
由于flex为一维布局,所以开启换行之后,应该把每一行,看成一个新的容器,
- justify-content:主轴对齐方式
- stretch:均匀排列每个元素
- flex-start:主轴开始位置开始排列
- flex-end:主轴结束位置开始排列
- center:居中
- space-around:均匀排列每个元素,元素周围分配相同空间
- space-between:均匀排列每个元素,首尾元素分别放于起点终点
- space-eveny:均匀排列每个元素,每个元素之间的间隔相同
还有其他属性值justify-content,具体效果还是要自己试一试才知道
- align-items:交叉轴对齐方式
- center:居中
- flex-start
- flex-end
- flex-flow:是 1,2的缩写属性
作用于flex元素的属性
- order:指定元素的排列顺序,默认值是0,数越大排列越后,可以是负数
<style>
.box {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
width: 400px;
height: 400px;
background-color: #ccc;
font-size: 28px;
}
.box .item {
width: 100px;
height: 100px;
background-color: #3786d6;
}
.item1 {
order: 3;
}
.item3 {
order: -4;
}
</style>
<div class="box">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
</div>
- flex-shrink:指定 flex 元素的收缩规则
- flex-grow:指定flex 元素在flex 容器中分配剩余空间的相对比例
结束语
flex布局对于现在还是非常重要的,虽然属性有点多,但是常用的好像就几个,这次复习了感觉还行,熟能生巧,可以通过小青蛙来进行练习,更多的还是要看MDN:flex相关来学习