博客列表 >Flex弹性布局

Flex弹性布局

溪边小树
溪边小树原创
2020年04月15日 16:36:19752浏览

flex 布局概述

1. flex 是什么

  • flex 是 Flexible Box 的缩写,意为弹性布局
  • flex 2009 年就已出现,浏览器兼容性很好,请放心使用

2. flex 解决了什么问题

  • 块元素的垂直居中, flex 可以轻松解决
  • 元素大小在容器中的自动伸缩,以适应容器的变化,特别适合移动端布局

3. flex 项目的布局方向是什么

  • 一个物体在一个平面中, 要么水平排列, 要么垂直排列, flex 借鉴了这个思想
  • flex 是一维布局, 项目任何时候只能沿一个方向排列,要么水平, 要么垂直
  • flex 项目排列的方向, 称为主轴, 水平和垂直二种
  • 与主轴垂直的称为交叉轴(有的教程也称之为副轴/侧轴)

4. flex 布局中常用术语有哪些(三个二)

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

base


5.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 多行容器中,项目在交叉轴上的对齐方式

6. flex 项目属性有哪些

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

flex 容器与项目

1. display属性

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

2. flex 容器与项目特征

序号 容器/项目 默认行为
1 容器主轴 水平方向
2 项目排列 沿主轴起始线排列(当前起始线居左)
3 项目类型 自动转换”行内块级”元素,不管之前是什么类型
4 容器主轴空间不足时 项目自动收缩尺寸以适应空间变化,不会换行显示
5 容器主轴存在未分配空间时 项目保持自身大小不会放大并充满空间

示例1

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. /* display: inline-flex; */
  17. }
  18. /* 项目/子元素 */
  19. .item {
  20. width: 100px;
  21. height: 50px;
  22. background-color: cyan;
  23. font-size: 1.5rem;
  24. }
  25. </style>
  26. </head>
  27. <body>
  28. <div class="container">
  29. <div class="item">1</div>
  30. <div class="item">2</div>
  31. <div class="item">3</div>
  32. <div class="item">4</div>
  33. </div>
  34. </body>
  35. </html>

flex 容器主轴方向

1. flex-direction属性

序号 属性值 描述
1 row默认值 主轴水平: 起始线居中,项目从左到右显示
2 row-reverse 主轴水平:起始线居右, 项目从右向左显示
3 column 主轴垂直: 起始线居上,项目从上向下显示
4 column-reverse 主轴垂直: 起始线居下,项目从下向上显示

示例2

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>主轴方向</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. /* display: inline-flex; */
  17. }
  18. /* 主轴方向: 所有的项目必须沿主轴排列 */
  19. .container {
  20. /* 默认主轴为水平,行的方向 */
  21. flex-direction: row;
  22. flex-direction: row-reverse;
  23. flex-direction: column;
  24. flex-direction: column-reverse;
  25. }
  26. /* 项目/子元素 */
  27. .item {
  28. width: 100px;
  29. height: 50px;
  30. background-color: cyan;
  31. font-size: 1.5rem;
  32. }
  33. </style>
  34. </head>
  35. <body>
  36. <div class="container">
  37. <div class="item">1</div>
  38. <div class="item">2</div>
  39. <div class="item">3</div>
  40. <div class="item">4</div>
  41. </div>
  42. </body>
  43. </html>

flex 容器主轴项目换行

1. flex-wrap属性

序号 属性值 描述
1 nowrap默认值 项目不换行: 单行容器
2 wrap 项目换行: 多行容器,第一行在上方
3 wrap-reverse 项目换行: 多行容器,第一行在下方

示例3

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>主轴方向</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. /* display: inline-flex; */
  17. }
  18. /* 主轴方向: 所有的项目必须沿主轴排列 */
  19. .container {
  20. /* 默认主轴为水平,行的方向 */
  21. flex-direction: row;
  22. /* flex-direction: row-reverse; */
  23. /* flex-direction: column; */
  24. /* flex-direction: column-reverse; */
  25. }
  26. /* 主轴上的项目换行显示 */
  27. .container {
  28. /* 默认不换行显示,如果当前容器容纳不小, 项目会自动收缩 */
  29. flex-wrap: nowrap;
  30. /* 如果允许换行, 当前行容纳不小的项目会拆行显示,此时,创建的容器叫:多行容器 */
  31. flex-wrap: wrap;
  32. flex-wrap: wrap-reverse;
  33. }
  34. /* 项目/子元素 */
  35. .item {
  36. width: 100px;
  37. height: 50px;
  38. background-color: cyan;
  39. font-size: 1.5rem;
  40. }
  41. </style>
  42. </head>
  43. <body>
  44. <div class="container">
  45. <div class="item">1</div>
  46. <div class="item">2</div>
  47. <div class="item">3</div>
  48. <div class="item">4</div>
  49. </div>
  50. </body>
  51. </html>

