在学 CSS 的时候偶尔都会碰到 flex 布局,由于一直以来都使用传统的 display ,float ,以及 position 来实现基本的布局,因此对 flex 布局没有过多的了解。但对于一些特殊的布局,flex 布局会相对友好些。于是在网上查了资料学习后,也用这篇文章来记录下。
首先要了解下什么是 flex 布局,来看下 MDN web docs 对其的解释:
Flexible Box 模型,通常被称为 flexbox,是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力。
当我们需要给容器设置 flex 布局时,只需添加如下代码:1
2
3
4body{
display: -webkit-flex; /* webkit 内核的浏览器适配 */
display: flex;
}
了解 flex 布局,首先是两根轴线–主轴以及交叉轴,主轴有 flex-direction 定义,另一轴垂直于它。其次是下面这 6 个属性:1
2
3
4
5
6- flex-direction
- flex-wrap
- flex-flow
- justify-content
- align-items
- align-content
- flex-direction 有 4 个取值,row | row-reverse | column | column-reverse
row | row-reverse 表示主轴沿着横排的方向也就是 inline 方向延伸,reverse 表示起点从右端开始,默认在左端
column | column-reverse 表示主轴沿着竖排方向也就是 block 方向延伸,reverse 表示起点从下开始,默认在上 - flex-wrap 定义如何换行,有 3 个取值 nowrap | wrap | wrap-reverse
nowrap 为不换行,wrap 为换行,wrap-reverse 也为换行,但是从下往上排 - flex-flow flex-direction 与 flex-wrap 的简写,默认值为 row nowrap
- justify-content 定义在主轴上的对齐方式。有 5 个值 flex-start(左对齐) | flex-end(右对齐) | center(居中) | space-between(两端对齐) | space-around(两侧间距相等);
- align-items 定义在交叉轴上的对齐方式,有 5 个值 flex-start(起点对齐) | flex-end(终点对齐) | center(居中) | baseline(第一行文字的基线对齐) | stretch(默认值,占满容器高度)
- align-content 定义多根轴线在交叉轴的对齐方式,如果只有一根轴线,该属性不起作用,有 6 个值
flex-start:起点对齐。
flex-end:终点对齐。
center:与交叉轴的中点对齐。
space-between:轴两端对齐,轴线之间的间隔平均分布。
space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
stretch(默认值):轴线占满整个交叉轴。
除此之外,还有其它一些属性值得了解。
- order属性-优先级
定义项目的排列顺序。数值越小,排列越靠前。 - flex-grow-放大
定义项目的放大比例,默认为 0 。如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。 - flex-shrink-缩小
定义项目的缩小比例,默认为 1。如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。 - flex-basis
定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。 - flex
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。 align-self
允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。