Demo
为方便理解flex各属性,写了一个flex的属性调试页面。地址
通过一个小游戏来测试你对flex的掌握。青蛙
总览
采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。
项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
容器属性
display:flex
一个容器设置了display:flex;属性就定义了一个flex容器,它的直接子元素会接受这个flex环境
.container {
display: flex; /* or inline-flex */
}
flex-direction
.container {
flex-direction: row | row-reverse | column | column-reverse;
}
- row 默认值,水平从左到右
- row-reverse 水平从右到左
- column 垂直从上到下
- column-reverse 垂直从下到上
flex-wrap
.container{
flex-wrap: nowrap | wrap | wrap-reverse;
}
- nowrap 默认值,不换行
- wrap 换行
- wrap-reverse 换行,并且颠倒行顺序
justify-content
.container {
justify-content: flex-start | flex-end | center | space-between | space-around;
}
-
flex-start 默认值、弹性盒子元素将向行起始位置对齐
-
flex-end 弹性盒子元素将向行结束位置对齐
-
center弹性盒子元素将向行中间位置对齐。该行的子元素将相互对齐并在行中居中对齐
-
space-between 弹性盒子元素会平均地分布在行里
-
space-around 弹性盒子元素会平均地分布在行里,两端保留子元素与子元素之间间距大小的一半
align-items
.container {
align-items: flex-start | flex-end | center | baseline | stretch;
}
-
flex-start 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。
-
flex-end 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。
-
center 弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。
-
baseline 如弹性盒子元素的行内轴与侧轴为同一条,则该值与flex-start等效。其它情况下,该值将参与基线对齐。
-
stretch 如果指定侧轴大小的属性值为'auto',则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照'min/max-width/height'属性的限制
align-content
.container {
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
-
flex-start 各行向弹性盒容器的起始位置堆叠。弹性盒容器中第一行的侧轴起始边界紧靠住该弹性盒容器的侧轴起始边界,之后的每一行都紧靠住前面一行。
-
flex-end 各行向弹性盒容器的结束位置堆叠。弹性盒容器中最后一行的侧轴起结束界紧靠住该弹性盒容器的侧轴结束边界,之后的每一行都紧靠住前面一行。
-
center 各行向弹性盒容器的中间位置堆叠。各行两两紧靠住同时在弹性盒容器中居中对齐,保持弹性盒容器的侧轴起始内容边界和第一行之间的距离与该容器的侧轴结束内容边界与第最后一行之间的距离相等。
-
space-between 各行在弹性盒容器中平均分布。第一行的侧轴起始边界紧靠住弹性盒容器的侧轴起始内容边界,最后一行的侧轴结束边界紧靠住弹性盒容器的侧轴结束内容边界,剩余的行则按一定方式在弹性盒窗口中排列,以保持两两之间的空间相等。
-
space-around 各行在弹性盒容器中平均分布,两端保留子元素与子元素之间间距大小的一半。各行会按一定方式在弹性盒容器中排列,以保持两两之间的空间相等,同时第一行前面及最后一行后面的空间是其他空间的一半。
-
stretch 各行将会伸展以占用剩余的空间。剩余空间被所有行平分,以扩大它们的侧轴尺寸
项目属性
order
.item {
order: <integer>;
}
flex-grow
用于瓜分父容器的剩余空间
.item {
flex-grow: <number>; /* default 0 */
}
flex-shrink
设置或检索弹性盒的收缩比率,根据弹性盒子元素所设置的收缩因子作为比率来收缩空间
.item {
flex-shrink: <number>; /* default 1 */
}
flex-basis
设置或检索弹性盒伸缩基准值,如果所有子元素的基准值之和大于剩余空间,则会根据每项设置的基准值,按比率伸缩剩余空间
.item {
flex-basis: <length> | auto; /* default auto */
}
flex
flex-grow, flex-shrink,flex-basis 的缩写
.item {
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
align-self
.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
深入理解 flex-grow/flex-shrink
flex-grow
flex-shrink
用来“吸收”超出的空间