flex 容器主轴与项目换行简写

1. flex-flow属性

  • flex-flow是属性flex-directionflex-wrap的简写
  • 语法: flex-flow: flex-direction flex-wrap
属性值 描述
row nowrap默认值 主轴水平, 项目不换行

以后推荐只用它

示例4

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>主轴方向与是否换行的简写</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. }
  17. /* 主轴方向: 所有的项目必须沿主轴排列 */
  18. .container {
  19. /* flex-direction: row; */
  20. /* flex-wrap: nowrap; */
  21. /* 简写 */
  22. flex-flow: row nowrap;
  23. flex-flow: row wrap;
  24. flex-flow: column nowrap;
  25. flex-flow: column wrap;
  26. }
  27. /* 项目/子元素 */
  28. .item {
  29. width: 100px;
  30. height: 50px;
  31. background-color: cyan;
  32. font-size: 1.5rem;
  33. }
  34. </style>
  35. </head>
  36. <body>
  37. <div class="container">
  38. <div class="item">1</div>
  39. <div class="item">2</div>
  40. <div class="item">3</div>
  41. <div class="item">4</div>
  42. </div>
  43. </body>
  44. </html>

flex 容器主轴项目对齐

1. justify-content属性

当容器中主轴方向上存在剩余空间时, 该属性才有意义

序号 属性值 描述
1 flex-start默认 所有项目与主轴起始线对齐
2 flex-end 所有项目与主轴终止线对齐
3 center 所有项目与主轴中间线对齐: 居中对齐
4 space-between 两端对齐: 剩余空间在头尾项目之外的项目间平均分配
5 space-around 分散对齐: 剩余空间在每个项目二侧平均分配
6 space-evenly 平均对齐: 剩余空间在每个项目之间平均分配

示例5

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>主轴项目对齐方式</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. }
  17. /* 当前容器中在主轴方向上存在剩余空间的时候, 项目对齐才有意义 */
  18. .container {
  19. /* 默认,所有项目与主轴的起始线对齐 */
  20. justify-content: flex-start;
  21. justify-content: flex-end;
  22. justify-content: center;
  23. /* 两端对齐 */
  24. justify-content: space-between;
  25. /* 分散对齐 */
  26. justify-content: space-around;
  27. /* 平均对齐 */
  28. justify-content: space-evenly;
  29. }
  30. /* 项目/子元素 */
  31. .item {
  32. width: 50px;
  33. height: 50px;
  34. background-color: cyan;
  35. font-size: 1.5rem;
  36. }
  37. </style>
  38. </head>
  39. <body>
  40. <div class="container">
  41. <div class="item">1</div>
  42. <div class="item">2</div>
  43. <div class="item">3</div>
  44. <div class="item">4</div>
  45. </div>
  46. </body>
  47. </html>

flex 容器交叉轴项目对齐

1. align-items属性

  • 该属性仅适用于: 单行容器
  • 当容器中交叉轴方向上存在剩余空间时, 该属性才有意义
序号 属性值 描述
1 flex-start默认 与交叉轴起始线对齐
2 flex-end 与交叉轴终止线对齐
3 center 与交叉轴中间线对齐: 居中对齐

