Flex弹性布局
原文链接: Flex弹性布局
Flexbox布局是如何工作的 – 用大彩图和GIF动画解释
更多关于Flexbox布局如何工作的 – 用大彩图和GIF动画解释
flex 布局很容易与其他布局方式(包括 flex 布局)嵌套在一起,实际上它是一个独立的盒子,这个盒子由一个元素(称为容器)及其直接的子元素(称为项目)构成。这个容器外部以及这些项目内部都不会受 flex 布局的影响。
一个元素可以定义成两种 flex 布局,第一种是块级 flex 布局:
.flex-block-box {
display: flex;
}
另一种是行内 flex 布局:
.flex-inline-box {
display: inline-flex;
}
这两种 flex 布局的区别是,块级 flex 布局的容器是一个块级盒子(block),而行内 flex 布局的容器是一个行内盒子(inline-block)。
容器的属性主要用于排列和对齐项目,项目的属性主要用于实现弹性和覆盖容器所定义的对齐方式:
容器属性:
排列:
方向:flex-direction: row | column | row-reverse | column-reverse
换行:flex-wrap: nowrap | wrap | wrap-reverse
合写:flex-flow: row nowrap
对齐:
justify-content: flex-start | center | flex-end | space-between | space-around
align-items: flex-start | center | flex-end | baseline | stretch
align-content: flex-start | center | flex-end | space-between | space-around
项目属性:
order: 0 | 1 | ...
控制弹性:
flex-grow: 0 | 1 | ...
flex-shrink: 0 | 1 | ...
flex-basis: auto | 100px | 50% | ...
flex: 0 1 auto
auto: 1 1 auto
none: 0 0 auto
initial: 0 1 auto
align-self: auto | flex-start | center | flex-end | baseline | stretch
启动 flex-box:
父元素设置 display: flex; 或 display:inline-flex;
flex container: 父元素显示设置 display: flex
flex item:flex container 中的子元素
flex 容器属性:
flex-direction:控制 flex 元素沿着 main-axis 的排列方向
row:默认值,flex 元素沿着 main-axis 从左到右排列
column:flex 元素将沿着 cross-axis 从上到下垂直排列
row-reverse:flex 元素沿着 main-axis 从右到左排列
column-reverse:flex 元素将沿着 cross-axis 从下到上垂直排列
flex-wrap: 指定 flex 元素单行显示还是多行显示 决定容器内项目是否可换行
nowrap:默认值,flex 元素在 flex 容器内不换行排列
wrap:flex 元素 被打断到多个行中。cross-start 会根据 flex-direction 的值 相当于 start 或 before。cross-end 为 cross-start 的相对值
wrap-reverse:和 wrap 的表现一样但是 cross-start 和 cross-end 交替排列
flex-flow:是 flex-direction 和 flex-wrap 的简写
justify-content:定义了浏览器如何分配顺着父容器 main-axis 的 flex 元素之间及其周围的空间
flex-start:默认值,flex 元素靠 main-axis 开始边缘(左对齐)
flex-end:所有 flex 元素靠 main-axis 结束边缘(右对齐)
center:所有 flex 元素排在 main-axis中间(居中对齐)
space-between:除了第一个和最一个 flex 元素的两者间间距相同(两端对齐)
space-around:让每个 flex 元素具有相同的空间
align-items:以与 justify-content 相同的方式在侧轴方向上将当前行上的 flex 元素对齐
stretch:默认值,让所有的 flex 元素高度和 flex 容器高度一样
flex-start:让所有 flex 元素靠 cross-axis 开始边缘(顶部对齐)
flex-end:让所有 flex 元素靠 cross-axis 结束边缘(底部对齐)
center:让 flex 元素在 cross-axis 中间(居中对齐)
baseline:让所有 flex 元素在 cross-axis 上沿着他们自己的基线对齐
align-content:定义弹性容器的侧轴方向上有额外空间时,如何排布每一行,当弹性容器只有一行时无作用
stretch:默认值,拉伸 flex 元素,让他们沿着 cross-axis 适应 flex 容器可用的空间
flex-start:让多行 flex 元素靠 cross-axis开始边缘,沿着 cross-axis 从上到下排列,flex 元素在 flex 容器中顶部对齐
flex-end:让多行 flex 元素靠着 cross-axis 结束位置,让 flex 元素沿着Cross-Axis从下到上排列,即底部对齐
center:让多行 flex 元素在cross-axis中间,在 flex 容器中居中对齐
flex 元素属性:
order:允许 flex 元素在一个 flex 容器中重新排序 类似 z-index
flex-grow:控制 flex 元素在容器有多余的空间如何放大(扩展)
flex-shrink:控制 flex 元素在容器没有额外空间又如何缩小
flex-basis:指定了 flex 元素在主轴方向上的初始大小
auto:默认值,flex 元素宽度的计算是基于内容的多少来自动计算
取任何用于 width 属性的任何值,比如 % || em || rem || px等
flex:flex-grow flex-shrink flex-basis 的速记
flex: 0 1 auto; 默认行为
flex: 0 0 auto; 相当于 flex: none; 它基本上是一个固定宽度的元素,其初始宽度是基于 flex 元素中内容大小
flex: 1 1 auto; 相当于 flex: auto; 自动计算初始化宽度,但是如果有必要,会伸展或者收缩以适应整个可用宽度
flex: "positive number" 将 flex 元素的初始宽度设置为零,伸展元素以填满可用空间 并且最后只要有可能就收缩元素
align-self:整体对齐 flex 容器内的所有弹性项目,改变一个 flex 元素沿着侧轴的位置,而不影响相邻的 flex 元素
auto:默认值,设置为父元素的 align-item 值,如果该元素没有父元素的话,就设置为 stretch
flex-start:元素会对齐到 cross-axis 的首端
flex-end:元素会对齐到 cross-axis 的尾端
center:flex 元素会对齐到 cross-axis 的中间,如果该元素的 cross-size 的尺寸大于 flex 容器,将在两个方向均等溢出
baseline:所有的 flex 元素会沿着基线对齐
stretch:将目标元素拉伸,以沿着 cross-axis 填满 flex 容器的可用空间,flex 元素高度和 flex 容器高度一样