Blogger Information
Blog 119
fans 3
comment 1
visits 94585
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
flex布局(弹性布局)基础知识
赵大叔
Original
2428 people have browsed it

一、 flex 布局(弹性布局)基础知识

1. flex 布局中常用术语(三个二)

序号 简记 术语
1 二成员 容器和项目(container / item)
2 二根轴 主轴与交叉轴(main-axis / cross-axis)
3 二根线 起始线与结束线(flex-start / flex-end)

2. display属性

序号 属性值 描述 备注
1 flex; 创建 flex 块级容器 内部子元素自动成为 flex 项目
2 inline-flex; 创建 flex 行内容器 内部子元素自动成为 flex 项目,多个inline-flex;才有效果

3.flex 容器属性

序号 属性 描述
1 flex-direction 设置容器中的主轴方向: 行/水平方向, 列/垂直方向
2 flex-wrap 是否允许创建多行容器,即 flex 项目一行排列不下时, 是否允许换行
3 flex-flow 简化 flex-direction, flex-wrap 属性
4 justify-content 设置 flex 项目在主轴上对齐方式
5 align-items 设置 flex 项目在交叉轴上对齐方式
6 align-content 多行容器中,项目在交叉轴上的对齐方式

4.flex 容器属性

序号 属性 描述
1 flex-basis 项目宽度: 项目分配主轴剩余空间之前, 项目所占据的主轴空间宽度
2 flex-grow 项目的宽度扩展: 将主轴上的剩余空间按比例分配给指定项目
3 flex-shrink 项目的宽度收缩: 将项目上多出空间按比例在项目间进行缩减
4 flex 是上面三个属性的简化缩写: flex: flex-grow flex-shrink flex-basis
5 align-self 单独自定义某个项目在交叉轴上的对齐方式
6 order 自定义项目在主轴上的排列顺序,默认为 0,书写顺序,值越小位置越靠前

二、 代码演示 flex 属性

1、display属性

  1. <style>
  2. .container {
  3. width: 300px;
  4. height: 150px;
  5. /*设置容器为弹性容器,容器内项目自动转为弹性项目,默认水平排列*/
  6. /*display: flex;*/
  7. display: inline-flex;
  8. }
  9. .container2 {
  10. width: 300px;
  11. height: 150px;
  12. /*设置容器为弹性容器,容器内项目自动转为弹性项目,默认水平排列*/
  13. /*display: flex;*/
  14. display: inline-flex;
  15. }
  16. .item {
  17. width: 100px;
  18. height: 50px;
  19. background-color: skyblue;
  20. }
  21. </style>

1.1 display: flex;设置容器为弹性容器,容器内项目自动转为弹性项目

1.2 display: inline-flex;:创建 flex 行内容器,多个才有效


2、flex-wrap:设置容器主轴方向

  1. <style>
  2. .container {
  3. width: 300px;
  4. height: 150px;
  5. display: flex;
  6. /*flex-direction: row;*/
  7. /*flex-direction: row-reverse;*/
  8. /*flex-direction: column;*/
  9. flex-direction: column-reverse;
  10. }
  11. .item {
  12. width: 100px;
  13. height: 50px;
  14. background-color: skyblue;
  15. }
  16. </style>

2.1 flex-direction:row;:设置主轴方向:水平,默认值

2.2 flex-direction: row-reverse;:设置主轴方向:水平,右到左

2.3 flex-direction: column;:设置主轴方向:垂直,上到下

2.4 flex-direction: column;:设置主轴方向:垂直,下到上


3、flex-wrap:设置项目在容器主轴是否换行

  1. <style>
  2. .container {
  3. width: 300px;
  4. height: 150px;
  5. display: flex;
  6. /*flex-wrap: nowrap;*/
  7. /*flex-wrap: wrap;*/
  8. flex-wrap: wrap-reverse;
  9. }
  10. .item {
  11. width: 100px;
  12. height: 50px;
  13. background-color: skyblue;
  14. }
  15. </style>

3.1 flex-wrap: nowrap;:默认值,不换行,如果当前容器容纳不小, 项目会自动收缩

3.2 lex-wrap: wrap;:换行, 当前行容纳不下的项目会换行显示,此时,创建的容器叫:多行容器

3.3 flex-wrap: wrap-reverse;:换行,反向