示例6

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>交叉轴项目对齐方式</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. }
  17. /* 当前容器中在交叉轴方向上存在剩余空间的时候, 项目对齐才有意义 */
  18. .container {
  19. align-items: flex-start;
  20. align-items: flex-end;
  21. align-items: center;
  22. }
  23. /* 项目/子元素 */
  24. .item {
  25. width: 50px;
  26. height: 50px;
  27. background-color: cyan;
  28. font-size: 1.5rem;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <div class="container">
  34. <div class="item">1</div>
  35. <div class="item">2</div>
  36. <div class="item">3</div>
  37. <div class="item">4</div>
  38. </div>
  39. </body>
  40. </html>

flex 多行容器交叉轴项目对齐

1. align-content属性

  • 该属性仅适用于: 多行容器
  • 多行容器中, 交叉轴会有多个项目, 剩余空间在项目之间分配才有意义
序号 属性值 描述
1 stretch默认 项目拉伸占据整个交叉轴
1 flex-start 所有项目与交叉轴起始线(顶部)对齐
2 flex-end 所有项目与交叉轴终止线对齐
3 center 所有项目与交叉轴中间线对齐: 居中对齐
4 space-between 两端对齐: 剩余空间在头尾项目之外的项目间平均分配
5 space-around 分散对齐: 剩余空间在每个项目二侧平均分配
6 space-evenly 平均对齐: 剩余空间在每个项目之间平均分配

提示: 多行容器中通过设置flex-wrap: wrap | wrap-reverse实现

示例7

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>交叉轴项目对齐方式</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. }
  17. /* 当前容器中在交叉轴方向上存在剩余空间的时候, 项目对齐才有意义 */
  18. .container {
  19. flex-flow: row wrap;
  20. /* 自动拉伸:默认 */
  21. align-content: stretch;
  22. align-content: flex-start;
  23. align-content: flex-end;
  24. align-content: center;
  25. align-content: space-between;
  26. align-content: space-around;
  27. align-content: space-evenly;
  28. }
  29. /* 项目/子元素 */
  30. .item {
  31. width: 50px;
  32. height: 50px;
  33. background-color: cyan;
  34. font-size: 1.5rem;
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. <div class="container">
  40. <div class="item">1</div>
  41. <div class="item">2</div>
  42. <div class="item">3</div>
  43. <div class="item">4</div>
  44. <div class="item">5</div>
  45. <div class="item">6</div>
  46. <div class="item">7</div>
  47. <div class="item">8</div>
  48. <div class="item">9</div>
  49. </div>
  50. </body>
  51. </html>

flex 项目交叉轴单独对齐

1. align-self属性

  • 该属性可覆盖容器的align-items, 用以自定义某个项目的对齐方式
序号 属性值 描述
1 auto默认值 继承 align-items 属性值
2 flex-start 与交叉轴起始线对齐
3 flex-end 与交叉轴终止线对齐
4 center 与交叉轴中间线对齐: 居中对齐
5 stretch 在交叉轴方向上拉伸
6 baseline 与基线对齐(与内容相关用得极少)

示例8

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>项目顺序</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. }
  17. /* 项目/子元素 */
  18. .item {
  19. width: 50px;
  20. height: 50px;
  21. background-color: cyan;
  22. font-size: 1.5rem;
  23. order: 0;
  24. }
  25. .item:first-of-type {
  26. order: 4;
  27. background-color: lightgreen;
  28. }
  29. .item:nth-of-type(2) {
  30. background-color: lightcoral;
  31. order: 3;
  32. }
  33. .item:nth-of-type(3) {
  34. background-color: wheat;
  35. order: 1;
  36. }
  37. .item:last-of-type {
  38. order: -1;
  39. }
  40. </style>
  41. </head>
  42. <body>
  43. <div class="container">
  44. <div class="item">1</div>
  45. <div class="item">2</div>
  46. <div class="item">3</div>
  47. <div class="item">4</div>
  48. </div>
  49. </body>
  50. </html>

flex 项目放大因子

1. flex-grow属性

  • 在容器主轴上存在剩余空间时, flex-grow才有意义
  • 该属性的值,称为放大因子, 常见的属性值如下:
序号 属性值 描述
1 0默认值 不放大,保持初始值
2 initial 设置默认值,与0等效
3 n 放大因子: 正数

示例9

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>项目独立对齐方向</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. }
  17. /* 项目/子元素 */
  18. .item {
  19. width: 50px;
  20. height: 50px;
  21. background-color: cyan;
  22. font-size: 1.5rem;
  23. align-self: auto;
  24. }
  25. .item:first-of-type {
  26. height: inherit;
  27. align-self: stretch;
  28. background-color: lightgreen;
  29. }
  30. .item:nth-of-type(2) {
  31. background-color: lightcoral;
  32. align-self: flex-start;
  33. }
  34. .item:nth-of-type(3) {
  35. background-color: wheat;
  36. /* align-self: 会覆盖掉项目中的align-items; */
  37. align-self: flex-end;
  38. }
  39. .item:last-of-type {
  40. align-self: center;
  41. }
  42. </style>
  43. </head>
  44. <body>
  45. <div class="container">
  46. <div class="item">1</div>
  47. <div class="item">2</div>
  48. <div class="item">3</div>
  49. <div class="item">4</div>
  50. </div>
  51. </body>
  52. </html>

