Flex布局
1、理解
1.1 为何使用
有些布局的垂直居中实现不易,所有使用flex布局来实现
1.2 指定为Flex布局:
-
任何容器 ------ display:flex;
-
行内元素 ------ display:inline-flex;
-
Webkit 内核的浏览器,必须加上
-webkit
前缀。.box{ display: -webkit-flex; /* Safari */ display: flex; }
1.3 使用flex后失效元素
设为 Flex 布局以后,子元素的float
、clear
和vertical-align
属性将失效。
2、目前常用四种场景:
-
定义好宽高的子元素,左排列
-
子元素,左排列,且均分父元素空间
-
多个子元素,分布在父元素的两边
-
多个元素居于正中间
3、属性解释
属性 | 解释 |
---|---|
gap | gap属性属于grid布局中,用来设置网格行与列之间的间隙。(该属性是 row-gap 和 column-gap 的简写形式) |
3.1 flex-direction属性----决定主轴排序方向
值 | 说明 |
---|---|
flex-direction: row | 主轴为水平方向,起点在最左端,正序。 |
flex-direction: row-reverse | 主轴为水平方向,起点在最右端,倒序 |
flex-direction: column | 主轴为水平方向,正序,元素独占一行(且没有换行属性时不会进行换行,会溢出) |
flex-direction: column-reverse | 主轴为垂直方向,倒序,元素独占一行(且没有换行属性时不会进行换行,会溢出) |
3.2 flex-wrap属性----换行
值 | 说明 |
---|---|
flex-wrap: nowrap | 默认不换行(不换行会造成溢出屏幕的情况) |
flex-wrap: wrap | 换行,第一行在上 |
flex-wrap: wrap-reverse | 换行,第一行在下 |
3.3 flex-flow属性----flex-direction和flex-wrap的结合体
.box {
flex-flow: <flex-direction> <flex-wrap>;
}
代码举例 | |
---|---|
.div{ flex-flow: row-reverse wrap-reverse; } | 效果:倒序、第一行在下 |
3.4 justify-content属性----主轴上的对齐方式
值 | 说明 |
---|---|
justify-content: flex-start | 左对齐 |
justify-content: flex-end | 右对齐 |
justify-content: center | 居中 |
justify-content: space-between | 两端对齐,项目间间隔相等 |
justify-content: space-around | 每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。 |
3.5 align-items属性----交叉轴上如何对齐
值 | 说明 |
---|---|
flex-start | 交叉轴的起点对齐。 |
flex-end | 交叉轴的终点对齐。 |
center | 交叉轴的中点对齐。 |
baseline | 项目的第一行文字的基线对齐 |
stretch(默认值) | 如果项目未设置高度或设为auto,将占满整个容器的高度。 |
3.6 align-content属性----定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
值 | 说明(截图中的例子的主轴为行row) |
---|---|
flex-start | 交叉轴的起点对齐 |
flex-end | 与交叉轴终点对齐 |
center | 与交叉轴中点对齐 |
space-between | 与交叉线两端对齐,轴线之间的间隔平均分布 |
space-around | 每根轴线两侧的间隔都相等,轴线之间的间隔比轴线与边框的间隔大一倍。 |
stretch(默认值) | 轴线占满整个交叉轴。 |
表格中截图的源码:
<style>
.grid-container{
border: 5px solid rgb(48, 159, 211);
height: 150px;
width: 150px;
display: flex;
flex-flow: row wrap;
align-content: ......;
}
.item{
padding: 10px 10px 10px 10px;
border: 1px solid rgb(235, 115, 115);
}
</style>
<div class="grid-container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
3.7 align-items和align-content相同和不同
3.7.1 align-items和align-content相同点:
- 都是设置交叉轴上垂直对齐的属性
3.7.2 align-items和align-content区别:
-
align-items仅仅对主轴为一行的容器项目有效,align-content仅仅对交叉轴上有剩余空间且有多行项目时有效
-
align-items属性把每一个项目作为一个整体,align-content属性是把整体项目作为一个整体
注:交叉轴的含义 — 弹性容器的交叉轴和主轴垂直
a、当主轴flex-direction值为行(row 或者row-reverse)交叉轴就是从上至下的垂直走向
b、当主轴flex-direction值为列(column 或者column-reverse)交叉轴就是水平走向
4、项目中常使用属性
4.1 order属性----定义元素排序
order属性:定义项目的排序顺序。数值越小,排列越向前,默认值为0
属性 | 说明 |
---|---|
在css中使用order属性 | eg: .item { order: 数值; } |
4.2 flex-grow属性----定义项目的放大比例
flex-grow属性:定义项目的放大比例,默认为0,值为0时,有剩余空间也不放大
属性 | 说明 |
---|---|
在css中使用 flex-grow属性 | eg:.item { flex-grow: 数值; /* default 0 */ } |
注:
a、数值大的情况下,数值越大占据的剩余空间越多向
b、当flex-grow属性均为1时,若有剩余空间则将均匀的分配剩余空间
c、当flex-grow属性为2,其他项目都为1,则为2的分配的空间将比其他的多一倍
4.3 flex-shrink属性----项目缩小比例
flex-shrink属性:定义项目的缩小比例,默认为1,当空间不足时项目将缩小
属性 | 说明 |
---|---|
在css中使用 flex-shrink属性 | 为在代码中实现 |
注:
如果所有项目的flex-shrink
属性都为1,当空间不足时,都将等比例缩小。
当一个项目的flex-shrink
属性为0,其他项目都为1,则空间不足时,前者不缩小。
4.4 flex-basis属性----定义定义了在分配多余空间之前,项目占据的主轴空间
4.5 flex属性----flex-grow、flex-shrink、flex-basis的简写
4.6 align-self属性----允许单个项目与其他项目不同的对齐方式
align-self属性:允许单个项目和其他项目有不一样的对齐方式,可以覆盖align-items属性
默认值为auto时,表示继承父元素align-items属性,当没有父元素时为stretch
属性 | 说明 |
---|---|
在css中使用 flex-shrink属性 | eg: .item4{ align-self: flex-end; } |
借鉴链接:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html