flex的六个属性
- 1. flex的6个常用属性
1. flex的6个常用属性
为了更好的学习与了解各属性的可视化效果,先制做了以下示例代码
1.1. 示例代码
1.1.1. html示例
1base.html
2<!DOCTYPE html>
3<html lang="en">
4<head>
5 <meta charset="UTF-8">
6 <meta http-equiv="X-UA-Compatible" content="IE=edge">
7 <meta name="viewport" content="width=device-width, initial-scale=1.0">
8 <title></title>
9 <link rel="stylesheet" href="style.css">
10</head>
11<body>
12 <div class="container">
13 <div class="item">item1</div>
14 <div class="item">item2</div>
15 <div class="item">item3</div>
16 </div>
17</body>
18</html>
1.1.2. css示例代码
1style.css代码
2* {
3 padding: 0;
4 margin: 0;
5 box-sizing: border-box;
6}
7.container {
8 /* 将元素转为flex属性 */
9 display: flex;
10 height: 20em;
11 border: 1px solid lightseagreen;
12 justify-content: end;
13}
14.container > .item {
15 width: 10em;
16 padding: 2em;
17 background-color: Azure;
18 border: 1px dashed lightblue;
19}
1.1.3. flex样例效果

1.2. 基本概念
1.2.1. 说明
- 采用 flex 布局的元素,称为 flex容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 flex 项目(flex item),简称"项目"。
- 容器默认存在两根轴:水平的主轴和垂直的交叉轴。
- 主轴又分主轴的开始位置和结束位置
- 交叉轴同样也分开始位置和结束位置
- 项目默认沿着主轴排列

| 需要理解的名词 | 解释 |
|---|---|
| main-axis | 主轴(默认是水平的) |
| cross-axis | 侧轴(默认是垂直的) |
| main-start | 主轴开始的位置 |
| main-end | 主轴结束的位置 |
| cross-start | 侧轴开始的位置 |
| cross-end | 侧轴结束的位置 |
1.3. 全属性一览
1.3.1. 作用于容器
作用于容器的属性一共6个
| 属性 | 值 | 作用 |
|---|---|---|
| flex-direction | row(默认值): 从左到右 | 决定主轴的方向,即子项目flex item的排列方向 |
| row-reverse: 从右到左 | ||
| column: 从上到下 | ||
| column-reverse:从下到上 | ||
| flex-wrap | nowrap (默认值):不换行 | 默认情况下,项目都排在一条线(又称"轴线")上。 |
| wrap: 换行 | flex-wrap属性定义,如果一条轴线排不下,如何换行 | |
| wrap-reverse: 换行,第一行在下方,颠倒下顺序 | ||
| flex-flow | flex-direction、flex-wrap的简写方式 | |
| justify-content | flex-start(默认值):左对齐 | 定义了子项目flex item在主轴上的对齐方式。 |
| flex-end:右对齐 | ||
| center: 居中 | ||
| space-between(空格在中间):两端对齐,项目之间的间隔都相等。 | ||
| space-around(空格环绕):每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。 | ||
| align-items | flex-start:交叉轴的起点对齐 | 定义子项目flex item在交叉轴上的对齐方式。 |
| flex-end:交叉轴的终点对齐 | ||
| center:交叉轴的中点对齐 | ||
| baseline: 项目的第一行文字的基线对齐 | ||
| stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。 | ||
| align-content | flex-start:与交叉轴的起点对齐。 | 属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。多根轴线出现的场景是,flex item 很多,折成多行。即多轴 |
| flex-end:与交叉轴的终点对齐。 | ||
| center:与交叉轴的中点对齐。 | ||
| space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。 | ||
| space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。 | ||
| stretch(默认值):轴线占满整个交叉轴。 |
1.4. flex-direction属性
flex-direction属性决定主轴的⽅向。
flex-direction 属性指定了主轴线的方向,子元素默认是按照主轴线排列的,所以 flex-direction 也指定了弹性子元素在弹性容器中的排列方式, 有以下四个值:
- row :(默认)横向从左到右排列。
- row-reverse :顾名思义,从右向左横向排列,反向。
- column : 纵向从上往下排列。
- column-reverse : 纵向从下往上排列。
| 值 | 描述 |
|---|---|
| row | (默认)横向从左到右排列。 |
| row-reverse | 顾名思义,从右向左横向排列,反向。 |
| column | 纵向从上往下排列。 |
| column-reverse | 纵向从下往上排列。 |
1.4.1. row(默认)横向从左到右排列。
1flex-direction:row(默认值) | row-reverse | column | column-reverse;
2//该属性指定了Flex的项目怎样在flex容器中排列,设置flex容器的主轴方向,它们(项目)两个主要的方向排列,就像一行一样水平排列或者像一列一样垂直排列。
3
4.flex-container {
5 -webkit-flex-direction: row; /* Safari */
6 flex-direction: row;
7 }

