Flexbox布局官方称之为CSS Flexible Box布局模块,他是CSS3中的一种新的布局模式。Flexbox可以控制未知容器元素的对齐方式,排列方向,排列顺序等,甚至是在未知大小的容器也能这样做。Flex容器的主要特点是能够修改其子元素(Flex item)的宽度或高度,使其在不同的屏幕尺寸中填补可用的空间。
width
」或「height
」属性,由哪一个对着主轴方向决定。flex-direction
这是用来创建方轴,从而定义Flex项目在Flex容器中放置的方向。Flexbox是一种单方向的布局概念。认为Flex项目主要排列方式要么是水平排列,要么是垂直列排列。
1 .container { 2 flex-direction: row | row-reverse | column | column-reverse; 3 }
row
(默认值):如果书写方式是ltr
,那么Flex项目从左向右排列;如果书写方式是rtl
,那么Flex项目从右向左排列row-reverse
:如果书写方式是ltr
,那么Flex项目从右向左排列;如果书写方式是rtl
,那么Flex项目从左向右排列column
:和row
类似,只不过方向是从上到下排列column-reverse
:和row-reverse
类似,只不过方向是从下向上排列flex-wrap
默认情况之下,Flex项目都尽可能在一行显示。你可以根据flex-wrap
的属性值来改变,让Flex项目多行显示。方向在这也扮演了一个重要角度,决定新的一行堆放方向。
1 .container{ 2 flex-wrap: nowrap | wrap | wrap-reverse; 3 }
nowrap
(默认值):单行显示,如果书写方式是ltr
,Flex项目从左向右排列,反之rtl
,从右向左排列wrap
:多行显示,如果书写方式是ltr
,Flex项目从左向右排列,反之rtl
,从右向左排列wrap-reverse
:多行显示,如果书写方式是ltr
,Flex项目从右向左排列,反之rtl
,从左向右排列flex-flow
(适用于flex容器元素)这是flex-direction
和flex-wrap
两个属性的缩写。两个属性决定了伸缩容器的主轴与侧轴。默认值是row nowrap
(中间用空格隔开)。
1 flex-flow: <‘flex-direction’> || <‘flex-wrap’>
justify-content
用于在主轴上对齐伸缩项目。这一行为会在所有可伸缩长度及所有自动边距均被解释后进行。当一行上的所有伸缩项目都不能伸缩或可伸缩但是已经达到其最大长度时,这一属性才会对多余的空间进行分配。当项目溢出某一行时,这一属性也会在项目的对齐上施加一些控制。
1 .container { 2 justify-content: flex-start | flex-end | center | space-between | space-around; 3 }
flex-start
(默认值):伸缩项目向一行的起始位置靠齐。该行的第一个伸缩项目在主轴起点边的外边距与该行在主轴起点的边对齐,同时所有后续的伸缩项目与其前一个项目对齐。flex-end
:伸缩项目向一行的结束位置靠齐。该行的最后一个伸缩项目在主轴终点边的外边距与该行在主轴终点的边对齐,同时所有前面的伸缩项目与其后一个项目对齐。center
:伸缩项目向一行的中间位置靠齐。该行的伸缩项目将相互对齐并在行中居中对齐,同时第一个项目与该行在主轴起点的边的距离等同与最后一个项目与该行在主轴终点的边的距离(如果剩余空间是负数,则保持两端溢出的长度相等)。space-between
:伸缩项目会平均地分布在行里。如果剩余空间是负数,或该行只有一个伸缩项目,则此值等效于flex-start
。在其它情况下,第一个项目在主轴起点边的外边距会与该行在主轴起点的边对齐,同时最后一个项目在主轴终点边的外边距与该行在主轴终点的边对齐,而剩下的伸缩项目在确保两两之间的空白空间相等下平均分布。center
。在其它情况下,伸缩项目在确保两两之间的空白空间相等,同时第一个元素前的空间以及最后一个元素后的空间为其他空白空间的一半下平均分布。align-items
伸缩项目可以在伸缩容器的当前行的侧轴上进行对齐,这类似于justify-content
属性,但是是另一个方向。align-items
可以用来设置伸缩容器中包括匿名伸缩项目的所有项目的对齐方式。
1 .container { 2 align-items: flex-start | flex-end | center | baseline | stretch; 3 }
flex-start
:伸缩项目在侧轴起点边的外边距紧靠住该行在侧轴起始的边。flex-end
:伸缩项目在侧轴终点边的外边距靠住该行在侧轴终点的边 。center
:伸缩项目的外边距盒在该行的侧轴上居中放置。(如果伸缩行的尺寸小于伸缩项目,则伸缩项目会向两个方向溢出相同的量)。baseline
:如果伸缩项目的行内轴与侧轴为同一条,则该值和flex-start
等效。其它情况下,该值将参与基线对齐。所有参与该对齐方式的伸缩项目将按下列方式排列:首先将这些伸缩项目的基线进行对齐,随后其中基线至侧轴起点边的外边距距离最长的那个项目将紧靠住该行在侧轴起点的边。stretch
:如果侧轴长度属性的值为auto
,则此值会使项目的外边距盒的尺寸在遵照min/max-width/height
属性的限制下尽可能接近所在行的尺寸。align-content
当伸缩容器的侧轴还有多余空间时,align-content
属性可以用来调准伸缩行在伸缩容器里的对齐方式,这与调准伸缩项目在主轴上对齐方式的justify-content
属性类似。
请注意本属性在只有一行的伸缩容器上没有效果。
1 .container { 2 align-content: flex-start | flex-end | center | space-between | space-around | stretch; 3 }
flex-start
:各行向伸缩容器的起点位置堆叠。伸缩容器中第一行在侧轴起点的边会紧靠住伸缩容器在侧轴起点的边,之后的每一行都紧靠住前面一行。flex-end
:各行向伸缩容器的结束位置堆叠。伸缩容器中最后一行在侧轴终点的边会紧靠住该伸缩容器在侧轴终点的边,之前的每一行都紧靠住后面一行。center
:各行向伸缩容器的中间位置堆叠。各行两两紧靠住同时在伸缩容器中居中对齐,保持伸缩容器在侧轴起点边的内容边和第一行之间的距离与该容器在侧轴终点边的内容边与第最后一行之间的距离相等。(如果剩下的空间是负数,则行的堆叠会向两个方向溢出的相等距离。)space-between
:各行在伸缩容器中平均分布。如果剩余的空间是负数或伸缩容器中只有一行,该值等效于flex-start
。在其它情况下,第一行在侧轴起点的边会紧靠住伸缩容器在侧轴起点边的内容边,最后一行在侧轴终点的边会紧靠住伸缩容器在侧轴终点的内容边,剩余的行在保持两两之间的空间相等的状况下排列。space-around
:各行在伸缩容器中平均分布,在两边各有一半的空间。如果剩余的空间是负数或伸缩容器中只有一行,该值等效于center
。在其它情况下,各行会在保持两两之间的空间相等,同时第一行前面及最后一行后面的空间是其他空间的一半的状况下排列。stretch
:各行将会伸展以占用剩余的空间。如果剩余的空间是负数,该值等效于flex-start
。在其它情况下,剩余空间被所有行平分,扩大各行的侧轴尺寸。order
默认情况,Flex项目是按文档源的流顺序排列。然而,在Flex容器中可以通过order
属性来控制Flex项目的顺序源。
根据order
重新排序伸缩项目。有最小(负值最大)order
的伸缩项目排在第一个。若有多个项目有相同的order
值,这些项目照文件顺序排。这个步骤影响了伸缩项目生盒树成的盒子的顺序,也影响了后面的演算法如何处理各项目。
.item { order: <integer>; }
flex-grow
如果有必要的话,flex-grow
可以定义一个Flex项目的扩大比例。它接受一个没有单位的值作为一个比例。它可以使用Flex项目完全占用Flex容器可用的空间。
如果所有Flex项目的flex-grow
设置为1
时,表示Flex容器中的Flex项目具有相等的尺寸。如果你给其中一个Flex项目设置flex-grow
的值为2
,那么这个Flex项目的尺寸将是其他Flex项目两倍(其他Flex项目的flex-grow
值为1
)。
.item { flex-grow: <number>; /* default 0 */ }
注意:flex-grow
取负值将失效。
flex-shrink
如果有必要,flex-shrink
可以定义Flex项目的缩小比例。
1 .item { 2 flex-shrink: <number>; /* default 1 */ 3 }
注意:flex-shrink
取负值将失效。
flex-basis
flex-basis
属性定义了Flex项目在分配Flex容器剩余空间之前的一个默认尺寸。main-size
值使它具有匹配的宽度或高度,不过都需要取决于flex-direction
的值。
1 .item { 2 flex-basis: <length> | auto; /* default auto */ 3 }
如果设置为0
,内容不在考虑周围额外空间。如果设置为auto
,额外空间会基于flex-grow
值做分布
align-self
align-self
则用来在单独的伸缩项目上覆写默认的对齐方式。(对于匿名伸缩项目,align-self
的值永远与其关联的伸缩容器的align-items
的值相同。)
.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
若伸缩项目的任一个侧轴上的外边距为auto
,则align-self
没有效果。
如果align-self
的值为auto
,则其计算值为元素的父元素的align-items
值,如果该元素没有父元素,则计算值为stretch
。对齐属性值的定义如下:
flex-start
:伸缩项目在侧轴起点边的外边距紧靠住该行在侧轴起始的边。flex-end
:伸缩项目在侧轴终点边的外边距靠住该行在侧轴终点的边 。center
:伸缩项目的外边距盒在该行的侧轴上居中放置。(如果伸缩行的尺寸小于伸缩项目,则伸缩项目会向两个方向溢出相同的量)。baseline
:如果伸缩项目的行内轴与侧轴为同一条,则该值和flex-start
等效。其它情况下,该值将参与基线对齐。所有参与该对齐方式的伸缩项目将按下列方式排列:首先将这些伸缩项目的基线进行对齐,随后其中基线至侧轴起点边的外边距距离最长的那个项目将紧靠住该行在侧轴起点的边。stretch
:如果侧轴长度属性的值为auto
,则此值会使项目的外边距盒的尺寸在遵照min/max-width/height
属性的限制下尽可能接近所在行的尺寸。
参考自 http://www.w3cplus.com/blog/tags/157.html