关于flex相关内容的整理
关于flex主要属性的简单介绍:
弹性容器(flex container)属性
display
使用flex布局必须设置。
可选值:flex
/inline-flex
flex
会使容器成为块级元素。inline-flex
会使容器成为内联元素。(来自这里)
注:旧语法中值为box
,且需要加上对应前缀,移动端若无效果可能为语法支持原因。(来自这里)
flex-direction
设置主轴方向,主轴方向指定了元素的排列方向。默认为row
,从左到右。
可选值:row
/column
/row-reverse
/column-reverse
row
即为默认值,从左到右。row-reverse
相对其反转,即从右到左。
column
是从上到下。column-reverse
是从下到上。
flex-wrap
设置是否换行。默认为no-wrap
,即不换行,当内部元素总长度超过主轴且未设置其他属性时,会对内部元素进行压缩,在同一行/列中显示。
可选值:no-wrap
/wrap
/wrap-reverse
wrap
可使元素向交叉轴方向换行,设置此值时换行方向为:从上到下/从左到右
wrap-reverse
换行方向与wrap
值时相反,即:从下到上/从右到左
flex-flow
此为flex-direction
和flex-wrap
的简写属性。
可选值:<flex-direction> || <flex-wrap>
比如:flex-flow: row wrap
。也可只设置一个:flex-flow: row
justify-content
设置主轴上元素的对齐方式。默认为flex-start
,即从主轴开始方向密集对齐。
可选值:flex-start
/flex-end
/center
/space-between
/space-around
各种对齐方式详细可见这里中的动图
align-items
设置单个主轴上,在交叉轴方向元素的对齐方式,对所有元素生效,即独立行上所有元素的对齐方式。默认为stretch
。
可选值:flex-start
/flex-end
/center
/stretch
/baseline
stretch
即向交叉轴方向拉伸至充满,但仅为每一行增加长度相同,最终长度不一定相同。且设置了width
/height
的元素不会被拉伸。
注:受max-height
限制。
各种对齐方式详见可见这里中的动图
align-content
多个主轴时元素在交叉轴方向的对齐方式,即多行时行的对齐方式,只有一行时不起作用。默认为stretch
。
可选值:flex-start
/flex-end
/center
/space-between
/space-around
stretch
为允许行内部元素拉伸,即使align-items: stretch
生效。取其他值时align-items: stretch
不生效。
space-between
为间隔仅在元素之间。
space-around
为每个元素两边有相同间隔。
弹性元素(flex items)属性
order
设置元素排序顺序,数值越小越靠前,默认为0
。可设置为负数。
flex-grow
设置元素在主轴方向拉伸比例。默认为0
,即若有剩余空间也不拉伸。不可设为负值。
当数值不为0且有剩余空间时,无论元素是否设置了width
/height
,都会被拉伸。若数值相同,则拉伸比例相同;若数值不同,拉伸比例为数值比例。
无论是否设置了width
/height
,拉伸的表现都是:增加长度的比例与数值比例相同。当没有设置宽度时,元素本身宽度与内容最长宽度相等。
详细可看这里
flex-shrink
设置元素在主轴方向缩小比例。默认为1
。不可设为负值。
当数值为0时,即使空间不足,也不进行压缩,元素超出父元素边界,亦即父元素不会被撑大。此时可用flex-wrap: wrap
进行换行。
注:需要设置元素本身的width
/height
。否则若因元素内部内容使元素超出父元素边界,flex-shrink
不起作用。
缩小的数值计算较复杂,但大致是以数值的比例对原宽度进行削减。详细可看这里
效果详细可看这里的动图
flex-basis
设置元素在主轴方向上的长度。默认值为auto
,即元素原本大小。
flex-basis
与主轴方向有关。如当flex-direction
为row
时,设置的是宽度。当flex-direction
为column
时,设置的是高度。
注:会覆盖width
/height
。可被flex-grow
拉伸。
详细可看这里的动图
flex
为flex-grow
、flex-shrink
和flex-basis
的简写。默认值为0 1 auto
后两个属性可选。
align-self
设置元素本身在交叉轴上的对齐方式,可以覆盖align-items
属性。默认为auto
,即继承父元素align-items
的属性。
可选值:flex-start
/flex-end
/center
/stretch
/baseline
各种对齐方式详见可见这里中的动图
与其他CSS属性结合后拓展
margin: auto
1 | #flexbox{ |
此属性用于子元素,效果为水平垂直居中。相当于#flexbox
设置了justify-content: space-around
和align-items: center