Flex-box 由伸缩盒和伸缩项目组成。通过设置元素的 display 属性为 flex 或 inline-flex ,可以得到一个伸缩容器。设置 flex 的容器被渲染成一个块级元素,而设置 inline-flex 的容器则渲染为一个行内元素。
display: flex | inline-flex;
其子元素将变成 flex 文档流,被称为伸缩项目。此时, CSS 的 columns
属性在伸缩容器上么有任何效果,同时 float
、 clear
、 vertical-align
属性在伸缩项目没有效果。
伸缩项目中的每一个子元素都是一个伸缩项目,伸缩项目可以是任意数量的,伸缩容器外和伸缩项目内的一切元素都不受影响。伸缩项目沿着伸缩容器内的一个伸缩行定位,通常每一个伸缩容器只有一个伸缩行。
定义成弹性盒后, css 的 columns 属性在伸缩盒上没效果,同时 float
、 clear
和 vertical-align
在伸缩项目无效果。
常规布局是基于块和文本流方向,而 flex
布局是基于 flex-flow
流。
基本上,伸缩项目是沿着主轴( main axis ),从主轴起点( main-start )到主轴终点( main-end );或者沿着侧轴( cross axis),从侧轴起点( cross-start )侧轴终点( cross-end )排列:
使用 flex-direction 属性来定义伸缩方向。语法如下
flex-direction: row | row-reverse |column | column-reverse;
使用 flex-wrap 定义多行显示,侧轴方向决定了新型堆放方向。
flex-wrap: nowrap | wrap | wrap-reverse;
flex-flow 属性是 flex-direction 和 flex-wrap 属性的复合属性,适用于伸缩容器。该属性可以同时定义伸缩容器的主轴和侧轴,其默认值为 row nowrap 。具体如下:
flex-flow: < 'flex-direction' > | | < 'flex-wrap' >;
为盒中每一个项目定义了默认的 justify-self ,使这些项目默认沿着轴线对齐到盒子。
属性用来定义伸缩项目沿着主轴的对齐方式。该属性适用于伸缩容器,当一行上的所有伸缩项目都不能伸缩或是达到其最大长度时,这一属性才会对多余的空间进行分配。到项目溢出某一行时,这一属性也会在对齐上加以控制:
justify-content: flex-start | flex-end |center | space-between | space-around;
属性用来定义伸缩项目在伸缩容器中当前行的侧轴上对齐方式。类似于侧轴的 justify-content 属性。语法如下:
align-items: flex-start | flex-end |center |baseline | stretch;
被用来调整伸缩行在伸缩容器内的对齐方式,本属性在只有一行的伸缩容器上没有效果。语法如下:
align-center: flex-start | flex-end |center | space-between | space-around |
stretch;