跳到主要内容

定义弹性盒

Flex-box 由伸缩盒和伸缩项目组成。通过设置元素的 display 属性为 flex 或 inline-flex ,可以得到一个伸缩容器。设置 flex 的容器被渲染成一个块级元素,而设置 inline-flex 的容器则渲染为一个行内元素。

display: flex | inline-flex;

其子元素将变成 flex 文档流,被称为伸缩项目。此时, CSS 的 columns 属性在伸缩容器上么有任何效果,同时 floatclearvertical-align 属性在伸缩项目没有效果。

伸缩项目中的每一个子元素都是一个伸缩项目,伸缩项目可以是任意数量的,伸缩容器外和伸缩项目内的一切元素都不受影响。伸缩项目沿着伸缩容器内的一个伸缩行定位,通常每一个伸缩容器只有一个伸缩行。

定义成弹性盒后, css 的 columns 属性在伸缩盒上没效果,同时 floatclearvertical-align 在伸缩项目无效果。

W3C 解释

常规布局是基于块和文本流方向,而 flex 布局是基于 flex-flow 流。

基本上,伸缩项目是沿着主轴( main axis ),从主轴起点( main-start )到主轴终点( main-end );或者沿着侧轴( cross axis),从侧轴起点( cross-start )侧轴终点( cross-end )排列:

  • 主轴( main axis ): 伸缩容器的主轴,伸缩项目主要沿着这个轴进行排布。注意,他不一定是水平的,这主要取决于 justify-content 属性设置
  • 主轴起点( main-start )和主轴终点( main-end ):伸缩项目放置在伸缩容器内从主轴起点( main-start )向主轴终点( main-end )方向
  • 主轴尺寸( main size ):伸缩项目在主轴方向的宽度和高度就是主轴尺寸。伸缩项目主要的大小属性要么是宽度,要么是高度,由哪一个对着主轴方向决定
  • 侧轴( cross axis ): 垂直于主轴,其方向主要取决于主轴
  • 侧轴起点( cross-start )和 侧轴终点( cross-end ):伸缩项目的配置从容器的侧轴起点开始,在侧轴的终点结束
  • 侧轴尺寸( cross-size ): 伸缩项目在侧轴方向的宽度和高度就是侧轴的长度。伸缩项目的侧轴长度属性是 width 或 height 属性,由哪一个对着侧轴方向决定

定义伸缩方向(容器设置)

使用 flex-direction 属性来定义伸缩方向。语法如下

flex-direction: row | row-reverse |column | column-reverse;
  • row: 默认值,在 ltr 排版左到右,在 rtl 排版右到左
  • row-reverse: 与 row 相反 ,在 ltr 排版 右到左,在 rtl 左到右
  • column :类似 row ,不过是从上到下
  • column-reverse: 类似 row-reverse ,不过是上到下

定义行数(容器)

使用 flex-wrap 定义多行显示,侧轴方向决定了新型堆放方向。

flex-wrap: nowrap | wrap | wrap-reverse;
  • nowrap : 默认值,伸缩器单行显示。在 ltr 排版左到右,在 rtl 排版右到左
  • wrap : 伸缩器多行显示,在 ltr 排版左到右,在 rtl 排版右到左
  • wrap-reverse : 伸缩器多行显示,与 wrap 相反

flex-flow 属性是 flex-direction 和 flex-wrap 属性的复合属性,适用于伸缩容器。该属性可以同时定义伸缩容器的主轴和侧轴,其默认值为 row nowrap 。具体如下:

flex-flow: < 'flex-direction' > | | < 'flex-wrap' >;

对齐方式(容器设置) justify-items

为盒中每一个项目定义了默认的 justify-self ,使这些项目默认沿着轴线对齐到盒子。

主轴对齐 justify-content

属性用来定义伸缩项目沿着主轴的对齐方式。该属性适用于伸缩容器,当一行上的所有伸缩项目都不能伸缩或是达到其最大长度时,这一属性才会对多余的空间进行分配。到项目溢出某一行时,这一属性也会在对齐上加以控制:

justify-content: flex-start | flex-end |center | space-between | space-around;
  • flex-start: 默认值,伸缩项目向一行的起始位置靠齐
  • flex-end: 伸缩项目向一行的结束位置靠齐
  • center : 伸缩项目向一行的中间位置靠齐
  • space-between :两端对齐式分布
  • space-around :环绕式对齐,两端保留空间

侧轴对齐 align-items

属性用来定义伸缩项目在伸缩容器中当前行的侧轴上对齐方式。类似于侧轴的 justify-content 属性。语法如下:

align-items: flex-start | flex-end |center |baseline | stretch;
  • flex-start: 伸缩项目在侧轴起点的外侧边距紧靠该行起始边
  • flex-end: 伸缩项目在侧轴起点的外侧边距紧靠该行终止边
  • center: 伸缩项目在侧轴起点的外侧边距紧靠该行居中位置
  • baseline : 基线对齐
  • stretch :默认值,伸缩项目填充整个项目。此值会在项目的外边距盒的尺寸再遵照 min/max-width/height 属性的限制下尽可能的接近行的尺寸

伸缩行对齐 align-center

被用来调整伸缩行在伸缩容器内的对齐方式,本属性在只有一行的伸缩容器上没有效果。语法如下:

align-center: flex-start | flex-end |center | space-between | space-around |
stretch;
  • flex-start: 各行向伸缩项目起点靠齐
  • flex-end: 伸缩项目向各行的结束位置靠齐
  • center : 伸缩项目向各行的中间位置靠齐
  • space-between :各行在伸缩容器内自由分布
  • space-around :各行环绕式对齐,两端保留空间
  • stretch :各行伸缩以占剩余空间