Flexbox
要理解 Flexbox,关键是理解主轴和横轴的概念。
主轴由 flex-direction 属性设置。如果该属性为 row,则主轴沿行方向分布,如果该属性为 column,则主轴沿列方向分布。
相对于主轴,横轴沿另一个方向分布,因此,如果 flex-direction 为 row,则横轴沿列方向分布,如果 flex-direction 为 column,则横轴沿行方向分布。
container ~ items
- container:容器
- items:子项
要使用 Flexbox,需要将 display 属性的值更改为 flex。
.container {
display: flex;
}
这个初始值意味着
- 子项显示为一行
- 子项不换行
- 子项不会增长到填满容器
- 子项在容器开始处对齐
flex-direction(container)
决定主轴的方向。
.container {
flex-direction: row | row-reverse | column | column-reverse;
}
flex-wrap(container)
定义当主轴排不下时,是否换行。
- nowrap:默认值,不换行
- wrap:换行
- wrap-reverse:反向换行
flex-flow(container)
flex-direction 和 flex-wrap 的简写属性。
.container {
/* 默认值 */
flex-flow: row nowrap;
}
justify-content(container)
定义了所有子项在主轴上的对齐方式。
.container {
flex-direction: flex-start | flex-end | center | space-between | space-around;
}
align-items(container)
定义了所有子项在横轴上的对齐方式。
.container {
align-items: flex-start | flex-end | center | baseline | stretch;
}
align-content(container)
定义了多根轴的对齐方式。
.container {
align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch;
}
gap, row-gap, column-gap(container)
定义了所有子项之间的间距。
order(items)
定义子项的排列顺序,数值越小,排列越靠前,默认值0。
flex-grow(items)
定义子项的放大比例,默认值0(不放大)。
flex-shrink(items)
定义子项的缩小比例,默认值1(空间不足,会缩小)。
flex-basis(items)
定义了子项在分配多余空间之前,子项占据的主轴空间。
flex(items)
flex-grow、flex-shrink 和 flex-basis 的简写属性。
.items {
/* 默认值 */
flex: 0 1 auto;
}
align-self(items)
允许单个子项有与其他子项不一样的对齐方式,默认值 auto,表示继承父元素的 align-items 属性。