4、flex-flow: row nowrap;:设置容器主轴与项目是否换行简写

  1. <style>
  2. .container {
  3. width: 300px;
  4. height: 150px;
  5. display: flex;
  6. /*flex-flow: row nowrap;*/
  7. /*flex-flow: row wrap;*/
  8. /*flex-flow: row wrap-reverse;*/
  9. /*flex-flow: column nowrap;*/
  10. /*flex-flow: column wrap;*/
  11. flex-flow: column wrap-reverse;
  12. }
  13. .item {
  14. width: 100px;
  15. height: 50px;
  16. background-color: skyblue;
  17. }
  18. </style>

4.1 flex-flow: row nowrap;:水平,不换行

4.2 flex-flow: row wrap;:水平,换行

4.3 flex-flow: row wrap-reverse;:水平,换行,反向

4.4 flex-flow: column nowrap;:垂直,不换行(列)

4.5 flex-flow: column wrap;:垂直,换行(列)

4.6 flex-flow: column wrap-reverse;:垂直,换行(列),反向


5、justify-content:弹性项在目容器主轴上的对齐方式

  1. <style>
  2. .container {
  3. width: 400px;
  4. height: 150px;
  5. display: flex;
  6. /*justify-content: flex-start;*/
  7. /*justify-content: flex-end;*/
  8. /*justify-content: center;*/
  9. /*justify-content: space-between;*/
  10. /*justify-content: space-around;*/
  11. justify-content: space-evenly;
  12. }
  13. .item {
  14. width: 80px;
  15. height: 50px;
  16. background-color: skyblue;
  17. }
  18. </style>

5.1 justify-content: flex-start;:主轴起始线对齐,默认

5.2 display: inline-flex;:主轴终止线对齐

5.3 display: inline-flex;:居中对齐

5.4 flex-wrap: nowrap;:两端对齐—剩余空间在头尾项目之外的项目间平均分配

5.5 display: inline-flex;:分散对齐—剩余空间在每个项目二侧平均分配

5.6 display: inline-flex;:平均对齐—剩余空间在每个项目之间平均分配


6、align-items:容器交叉轴项目对齐

  1. <style>
  2. .container {
  3. width: 300px;
  4. height: 150px;
  5. display: flex;
  6. /*align-items: flex-start;*/
  7. /*align-items: flex-end;*/
  8. align-items: center;
  9. }
  10. .item {
  11. width: 100px;
  12. height: 50px;
  13. background-color: skyblue;
  14. }
  15. </style>

6.1 align-items: flex-start;:与交叉轴起始线对齐

6.2 align-items: flex-end;:与交叉轴终止线对齐

6.3 align-items: center;:居中对齐


7、align-content:多行容器中项目在交叉轴的对齐方式

  1. <style>
  2. .container {
  3. width: 300px;
  4. height: 200px;
  5. display: flex;
  6. /*设置换行变为多行容器*/
  7. flex-wrap: wrap;
  8. /*align-content: stretch;*/
  9. /*align-content: flex-start;*/
  10. /*align-content: flex-end;*/
  11. /*align-content: center;*/
  12. /*align-content: space-between;*/
  13. /*align-content: space-around;*/
  14. align-content: space-evenly;
  15. }
  16. .item {
  17. width: 100px;
  18. height: 50px;
  19. background-color: skyblue;
  20. }
  21. </style>

7.1 align-content: stretch;:项目拉伸占据整个交叉轴

7.2 align-content: flex-start;:所有项目与交叉轴起始线(顶部)对齐

7.3 align-content: flex-end;:所有项目与交叉轴终止线对齐

7.4 align-content: center;:所有项目与交叉轴中间线对齐: 居中对齐

7.5 align-content: space-between;:两端对齐: 剩余空间在头尾项目之外的项目间平均分配

7.6 align-content: space-around;:分散对齐: 剩余空间在每个项目二侧平均分配

7.7 align-content: space-evenly;:平均对齐: 剩余空间在每个项目之间平均分配


8、align-self:单独某个项目在交叉轴的对齐方式

  • 该属性可覆盖容器的align-items, 用以自定义某个项目的对齐方式

8.1 align-self: auto;:继承 align-items 属性值

8.2 align-self: flex-start;:与交叉轴起始线对齐

8.3 align-self: flex-end;:与交叉轴终止线对齐

8.4 align-self: center;:与交叉轴中间线对齐: 居中对齐

8.5 align-self: stretch;:在交叉轴方向上拉伸

8.6 align-self: baseline;:与基线对齐(与内容相关用得极少)

  1. <style>
  2. .container {
  3. width: 300px;
  4. height: 200px;
  5. display: flex;
  6. }
  7. .item {
  8. width: 100px;
  9. height: 50px;
  10. background-color: skyblue;
  11. }
  12. .item:first-of-type {
  13. background-color: lightcoral;
  14. align-self: flex-start;
  15. }
  16. .item:nth-of-type(2) {
  17. background-color: wheat;
  18. align-self: flex-end;
  19. }
  20. .item:nth-of-type(3) {
  21. align-self: center;
  22. }
  23. .item:nth-of-type(4) {
  24. height: inherit;
  25. align-self: stretch;
  26. background-color: lightgreen;
  27. }
  28. .item:last-of-type {
  29. align-self: baseline;
  30. }
  31. </style>