flex 项目收缩因子

1. flex-shrink属性

  • 当容器主轴 “空间不足” 且 “禁止换行” 时, flex-shrink才有意义
  • 该属性的值,称为收缩因子, 常见的属性值如下:
序号 属性值 描述
1 1默认值 允许项目收缩
2 initial 设置初始默认值,与 1 等效
3 0 禁止收缩,保持原始尺寸
4 n 收缩因子: 正数

示例10

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>项目放大因子</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. }
  17. /* 项目/子元素 */
  18. .item {
  19. width: 50px;
  20. height: 50px;
  21. background-color: cyan;
  22. font-size: 1.5rem;
  23. /* 默认不放大 */
  24. flex-grow: initial;
  25. flex-grow: 0;
  26. }
  27. /*
  28. 主轴剩余空间 300 - 50*3 = 150px;
  29. 当前每个项目的放大因子是1, 一共3个项目,所以因子之和是3, 150 / 3 = 50
  30. 每一个项目分到了50px
  31. 再将每个项目在原宽度基础上增加50px, 得到新的宽度
  32. */
  33. .item:first-of-type {
  34. background-color: lightgreen;
  35. flex-grow: 1;
  36. }
  37. .item:nth-of-type(2) {
  38. background-color: lightcoral;
  39. flex-grow: 2;
  40. }
  41. .item:last-of-type {
  42. background-color: wheat;
  43. flex-grow: 3;
  44. }
  45. /*
  46. 150px要分配给每个项目
  47. 放大因子之和: 150 / (1+2+3) = 25px;
  48. 每个项目根据自己的放大因子来分配
  49. 第一个因子是1, 分到1 * 25 =25, 50 + 25 = 75px
  50. 第二个因子是2, 分到2 * 25 = 50 , 50 +50 = 100px
  51. 第三个因子是3, 分到3*25 = 75px, 50 + 75px = 125px;
  52. */
  53. </style>
  54. </head>
  55. <body>
  56. <div class="container">
  57. <div class="item">1</div>
  58. <div class="item">2</div>
  59. <div class="item">3</div>
  60. </div>
  61. </body>
  62. </html>

flex 项目计算尺寸

1. flex-basis属性

  • 在分配多余空间之前,项目占据的主轴空间
  • 浏览器根据这个属性,计算主轴是否有多余空间
  • 该属性会覆盖项目原始大小(width/height)
  • 该属性会被项目的min-width/min-height值覆盖
序号 属性值 描述
1 auto 默认值: 项目原来的大小
2 px 像素
3 % 百分比

优先级: 项目大小 < flex-basis < min-width/height

示例11

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>项目收缩因子</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 180px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. flex-flow: row nowrap;
  17. }
  18. /* 项目/子元素 */
  19. .item {
  20. width: 100px;
  21. height: 50px;
  22. background-color: cyan;
  23. font-size: 1.5rem;
  24. /* 禁止收缩 */
  25. flex-shrink: 0;
  26. }
  27. .item:first-of-type {
  28. background-color: lightgreen;
  29. flex-shrink: 1;
  30. }
  31. .item:nth-of-type(2) {
  32. background-color: lightcoral;
  33. flex-shrink: 2;
  34. }
  35. .item:last-of-type {
  36. background-color: wheat;
  37. flex-shrink: 3;
  38. }
  39. /*
  40. 当前三个项目宽度超出了主轴空间多少: 300 - 180 = 120px, 说明有120px要让三个项目消化掉
  41. 三个项目的收缩因子之和: 6
  42. 每一份就是: 120 /6 = 20
  43. 第一个项目: 100 - 1 * 20 = 80px
  44. 第二个项目: 100 - 2* 20 = 60px
  45. 第三个项目: 100 - 2* 30 = 40px
  46. */
  47. </style>
  48. </head>
  49. <body>
  50. <div class="container">
  51. <div class="item">1</div>
  52. <div class="item">2</div>
  53. <div class="item">3</div>
  54. </div>
  55. </body>
  56. </html>

