Flex 弹性盒子布局是很强大的布局,它能够很方便的控制元素在垂直和水平方向上的行为。浏览器
要使用 Flex,首选须要一个 Flex 容器(flex container)。使用display: flex;
建立,flex
是一个 CSS 的display
属性中新添加一个值,而容器下的每一个子元素将成为 flex item(伸缩项目)。伸缩项目将参与到 flex 布局中,全部由 CSS Flexible Box Layout Module(CSS伸缩盒布局模型)定义的属性都能被它们使用。布局
设为 Flex 布局之后,子元素的float
、clear
和vertical-align
属性将失效。flex
容器存在两个轴,水平叫主轴(Main-Axis),垂直叫交叉轴(Cross-Axis)。主轴左边是开始位置(main start)右边是结束位置(main end),交叉轴上是开始位置(cross start)下是结束位置(cross end)。咱们用 justify 属性控制主轴项目的空隙,使用 align 属性控制交叉轴项目之间的垂直行为。spa
容器一共有 6 个属性:3d
flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content
flex-direction
属性决定主轴的方向。一共有 4 个值row | row-reverse | column | column-reverse
,初始值是row
。交叉轴是垂直于主轴的,若是它值为column
那么交叉轴就是水平方向。code
row
是默认row-reverse
将起点变为右边column
主轴为垂直方向,起点在上面column-reverse
主轴为垂直方向,起点在下面指定 flex 元素单行显示仍是多行显示 。若是容许换行,这个属性容许你控制行的堆叠方向。它一共有 3 个值nowrap | wrap | wrap-reverse
,起始值是nowrap
。cdn
nowrap
flex 的元素被摆放到到一行,这可能致使溢出 flex 容器wrap
flex 元素 被打断到多个行中
wrap-reverse
和wrap
的行为同样,可是cross-start
和cross-end
互换。flex-direction
和flex-wrap
的简写。默认是flex-flow: row nowrap;
blog
定义了浏览器如何分配顺着父容器主轴的弹性元素之间及其周围的空间。它有不少属性,可是其中有不少是不经常使用。it
经常使用的 7 个属性:io
space-between
在每行上均匀分配弹性元素。相邻元素间距离相同。每行第一个元素与行首对齐,每行最后一个元素与行尾对齐space-around
和space-between
相似,可是每行第一个元素到行首的距离和每行最后一个元素到行尾的距离将会是相邻元素之间距离的一半space-evenly
和space-around
相似,可是相邻flex项之间的间距,主轴起始位置到第一个flex项的间距,主轴结束位置到最后一个flex
项的间距,都彻底同样stretch
flex 子项的宽度和大于容器,则各个子项根据本身的大小缩放来撑满容器,若是子项和的最小宽度大于容器,则会撑开容器,若是和小于容器则至关于flex-start
flex-start
从行首开始排列。每行第一个弹性元素与行首对齐,同时全部后续的弹性元素与前一个对齐flex-end
从行尾开始排列。每行最后一个弹性元素与行尾对齐,其余元素将与后一个对齐center
伸缩元素向每行中点排列。每行第一个元素到行首的距离将与每行最后一个元素到行尾的距离相同若是它和flex-direction: column;
结合,则会这样:
定义项目在交叉轴上如何对齐。
它一共有 5 个经常使用属性。
flex-start
flex-end
center
stretch
baseline
定义了多根轴线(多行)的对齐方式。该属性对单行弹性盒子模型无效。(即:带有flex-wrap: nowrap)。
一共有 6 个经常使用属性:
flex-start
与交叉轴的起点对齐
flex-end
与交叉轴的终点对齐
center
与交叉轴的中点对齐
space-between
与交叉轴两端对齐,轴线之间的间隔平均分布
space-around
每根轴线两侧的间隔都相等。因此,轴线之间的间隔比轴线与边框的间隔大一倍
stretch
拉伸全部行来填满剩余空间。剩余空间平均的分配给每一行(默认值)
flex 项一共有 6 个属性:
flex-basis
flex-grow
flex-shrink
flex
order
align-self
flex-basis
和min-width
类似,指定了 flex 元素在主轴方向上的初始大小。(若是不使用 box-sizing 来改变盒模型的话,那么这个属性就决定了 flex 元素的内容盒(content-box)的宽或者高的大小。)根据内部内容扩展项目的大小。若是不是,将使用默认基准值。
定义弹性盒子项(flex item)的拉伸因子,将相对于同一行上全部其余项目的大小总和进行缩放,这些项目将根据指定的值自动调整。它的值是number
,负数无效。
指定了 flex 元素的收缩规则。flex 元素仅在默认宽度之和大于容器的时候才会发生收缩,其收缩的大小是依据 flex-shrink 的值。
它是flex-grow
, flex-shrink
和flex-basis
的简写,默认值为0 1 auto
。后两个属性可选。
用来从新排列项目的天然顺序。元素按照order
属性的值的增序进行布局。拥有相同order
属性值的元素按照它们在源代码中出现的顺序进行布局。
会对齐当前 flex 行中的 flex 元素,并覆盖align-items
的值. 若是任何 flex 元素的侧轴方向margin
值设置为auto
,则会忽略align-self
。