CSS Flex 布局
布局的传统解决方案,基于盒状模型,依赖 display 属性 + position 属性 + float 属性
。
什么是 flex 布局
Flex
(Flexible Box
),即为"弹性布局"。设为 Flex
布局以后,子元素的 float
、clear
和 vertical-align
属性将失效。
css
.box {
display: -webkit-flex; /* Safari */
display: flex;
display: inline-flex; /* inline元素 */
}
容器的属性
以下属性设置在 flex
布局中的父元素(即设有 display:flex
的元素),用来控制内部子元素的行为。
css
.box {
flex-direction: row(默) | row-reverse | column | column-reverse;
flex-wrap: nowrap(默) | wrap | wrap-reverse;
flex-flow: <flex-direction> <flex-wrap>;
justify-content: flex-start(默) | flex-end | center | space-between | space-around;
align-items: flex-start | flex-end | center | baseline | stretch(默);
align-content: flex-start | flex-end | center | space-between | space-around | stretch(默);
}
flex-direction
: 子元素的排列方向。row
: 水平方向,起点在左端。row-reverse
: 水平方向,起点在右端。column
: 垂直方向,起点在上沿。column-reverse
: 垂直方向,起点在下沿。
flex-wrap
: 如果子元素一条线排不下,如何换行。nowrap
: 不换行。wrap
: 换行,第一行在上方。wrap-reverse
: 换行,第一行在下方。
flex-flow
:flex-direction
和flex-wrap
的简写形式。justify-content
: 子元素在一条横线上的对齐方式。flex-start
: 左对齐。flex-end
: 右对齐。center
: 居中。space-between
: 两端对齐,项目之间的间隔都相等。space-around
: 每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
align-items
: 每个子元素在垂直方向上的对齐方式。flex-start
: 对齐顶部。flex-end
: 对齐底部。center
: 垂直居中。baseline
: 子元素的第一行文字的基线对齐。stretch
: 如果子元素未设置高度或设为auto
,将占满整个容器的高度。
align-content
: 定义数量超过一行的子元素的垂直对齐方式。flex-start
: 对齐顶部。flex-end
: 对齐底部。center
: 垂直居中。space-between
: 垂直两端对齐,轴线之间的间隔平均分布。space-around
: 垂直两端对齐,每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。stretch
: 如果子元素未设置高度或设为auto
,将占满整个容器的高度。
容器内子元素的属性
css
.item {
order: <integer>; /* 定义子元素的排列顺序。数值越小,排列越靠前,默认为0。 */
flex-grow: <number>; /* 定义子元素的放大比例,默认为0,即如果存在剩余空间,也不放大。 */
flex-shrink: <number>; /* 定义了子元素的缩小比例,默认为1,即如果空间不足,该项目将缩小。 */
flex-basis: <length> | auto; /* 定义了子元素所占固定空间(如100px),默认auto */
flex: <flex-grow> <flex-shrink(可选)> <flex-basis(可选)>]; /* 快捷值:initial (0 1 auto)(默认), auto (1 1 auto), none (0 0 auto), 1 (1 1 0%), 0 (0 1 0%)*/
align-self: auto(默) | flex-start | flex-end | center | baseline | stretch; /* 该属性用来覆盖父元素统一的align-items属性,达到该子元素的个性化 */
}