博客列表 >flex布局(弹性布局)基础知识

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

赵大叔
赵大叔原创
2020年04月11日 00:51:452412浏览

一、 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:比较常用,不理解可以,背下来。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议