博客列表 >弹性盒子flex在项目样式举例

弹性盒子flex在项目样式举例

,多思曩惜,
,多思曩惜,原创
2020年04月19日 21:17:31723浏览

flex布局概述

1.flex是什么

  • flex是Flexible box的缩写,意为弹性布局
  • flex 2009 年就已出现,浏览器兼容性很好。

2.flex 解决了什么问题

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

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

  • 一个物体在平面中,要么水平排列,要么垂直排列,flex 借鉴了这个思维
  • flex 是一维布局,项目任何时候只能沿一个方向排列,要么水平,要么垂直
  • flex 项目排列的方向,称为主轴,水平和垂直俩种
  • 与主轴垂直的称为交叉轴

4.flex布局中常用术语有哪些

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


5.flex 容器属性有哪些

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

6.flex项目的属性有哪些

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

flex 容器与项目

1.display属性

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

2.flex 容器与项目特征

容器/项目 默认行为
容器主轴 水平方向
项目排列 沿主轴起始线排列(当前起始线居左)
项目类型 自动转换‘行内块级’元素,不管值钱的是什么类型
容器主轴空间不足时 项目自动收缩尺寸以适应空间变化,不会换行显示
容器主轴存在未分配空间时 项目保持自身大小不会放大并充满空间
  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. .container {
  9. height: 150px;
  10. background-color: darkcyan;
  11. }
  12. .item {
  13. width: 100px;
  14. height: 50px;
  15. background-color: cyan;
  16. font-size: 1.5rem;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div class="container">
  22. <div class="item">1</div>
  23. <div class="item">2</div>
  24. <div class="item">3</div>
  25. <div class="item">4</div>
  26. </div>
  27. </body>
  28. </html>
  • 预览效果
  • 当添加.container{display:flex;}样式时。效果图
  • 当注释.container{display:flex;}添加.container{display:inline-flex;}样式时。效果图

flex 容器主轴方向

1.flex-direction属性

属性值 描述
row默认值 主轴水平:起始线居中,项目从左到右显示
row-reverse 主轴水平:起始线居右,项目从右向左显示
column 主轴垂直:起始线居上,项目从上向下显示
column-reverse 主轴垂直:起始线居下,项目从下向上显示
  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. .container {
  9. height: 250px;
  10. background-color: darkcyan;
  11. }
  12. .container {
  13. display: flex;
  14. }
  15. .item {
  16. width: 100px;
  17. height: 50px;
  18. background-color: cyan;
  19. font-size: 1.5rem;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <div class="container">
  25. <div class="item">1</div>
  26. <div class="item">2</div>
  27. <div class="item">3</div>
  28. <div class="item">4</div>
  29. </div>
  30. </body>
  31. </html>

-效果预览

  • 当添加.container{flex-direction:row-reverse;}
  • 当添加.container{flex-direction:column;}
  • 当添加.container{flex-direction:column-reverse;}

flex 容器主轴项目换行

1.flex-wrap属性

属性值 描述
nowrap默认值 项目不换行:单行容器
wrap 项目换行:多行容器,第一行在上方
wrap-reverse 项目换行:多行容器,第一行在下方
  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. .container1 {
  9. width: 300px;
  10. height: 200px;
  11. background-color: wheat;
  12. display: flex;
  13. flex-direction: row;
  14. /* 默认不换行,若当前容器容纳不下,项目会自动收缩 */
  15. flex-wrap: nowrap;
  16. /* 换行显示,当前行容纳不下的项目会拆行显示 */
  17. }
  18. .container2 {
  19. width: 300px;
  20. height: 200px;
  21. background-color: wheat;
  22. display: flex;
  23. flex-direction: row;
  24. flex-wrap: wrap;
  25. }
  26. .container3 {
  27. width: 300px;
  28. height: 200px;
  29. background-color: wheat;
  30. display: flex;
  31. flex-direction: row;
  32. flex-wrap: wrap-reverse;
  33. }
  34. .item {
  35. width: 100px;
  36. height: 50px;
  37. background-color: cyan;
  38. font-size: 1.5rem;
  39. }
  40. </style>
  41. </head>
  42. <body>
  43. <div class="container">
  44. <div class="container1">
  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. <br>
  51. <div class="container2">
  52. <div class="item">1</div>
  53. <div class="item">2</div>
  54. <div class="item">3</div>
  55. <div class="item">4</div>
  56. </div>
  57. <br>
  58. <div class="container3">
  59. <div class="item">1</div>
  60. <div class="item">2</div>
  61. <div class="item">3</div>
  62. <div class="item">4</div>
  63. </div>
  64. </div>
  65. </body>
  66. </html>
  • 预览效果

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

1. flex-flow属性

  • flex-flow是属性flex-directionflex-wrap的简写
    -语法: flex-flow:flex-direction flex-wrap
  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. .container1 {
  9. width: 150px;
  10. height: 150px;
  11. background-color: wheat;
  12. display: flex;
  13. flex-flow: row nowrap;
  14. }
  15. .container2 {
  16. width: 200px;
  17. height: 150px;
  18. background-color: wheat;
  19. display: flex;
  20. flex-flow: row wrap;
  21. }
  22. .container3 {
  23. width: 200px;
  24. height: 110px;
  25. background-color: wheat;
  26. display: flex;
  27. flex-flow: column nowrap;
  28. }
  29. .container4 {
  30. width: 200px;
  31. height: 150px;
  32. background-color: wheat;
  33. display: flex;
  34. flex-flow: column wrap;
  35. }
  36. .item {
  37. width: 80px;
  38. height: 40px;
  39. background-color: cyan;
  40. font-size: 1.1rem;
  41. }
  42. </style>
  43. </head>
  44. <body>
  45. <div class="container">
  46. <span>container1</span>
  47. <div class="container1">
  48. <div class="item">1</div>
  49. <div class="item">2</div>
  50. <div class="item">3</div>
  51. <div class="item">4</div>
  52. </div>
  53. <br>
  54. <div class="container2">
  55. <div class="item">1</div>
  56. <div class="item">2</div>
  57. <div class="item">3</div>
  58. <div class="item">4</div>
  59. </div>
  60. <br>
  61. <div class="container3">
  62. <div class="item">1</div>
  63. <div class="item">2</div>
  64. <div class="item">3</div>
  65. <div class="item">4</div>
  66. </div>
  67. <br>
  68. <div class="container4">
  69. <div class="item">1</div>
  70. <div class="item">2</div>
  71. <div class="item">3</div>
  72. <div class="item">4</div>
  73. </div>
  74. </div>
  75. </body>
  76. </html>
  • 预览效果

flex 容器主轴项目对齐

1.justify-content属性

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

属性值 描述
flex-start默认 所有项目与主轴起始线对齐
flex-end 所有项目与主轴终止线对齐
center 所有项目与主轴中间线对齐:居中对齐
space-between 俩端对齐:剩余空间在头尾项目之外的项目平均分配
space-around 分散对齐:剩余空间在每个项目二测平均分配
space-evenly 平均对齐:剩余空间在每个项目之间平均分配
  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. .container {
  9. display: grid;
  10. grid-auto-flow: row;
  11. grid-template-columns: 300px 300px 300px;
  12. grid-template-rows: 150px 150px 150px;
  13. }
  14. .container1 {
  15. width: 300px;
  16. height: 150px;
  17. background-color: wheat;
  18. display: flex;
  19. justify-content: flex-start;
  20. /* justify-content: flex-end; */
  21. }
  22. .container2 {
  23. width: 300px;
  24. height: 150px;
  25. background-color: wheat;
  26. display: flex;
  27. justify-content: flex-end;
  28. }
  29. .container3 {
  30. width: 300px;
  31. height: 150px;
  32. background-color: wheat;
  33. display: flex;
  34. justify-content: center;
  35. }
  36. .container4 {
  37. width: 300px;
  38. height: 150px;
  39. background-color: wheat;
  40. display: flex;
  41. justify-content: space-between;
  42. }
  43. .container5 {
  44. width: 300px;
  45. height: 150px;
  46. background-color: wheat;
  47. display: flex;
  48. justify-content: space-around;
  49. }
  50. .container6 {
  51. width: 300px;
  52. height: 150px;
  53. background-color: wheat;
  54. display: flex;
  55. justify-content: space-evenly;
  56. }
  57. .item {
  58. width: 50px;
  59. height: 40px;
  60. background-color: cyan;
  61. font-size: 1.1rem;
  62. }
  63. </style>
  64. </head>
  65. <body>
  66. <div class="container">
  67. <div class="container1">
  68. <div class="item">1</div>
  69. <div class="item">2</div>
  70. <div class="item">3</div>
  71. <div class="item">4</div>
  72. </div>
  73. <br>
  74. <div class="container2">
  75. <div class="item">1</div>
  76. <div class="item">2</div>
  77. <div class="item">3</div>
  78. <div class="item">4</div>
  79. </div>
  80. <br>
  81. <div class="container3">
  82. <div class="item">1</div>
  83. <div class="item">2</div>
  84. <div class="item">3</div>
  85. <div class="item">4</div>
  86. </div>
  87. <br>
  88. <div class="container4">
  89. <div class="item">1</div>
  90. <div class="item">2</div>
  91. <div class="item">3</div>
  92. <div class="item">4</div>
  93. </div>
  94. <br>
  95. <div class="container5">
  96. <div class="item">1</div>
  97. <div class="item">2</div>
  98. <div class="item">3</div>
  99. <div class="item">4</div>
  100. </div>
  101. <br>
  102. <div class="container6">
  103. <div class="item">1</div>
  104. <div class="item">2</div>
  105. <div class="item">3</div>
  106. <div class="item">4</div>
  107. </div>
  108. </div>
  109. </body>
  110. </html>
  • 预览效果

flex 容器交叉轴项目对齐

1.align-items属性

  • 该属性仅适用于: 单行容器
  • 当容器中交叉轴方向上存在剩余空间时, 该属性才有意义
属性值 描述
flex-start默认 与交叉轴起始线对齐
flex-end 与交叉轴终止线对齐
center 与交叉轴中间线对齐: 居中对齐
  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. .container1 {
  9. width: 300px;
  10. height: 150px;
  11. background-color: wheat;
  12. display: flex;
  13. align-items: flex-start;
  14. }
  15. .container2 {
  16. width: 300px;
  17. height: 150px;
  18. background-color: wheat;
  19. display: flex;
  20. align-items: flex-end;
  21. }
  22. .container3 {
  23. width: 300px;
  24. height: 150px;
  25. background-color: wheat;
  26. display: flex;
  27. align-items: center;
  28. }
  29. .item {
  30. width: 50px;
  31. height: 40px;
  32. background-color: cyan;
  33. font-size: 1.1rem;
  34. }
  35. </style>
  36. </head>
  37. <body>
  38. <div class="container">
  39. <div class="container1">
  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>
  45. <br>
  46. <div class="container2">
  47. <div class="item">1</div>
  48. <div class="item">2</div>
  49. <div class="item">3</div>
  50. <div class="item">4</div>
  51. </div>
  52. <br>
  53. <div class="container3">
  54. <div class="item">1</div>
  55. <div class="item">2</div>
  56. <div class="item">3</div>
  57. <div class="item">4</div>
  58. </div>
  59. </div>
  60. </body>
  61. </html>
  • 预览效果

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

1.align-content属性

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

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

  • 部分样式

    1. <style>
    2. .container {
    3. display: grid;
    4. grid-auto-flow: row;
    5. grid-template-columns: 300px 300px 300px;
    6. grid-template-rows: 150px 150px 150px;
    7. }
    8. .container1 {
    9. width: 300px;
    10. height: 150px;
    11. background-color: wheat;
    12. display: flex;
    13. flex-flow: row wrap;
    14. align-content: stretch;
    15. }
    16. .item {
    17. width: 80px;
    18. height: 40px;
    19. background-color: cyan;
    20. font-size: 1.1rem;
    21. }
    22. </style>
  • 预览


flex 项目的顺序排列

1.order属性

  • order 属性 设置或检索弹性盒模型对象的子元素出现的順序
  • 注意:如果元素不是弹性盒对象的元素,则 order 属性不起作用。
描述
number 默认值是0,规定灵活项目的顺序
initial 设置该属性为它的默认值。
inherit 从父元素继承该属性

flex 项目交叉轴单独对齐

1.align-self属性

  • 该属性可覆盖容器的align-items,用以自定义某个项目的对齐方式
属性 描述
auto默认值 继承align-items属性值
flex-start 与交叉轴起始线对齐
flex-end 与交叉轴终止线对齐
center 与交叉轴中间线对齐:居中对齐
stretch 在交叉轴方向上拉伸
baseline 与基线对齐(与内容相关用得极少)
  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. .container1 {
  9. width: 300px;
  10. height: 150px;
  11. background-color: wheat;
  12. display: flex;
  13. align-self: auto;
  14. /* align-items: center; */
  15. }
  16. .container1>.item:first-of-type {
  17. height: inherit;
  18. background-color: yellow;
  19. /* align-self: 会覆盖掉父项目中的align-items; */
  20. align-self: stretch;
  21. }
  22. .container1>.item:nth-of-type(2) {
  23. background-color: lightcoral;
  24. align-self: flex-start;
  25. }
  26. .container1>.item:nth-of-type(3) {
  27. background-color: lightcoral;
  28. align-self: flex-end;
  29. }
  30. .container1>.item:last-of-type {
  31. align-self: center;
  32. }
  33. .item {
  34. width: 80px;
  35. height: 40px;
  36. background-color: cyan;
  37. font-size: 1.1rem;
  38. }
  39. </style>
  40. </head>
  41. <body>
  42. <div class="container">
  43. <div class="container1">
  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. </div>
  50. </body>
  51. </html>
  • 效果图

flex 项目放大因子\收缩因子

1.flex-grow属性

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

2.flex-shrink属性

  • 当容器主轴 “空间不足” 且 “禁止换行” 时, flex-shrink才有意义
  • 该属性的值,称为收缩因子, 常见的属性值如下:
属性值 描述
1默认值 允许项目收缩
initial 设置默认值,与1等效
0 禁止收缩,保持原始尺寸
n 放大因子:正数
  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. .container {
  9. display: flex;
  10. }
  11. .container1 {
  12. width: 300px;
  13. height: 150px;
  14. background-color: wheat;
  15. display: flex;
  16. /* flex-grow: inherit; */
  17. }
  18. .container1>.item:first-of-type {
  19. background-color: yellow;
  20. flex-grow: 0;
  21. }
  22. .container1>.item:nth-of-type(2) {
  23. background-color: lightcoral;
  24. flex-grow: 1;
  25. }
  26. .container1>.item:nth-of-type(3) {
  27. background-color: lightgray;
  28. flex-grow: 3;
  29. }
  30. .container2 {
  31. width: 150px;
  32. height: 150px;
  33. background-color: wheat;
  34. display: flex;
  35. flex-flow: row nowrap;
  36. margin-left: 50px;
  37. flex-shrink: 0;
  38. }
  39. .container2>.item:first-of-type {
  40. background-color: yellow;
  41. flex-shrink: 0;
  42. }
  43. .container2>.item:nth-of-type(2) {
  44. background-color: lightcoral;
  45. flex-shrink: 1;
  46. }
  47. .container2>.item:nth-of-type(3) {
  48. background-color: lightgray;
  49. flex-shrink: 3;
  50. }
  51. .item {
  52. width: 80px;
  53. height: 40px;
  54. background-color: cyan;
  55. font-size: 1.1rem;
  56. }
  57. </style>
  58. </head>
  59. <body>
  60. <div class="container">
  61. <div class="container1">
  62. <div class="item">1</div>
  63. <div class="item">2</div>
  64. <div class="item">3</div>
  65. </div>
  66. <div class="container2">
  67. <div class="item">1</div>
  68. <div class="item">2</div>
  69. <div class="item">3</div>
  70. </div>
  71. </div>
  72. </body>
  73. </html>
  • 预览效果

flex 项目计算尺寸

1.flex-basis属性

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

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


flex 项目缩放的简写

1.flex属性

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

1.1 三值语法

|属性值|描述|
|第一个值:整数|flex-grow|
|第二个值:整数|flex-shrink|
|第三个值:有效宽度|flex-basis|

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

1.2双值语法

属性值 描述
第一个值:整数 flex-grow
第二个值:有效宽度 flex-basis
  • 举例

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

1.3单值语法

属性值 描述
整数 flex-grow
有效宽度 flex-basis
关键字 initial、auto、none
  • 举例
案例 描述
flex:1 flex:1 1 auto
flex:180px flex:1 1 180px
initial flex:0 1 auto
auto flex:1 1 auto
none flex:0 0 auto

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

总结

  • 创建弹性盒子,flex中各种样式选择了解,项目在容器布局中的布局样式,
上一条:grid布局下一条:grid布局主要用法
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议