CSS Flex 布局

版权声明:署名-非商业性使用-相同方式共享
Flex 模型
Flex 是 Flexible Box
的缩写,翻译成中文就是 “弹性盒子”,用来为盒模型提供最大的灵活性。任何一个容器都可以指定为 Flex 布局。
采用 Flex 布局的元素,称为 Flex 容器(Flex Container),简称 ”容器”。它的所有子元素自动成为容器成员,称为 Flex 项目(Flex Items)。
当元素表现为 flex 容器时,它们沿着两个轴来布局:
- 主轴(main axis)是沿着 flex 元素放置的方向延伸的轴(比如页面上的横向的行、纵向的列)。该轴的开始和结束被称为 main start 和 main end。
- 交叉轴(cross axis)总是垂直于 主轴。该轴的开始和结束被称为 cross start 和 cross end。
Flex Container 属性
通过将 display
属性设置为 flex
, 将变为 Flex 容器, Flex 容器的属性有:
flex-direction
flex-wrap
flex-flow
justify-content
(作用于主轴)align-content
(作用于交叉轴)align-items
(作用于交叉轴)place-content
(align-content
和justify-content
的简写)place-items
(align-items
和justify-items
的简写)
注意:
justify-self
,justify-items
不适用于flexbox
flex-direction
属性决定主轴的方向, 即Flex Items的排列方向
row
(默认)
主轴为水平方向,起点在左端。row-reverse
主轴为水平方向,起点在右端。column
主轴为垂直方向,起点在上沿。column-reverse
主轴为垂直方向,起点在下沿。
flex-wrap
默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap
属性定义,如果一条轴线排不下,如何换行。
nowrap
(默认)
不换行。wrap
换行,第一行在上方。wrap-reverse
换行,第一行在下方。
flex-flow
flex-flow
属性是 <flex-direction>
<flex-wrap>
两个属性的简写形式,默认值为 row nowrap
。
justify-content
该属性有5个值,具体对齐方式与轴的方向有关。下面假设主轴为从左到右。
flex-start(默认
左对齐flex-end
右对齐center
居中space-between
两端对齐,项目之间的间隔都相等。space-around
每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
align-content
属性定义了多根轴线(通俗理解多行)的对齐方式。如果项目只有一根轴线,该属性不起作用。
flex-start
与交叉轴的起点对齐。flex-end
与交叉轴的终点对齐。center
与交叉轴的中点对齐。space-between
与交叉轴两端对齐,轴线之间的间隔平均分布。space-around
每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。stretch
(默认)
轴线占满整个交叉轴。
align-items
该属性有5个值,具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上到下。
flex-start
交叉轴的起点对齐。flex-end
交叉轴的终点对齐。center
交叉轴的中点对齐。baseline
项目的第一行文字的基线对齐。stretch
(默认)
如果项目未设置高度或设为auto
,将占满整个容器的高度。
place-content
place-content
属性是align-content
和 justify-content
的简写。如果未提供第二个值,则第一个值作为第二个值的默认值。
place-items
place-items
属性是align-items
和 justify-items
的简写。如果未提供第二个值,则第一个值作为第二个值的默认值。
Flex Items 属性
order
flex-grow
flex-shrink
flex-basis
flex
align-self
(作用于交叉轴)
order
属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
flex-grow
属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。都为1则等比放大。
flex-shrink
属性定义项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。都为1则等比缩小,存在0不缩小。
flex-basis
属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为 auto
,即项目的本来大小。
flex
flex
属性是 flex-grow
, flex-shrink
和 flex-basis
的简写,默认值为 0 1 auto
。后两个属性可选的。
align-self
属性允许单个项目有与其他项目不一样的对齐方式, 作用于交叉轴,可覆盖 align-items
属性。默认值为 auto
,表示继承父元素的 align-items
属性,如果没有父元素,则等同于 stretch
。
该属性有6个值,除了auto
,其他都与 align-items
属性完全一致。
auto
flex-start
flex-end
center
baseline
stretch
相关信息
元素盒模型
@@ Tags: 元素盒模型
@@ Refer: 《CSS Volume 2》——CSS Box Sizing
默认情况下元素的盒模型属性为: box-sizing: content-box;
, 这表示元素的宽高(包括max、min)属性只包括了元素内容的尺寸,不包含边框与内边距的大小。如以宽度为例:
element.width(内容宽度)=元素实际宽度-(padding-right + padding-left + border-right + border-left)
我们可以通过修改元素的盒模型: box-sizing: border-box;
, 使其表现为我们期望的那样:
element.width(实际宽度)=(元素内容宽度 + padding-right + padding-left + border-right + border-left)
flex 与 auto margin
在普通的布局和在flex布局中,margin: auto的不同点,其最大的区别就是:在flex布局中,margin: auto会让元素在垂直方向也居中,而普通布局中只能让元素水平居中。
Comments ()