flex 项目缩放的简写

1. flex属性

  • 项目放大,缩小与计算尺寸,对于项目非常重要,也很常用
  • 每次都要写这三个属性,非常的麻烦,且没有必要
  • flex属性,可以将以上三个属性进行简化:
  • 语法: flex: flex-flow flex-shrink flex-basis

1.1 三值语法

序号 属性值 描述
1 第一个值: 整数 flex-flow
2 第二个值: 整数 flex-shrink
3 第三个值: 有效宽度 flex-basis

举例:

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

1.2 双值语法

序号 属性值 描述
1 第一个值: 整数 flex-flow
3 第二个值: 有效宽度 flex-basis

举例:

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

1.3 单值语法

序号 属性值 描述
1 整数 flex-flow
2 有效宽度 flex-basis
3 关键字 `initial auto none`

举例:

序号 案例 描述
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

推荐使用flex, 就像推荐使用flex-flow设置主轴与换行一样

示例12

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>项目在主轴上的计算宽度</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. flex-flow: row wrap;
  17. }
  18. /* 项目/子元素 */
  19. .item {
  20. width: 50px;
  21. height: 50px;
  22. background-color: cyan;
  23. font-size: 1.5rem;
  24. }
  25. .item {
  26. /* auto === width */
  27. flex-basis: auto;
  28. /* flex-basis: 权重大于width; */
  29. flex-basis: 70px;
  30. flex-basis: 20%;
  31. flex-basis: 5rem;
  32. /* min-width / max-width 权重大于flex-basis; */
  33. max-width: 100px;
  34. flex-basis: 150px;
  35. /* width < flex-basis < min/max-width; */
  36. }
  37. </style>
  38. </head>
  39. <body>
  40. <div class="container">
  41. <div class="item">1</div>
  42. <div class="item">2</div>
  43. <div class="item">3</div>
  44. </div>
  45. </body>
  46. </html>

示例13

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>flex</title>
  7. <style>
  8. /* 容器 */
  9. .container {
  10. width: 300px;
  11. height: 150px;
  12. }
  13. /* 将容器/父元素设置为flex容器 */
  14. .container {
  15. display: flex;
  16. }
  17. /* 项目/子元素 */
  18. .item {
  19. width: 100px;
  20. height: 50px;
  21. background-color: cyan;
  22. font-size: 1.5rem;
  23. }
  24. .item:first-of-type {
  25. background-color: lightgreen;
  26. /* 默认:不放大,允许收缩, 以项目的width为准 */
  27. flex: 0 1 auto;
  28. flex: 1 1 auto;
  29. /* flex: 0 1 80px; */
  30. }
  31. .item:nth-of-type(2) {
  32. background-color: lightcoral;
  33. flex: 0 100px;
  34. }
  35. .item:last-of-type {
  36. background-color: wheat;
  37. flex: auto;
  38. flex: 1;
  39. flex: none;
  40. flex: 0 0 auto;
  41. flex: 0 0 250px;
  42. }
  43. </style>
  44. </head>
  45. <body>
  46. <div class="container">
  47. <div class="item">1</div>
  48. <div class="item">2</div>
  49. <div class="item">3</div>
  50. </div>
  51. </body>
  52. </html>

课程小结

本次课程较为详细地讲述了Flex布局的相关内容,老师用众多案例的详细讲解让我对元素布局有了更为清晰的认识,收获较大,主要内容包括:
1、一个物体在一个平面中, 要么水平排列, 要么垂直排列, flex 借鉴了这个思想,flex 是一维布局, 项目任何时候只能沿一个方向排列,要么水平, 要么垂直,引出主轴、交叉轴的概念;
2、关键点, 二成员: 容器和项目(container / item) ;二根轴:主轴与交叉轴;二根线:起始线与结束线(flex-start / flex-end);
3、注意容器与项目的主要属性特点的实操练习:
flex-directionflex-wrapflex-flow(简化 flex-direction, flex-wrap) 、justify-contentalign-items、align-contentflex-basisflex-growflex-shrinkflexflex: flex-flow flex-shrink flex-basis)、align-selforder`等;
4、通过学习,初次体验到布局更加直观与便捷了。

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