9、flex-grow:项目放大因子:分配主轴剩余空间

9.1 flex-grow: 0; / flex-grow: initial;:不放大,保持初始值

9.2 flex-grow: n;:n为正数,创建 flex 行内容器

  1. <style>
  2. .container {
  3. width: 480px;
  4. height: 150px;
  5. display: flex;
  6. }
  7. .item {
  8. width: 80px;
  9. height: 50px;
  10. background-color: skyblue;
  11. }
  12. .item:first-of-type {
  13. background-color: lightgreen;
  14. flex-grow: 1;
  15. }
  16. .item:nth-of-type(2) {
  17. background-color: lightcoral;
  18. flex-grow: 2;
  19. }
  20. .item:last-of-type {
  21. background-color: wheat;
  22. flex-grow: 3;
  23. }
  24. </style>


10、flex-shrink:项目收缩因子:主轴空间小于项目空间时,收缩顶目空间

  1. <style>
  2. .container {
  3. width: 300px;
  4. height: 150px;
  5. display: flex;
  6. }
  7. .item {
  8. width: 120px;
  9. height: 50px;
  10. background-color: skyblue;
  11. /*flex-shrink: 0;*/
  12. }
  13. .item:last-of-type {
  14. /*flex-shrink: 0.5;*/
  15. }

10.1 flex-shrink: 1; / flex-shrink: initial;:允许项目收缩

10.2 flex-shrink: 0;:禁止收缩

10.3 flex-shrink: n;:n为正数,创建 flex 行内容器


11、flex-basis:项目计算尺寸

  • width < flex-basis < min/max-width;
  1. <style>
  2. /* 容器 */
  3. .container {
  4. width: 300px;
  5. height: 150px;
  6. display: flex;
  7. flex-flow: row wrap;
  8. }
  9. /* 项目/子元素 */
  10. .item {
  11. width: 50px;
  12. height: 50px;
  13. background-color: skyblue;
  14. }
  15. .item {
  16. /*auto === width 50px*/
  17. /*flex-basis: auto;*/
  18. flex-basis: 70px;
  19. /*flex-basis: 20%;*/
  20. /*flex-basis: 5rem;*/
  21. /*max-width: 100px;*/
  22. /*flex-basis: 150px;*/
  23. }
  24. </style>

12、flex:项目缩放的简写

  1. <style>
  2. .container {
  3. width: 300px;
  4. height: 150px;
  5. display: flex;
  6. }
  7. .item {
  8. width: 100px;
  9. height: 50px;
  10. background-color: skyblue;
  11. font-size: 1.5rem;
  12. }
  13. .item:first-of-type {
  14. background-color: lightgreen;
  15. /* 默认:不放大,允许收缩, 以项目的width为准 */
  16. flex: 0 1 auto;
  17. flex: 1 1 auto;
  18. /* flex: 0 1 80px; */
  19. }
  20. .item:nth-of-type(2) {
  21. background-color: lightcoral;
  22. flex: 0 100px;
  23. }
  24. .item:last-of-type {
  25. background-color: wheat;
  26. flex: auto;
  27. flex: 1;
  28. flex: none;
  29. flex: 0 0 auto;
  30. flex: 0 0 250px;
  31. }
  32. </style>

12.1 三值语法: flex: flex-grow flex-shrink flex-basis

序号 案例 描述
1 flex: 0 1 auto 默认值: 不放大,可收缩, 初始宽度
2 flex: 1 1 auto 项目自动放大或收缩适应容器
3 flex: 0 0 100px 按计算大小填充到容器中

12.2 二值语法: flex: flex-grow flex-basis

案例 描述
flex: 0 180px 禁止放大,按计算大小填充到容器中

12.3 单值语法

序号 案例 描述
1 flex: 1 flex: 1 1 auto
2 flex: 180px flex: 1 1 180px
3 initial flex: 0 1 auto
4 auto flex: 1 1 auto
5 none flex: 0 0 auto

三、 课程总结

1、flex简写是难点,基础知识,多写,多记,可以先从flex三值语法先熟悉。

2、flex: 1flex: 0:比较常用,不理解可以,背下来。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:你这是第二遍学了, 肯定会更棒的
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post