1.4.2. row-reverse 顾名思义,从右向左横向排列,反向。
1 .flex-container {
2 flex-direction: row-reverse;
3 }

1.4.3. column 纵向从上往下排列。
1 .flex-container {
2 flex-direction: coulmn;
3 }

1.4.4. column-reverse 纵向从下往上排列。
行排列
flex-direction: row,与上面效果相同。列排列
flex-direction: column,效果如下
1 .flex-container {
2 flex-direction: coulmn-reverse;
3 }

1.5. flew-wrap属性
flex-wrap属性设置⼦项⽬的换⾏⽅式。
弹性盒子默认情况下所有子元素都是排在一行上的,但容器大小有限,很有可能出现子元素被截断的情况,这时候就需要换行,flex-wrap 就是用来操作子元素换行的属性。flex-wrap 有以下三个值:
- nowrap :(默认) 不换行。
- wrap :换行,第一行排满后自动换到第二行。
- wrap-reverse :换行,与 wrap 不同的是如果出现换行,换行后的元素在第一行上方。
| 值 | 描述 |
|---|---|
| nowrap | :(默认) 不换行。 |
| wrap | :换行,第一行排满后自动换到第二行。 |
| wrap-reverse | :换行,与 wrap 不同的是如果出现换行,换行后的元素在第一行上方。 |

压缩宽度,产生换行,效果如下:

1.6. flex-flow属性
flex-flow 是 flex-direction 和 flex-wrap 的简写形式,默认值为 row nowrap。
flex-flow: row nowrap;flex-direction、flex-wrap的简写方式,实现与前述同样的功能。
1.7. justify-content
1.8. align-items
1.9. flex属性
flex:放大 缩小 宽度
flex:0 1 auto;0 不允许放大,1 允许缩小,auto宽度自动计算(宽度默认是根据内容变化,如果设置了宽度按设置算,如果设置了min-width则按此计算,即min-width > flex:width > element:width)。flex:0 1 auto;,即flex的默认值,也可以写作flex:initial。
注:
flex:0,由于只写了第一个参数,系统默认为flex 0,1,auto,与上述效果一样。
效果查看,浏览器当前大小:
缩小浏览器视窗,阴影消失,元素也被压缩:
放大浏览器视窗,阴影扩大,元素不能被放大:

flex:1 1 auto,允许放大,允许缩小,宽度自动计算,可以简写为flex:auto。
flex:0 0 auto,禁止放大缩小,简写为flex:none。
1.10. order属性
1.container .item:nth-of-type(1){
2 background-color: coral;
3 order:2;
4}
改变第一个项目的背景色,调整他的顺序为2:
把项目3排在项目2之前,
1.container .item:last-of-type{
2 background-color: green;
3 /* 项目2原来在最前顺序值为0,要排在项目2前,值应该小于0。 */
4 order:-2;
5}

1.11. place-content属性
内容位置,表现为内容对齐,利用剩余空间的分配完成内容的对齐。
- place-content: start

- place-content: end

- place-content: center

- place-content: space-between

- place-content: space-around(中间空间是两边的两倍)

- place-content: space-evenly(所有间距相等)
纵向排列一样,就不列举了。
1.12. place-item属性
- place-items: stretch

- place-items: start

- place-items: end

1.13. place-self属性
控制某一个属性的对齐方式
例如:place-self: start
1.container .item:last-of-type{
2background-color: green;
3/ 项目2原来在最前顺序值为0,要排在项目2前,值应该小于0。 /
4order:-2;
5place-self: start;
6}
