当前位置:   article > 正文

Flex布局 (上万字)超详细讲解 这篇就够了_flex 布局

flex 布局

一、Flex概述

Flex布局,全称为“Flexible Box Layout”,意为“弹性盒布局”。它是一种现代的CSS布局模式,旨在提供一种更有效的方式来布局、对齐和分配容器中项目之间的空间,即使它们的大小未知或动态变化。

Flex布局的主要特点和优势包括:

  1. 灵活性:Flex布局允许项目在容器中灵活地扩展和收缩,以填充可用空间或调整大小以适应内容。
  2. 对齐方式:Flex布局提供了各种对齐选项,可以轻松地实现水平和垂直对齐。
  3. 方向控制:可以方便地改变主轴的方向,使项目在水平或垂直方向上排列。
  4. 空间分配:Flex布局可以自动处理项目之间的空间分配,使其看起来更加整洁和平衡。
  5. 简化布局:Flex布局使得复杂的布局变得简单,减少了传统布局方式中需要使用的浮动、定位等技巧。

二、Flex容器属性

 Flex布局支持6个容器属性:flex-direction、flex-wrap、flex-flow、justify-content、align-items、align-content

2.1 flex-direction

flex-direction是CSS Flexbox布局中的一个属性,它用于定义主轴的方向,即决定了flex容器中的子元素(flex items)的排列方式。这个属性有以下几个可选值:

  1. row:这是默认值。当设置为row时,主轴的方向为水平,子元素从左到右排列。

  2. row-reverse:当设置为row-reverse时,主轴的方向仍然是水平,但子元素从右到左排列,即反向水平排列。

  3. column:当设置为column时,主轴的方向变为垂直,子元素从上到下排列。

  4. column-reverse:当设置为column-reverse时,主轴的方向为垂直,但子元素从下到上排列,即反向垂直排列。

示例:

flex.html:

  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 Direction Example</title>
  7. <link rel="stylesheet" href="styles.css">
  8. </head>
  9. <body>
  10. <!-- 使用 row 方向的 flex 容器 -->
  11. <div class="flex-container row">
  12. <div class="flex-item">1</div>
  13. <div class="flex-item">2</div>
  14. <div class="flex-item">3</div>
  15. <div class="flex-item">4</div>
  16. </div>
  17. <!-- 使用 row-reverse 方向的 flex 容器 -->
  18. <div class="flex-container row-reverse">
  19. <div class="flex-item">1</div>
  20. <div class="flex-item">2</div>
  21. <div class="flex-item">3</div>
  22. <div class="flex-item">4</div>
  23. </div>
  24. <!-- 使用 column 方向的 flex 容器 -->
  25. <div class="flex-container column">
  26. <div class="flex-item">1</div>
  27. <div class="flex-item">2</div>
  28. <div class="flex-item">3</div>
  29. <div class="flex-item">4</div>
  30. </div>
  31. <!-- 使用 column-reverse 方向的 flex 容器 -->
  32. <div class="flex-container column-reverse">
  33. <div class="flex-item">1</div>
  34. <div class="flex-item">2</div>
  35. <div class="flex-item">3</div>
  36. <div class="flex-item">4</div>
  37. </div>
  38. </body>
  39. </html>

styles.css:

  1. .flex-container {
  2. display: flex;
  3. flex-wrap: wrap; /* 允许项目换行 */
  4. width: 300px;
  5. height: 200px;
  6. border: 1px solid #000;
  7. padding: 10px;
  8. box-sizing: border-box;
  9. }
  10. .flex-item {
  11. width: 50px;
  12. height: 50px;
  13. margin: 5px;
  14. background-color: lightblue;
  15. text-align: center;
  16. line-height: 50px;
  17. color: #333;
  18. }
  19. /* 使用不同的 flex-direction 值来改变项目的排列方向 */
  20. /* flex-direction: row (默认值) */
  21. .flex-container.row {
  22. flex-direction: row;
  23. }
  24. /* flex-direction: row-reverse */
  25. .flex-container.row-reverse {
  26. flex-direction: row-reverse;
  27. }
  28. /* flex-direction: column */
  29. .flex-container.column {
  30. flex-direction: column;
  31. }
  32. /* flex-direction: column-reverse */
  33. .flex-container.column-reverse {
  34. flex-direction: column-reverse;
  35. }

运行结果:

2.2 flex-wrap

 flex-wrap 属性的参数。flex-wrap 是 CSS 中的一个属性,用于控制弹性盒子模型中的子元素是否应该换行。它有三个可能的值:

  1. nowrap(默认值):子元素不会换行,即使容器的空间不足以容纳它们。这可能会导致子元素溢出容器。
  2. wrap:如果容器的空间不足以容纳所有子元素,那么子元素会移到下一行。这意味着子元素会在需要时换行。
  3. wrap-reverse:这也是一个换行选项,但子元素的排列顺序与 wrap 相反。在 wrap-reverse 中,子元素会从容器的底部开始向上换行。

示例:

flex.html:

  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 Wrap Example</title>
  7. <link rel="stylesheet" href="styles.css"> <!-- 引入外部CSS文件 -->
  8. </head>
  9. <body>
  10. <h2>nowrap (默认)</h2>
  11. <div class="flex-container nowrap">
  12. <div class="flex-item">1</div>
  13. <div class="flex-item">2</div>
  14. <div class="flex-item">3</div>
  15. <div class="flex-item">4</div>
  16. <div class="flex-item">5</div>
  17. </div>
  18. <h2>wrap</h2>
  19. <div class="flex-container wrap">
  20. <div class="flex-item">1</div>
  21. <div class="flex-item">2</div>
  22. <div class="flex-item">3</div>
  23. <div class="flex-item">4</div>
  24. <div class="flex-item">5</div>
  25. </div>
  26. <h2>wrap-reverse</h2>
  27. <div class="flex-container wrap-reverse">
  28. <div class="flex-item">1</div>
  29. <div class="flex-item">2</div>
  30. <div class="flex-item">3</div>
  31. <div class="flex-item">4</div>
  32. <div class="flex-item">5</div>
  33. </div>
  34. </body>
  35. </html>

styles.css:

  1. /* styles.css */
  2. .flex-container {
  3. display: flex;
  4. flex-direction: row;
  5. justify-content: flex-start;
  6. align-items: stretch;
  7. margin-bottom: 20px;
  8. width: 200px;
  9. padding: 10px;
  10. border: 1px solid #000;
  11. }
  12. .flex-item {
  13. flex: 0 0 50px;
  14. height: 50px;
  15. margin: 5px;
  16. background-color: #999;
  17. color: #fff;
  18. text-align: center;
  19. line-height: 50px;
  20. border: 1px solid #666;
  21. }
  22. .nowrap {
  23. flex-wrap: nowrap;
  24. }
  25. .wrap {
  26. flex-wrap: wrap;
  27. }
  28. .wrap-reverse {
  29. flex-wrap: wrap-reverse;
  30. }

运行结果:

2.3 flex-flow

flex-flow 是 CSS 中的一个简写属性,用于设置一个弹性容器(flex container)的主轴方向(flex-direction)和换行方式(flex-wrap)。

flex-flow 的值是由两部分组成的,第一部分是 flex-direction,第二部分是 flex-wrap

  1. flex-direction:定义主轴的方向,即子元素排列的方向。它有以下四个可能的值:

    • row:默认值,主轴为水平方向,子元素从左到右排列。
    • row-reverse:主轴为水平方向,但子元素从右到左排列。
    • column:主轴为垂直方向,子元素从上到下排列。
    • column-reverse:主轴为垂直方向,但子元素从下到上排列。
  2. flex-wrap:定义子元素是否应该换行以及如何换行。它有三个可能的值:

    • nowrap:默认值,子元素不会换行,即使容器的空间不足以容纳它们。
    • wrap:如果容器的空间不足以容纳所有子元素,那么子元素会移到下一行。
    • wrap-reverse:子元素会从容器的底部开始向上换行。

示例:

flex.html:

  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 Flow Example</title>
  7. <link rel="stylesheet" href="styles.css"> <!-- 引入外部 CSS 文件 -->
  8. </head>
  9. <body>
  10. <h2>Flex Flow Example</h2>
  11. <div class="flex-container">
  12. <div class="flex-item">1</div>
  13. <div class="flex-item">2</div>
  14. <div class="flex-item">3</div>
  15. <div class="flex-item">4</div>
  16. <div class="flex-item">5</div>
  17. <div class="flex-item">6</div>
  18. <div class="flex-item">7</div>
  19. <div class="flex-item">8</div>
  20. <div class="flex-item">9</div>
  21. <div class="flex-item">10</div>
  22. </div>
  23. </body>
  24. </html>

styles:

  1. /* styles.css */
  2. .flex-container {
  3. display: flex;
  4. flex-flow: row wrap; /* 设置主轴为水平和允许换行 */
  5. justify-content: flex-start;
  6. align-items: stretch;
  7. margin-bottom: 20px;
  8. padding: 10px;
  9. width: 800px;
  10. border: 1px solid #000;
  11. }
  12. .flex-item {
  13. flex: 0 0 100px; /* 不允许弹性伸缩,固定宽度为 100px */
  14. height: 50px;
  15. margin: 5px;
  16. background-color: #999;
  17. color: #fff;
  18. text-align: center;
  19. line-height: 50px;
  20. border: 1px solid #666;
  21. }

运行结果:

2.4 justify-content

justify-content 是 CSS 中用于控制弹性盒子(flex container)中的子元素(flex items)在主轴(main axis)上的对齐方式的属性。这个属性对于如何分布和对齐容器内的元素非常关键。以下是 justify-content 的几个可能的值:

  1. flex-start:默认值,子元素向主轴的起点对齐。

  2. flex-end:子元素向主轴的终点对齐。

  3. center:子元素在主轴上居中对齐。

  4. space-between:子元素平均分布在主轴上,首尾元素分别对齐到主轴的起点和终点。

  5. space-around:子元素平均分布在主轴上,且每个元素两侧的间隔相等。这意味着首尾元素到容器边缘的间隔会比它们之间的间隔小一半。

示例:

flex.html:

  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>Justify Content Example</title>
  7. <link rel="stylesheet" href="styles.css">
  8. </head>
  9. <body>
  10. <h2>Justify Content Example</h2>
  11. <ul class="flex-container flex-container-start">
  12. <li class="flex-item">1</li>
  13. <li class="flex-item">2</li>
  14. <li class="flex-item">3</li>
  15. </ul>
  16. <ul class="flex-container flex-container-end">
  17. <li class="flex-item">1</li>
  18. <li class="flex-item">2</li>
  19. <li class="flex-item">3</li>
  20. </ul>
  21. <ul class="flex-container flex-container-center">
  22. <li class="flex-item">1</li>
  23. <li class="flex-item">2</li>
  24. <li class="flex-item">3</li>
  25. </ul>
  26. <ul class="flex-container flex-container-between">
  27. <li class="flex-item">1</li>
  28. <li class="flex-item">2</li>
  29. <li class="flex-item">3</li>
  30. </ul>
  31. <ul class="flex-container flex-container-around">
  32. <li class="flex-item">1</li>
  33. <li class="flex-item">2</li>
  34. <li class="flex-item">3</li>

styles.css:

  1. /* styles.css */
  2. .flex-container {
  3. display: flex;
  4. flex-flow: row nowrap; /* 设置主轴为水平且不换行 */
  5. width: 400px;
  6. height: 100px;
  7. margin: 0;
  8. padding: 0;
  9. list-style: none;
  10. border: 1px solid #000;
  11. }
  12. .flex-item {
  13. flex: 0 0 50px; /* 固定宽度为 50px */
  14. height: 80%;
  15. margin: 5px;
  16. background-color: #999;
  17. color: #fff;
  18. text-align: center;
  19. line-height: 100px;
  20. border: 1px solid #666;
  21. }
  22. /* flex-start */
  23. .flex-container-start {
  24. justify-content: flex-start;
  25. }
  26. /* flex-end */
  27. .flex-container-end {
  28. justify-content: flex-end;
  29. }
  30. /* center */
  31. .flex-container-center {
  32. justify-content: center;
  33. }
  34. /* space-between */
  35. .flex-container-between {
  36. justify-content: space-between;
  37. }
  38. /* space-around */
  39. .flex-container-around {
  40. justify-content: space-around;
  41. }

运行结果:

2.5 align-items

align-items 是 CSS Flexbox 布局中的一个属性,它定义了沿着交叉轴(cross axis)如何对齐 flex 容器的子元素(flex items)。交叉轴是与主轴(main axis)垂直的轴,主轴的方向由 flex-direction 属性决定。align-items 的值决定了子元素在交叉轴上的对齐方式。

以下是 align-items 的一些常见值:

  1. flex-start:子元素沿着交叉轴的起点对齐。

  2. flex-end:子元素沿着交叉轴的终点对齐。

  3. center:子元素在交叉轴上居中对齐。

  4. baseline:子元素按照它们的基线对齐。基线通常是文本内容的底部线,对于没有文本内容的元素,基线行为可能因元素类型而异。

  5. stretch(默认值):如果子元素未设置高度或设为 auto,则它们会沿着交叉轴方向拉伸以填满整个容器的高度。这意味着子元素会被拉伸或压缩以适应容器的高度,除非它们有自己的明确尺寸。

示例:

flex.html:

  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>Align Items Example</title>
  7. <link rel="stylesheet" href="styles.css">
  8. </head>
  9. <body>
  10. <div class="flex-container align-start">
  11. <div class="flex-item">1</div>
  12. <div class="flex-item">2</div>
  13. <div class="flex-item">3</div>
  14. </div>
  15. <div class="flex-container align-end">
  16. <div class="flex-item">1</div>
  17. <div class="flex-item">2</div>
  18. <div class="flex-item">3</div>
  19. </div>
  20. <div class="flex-container align-center">
  21. <div class="flex-item">1</div>
  22. <div class="flex-item">2</div>
  23. <div class="flex-item">3</div>
  24. </div>
  25. <div class="flex-container align-baseline">
  26. <div class="flex-item">1</div>
  27. <div class="flex-item">2</div>
  28. <div class="flex-item">3</div>
  29. </div>
  30. <div class="flex-container align-stretch">
  31. <div class="flex-item">1</div>
  32. <div class="flex-item">2</div>
  33. <div class="flex-item">3</div>
  34. </div>
  35. </body>
  36. </html>

styles.css:

  1. .flex-container {
  2. display: flex;
  3. height: 150px;
  4. border: 1px solid black;
  5. }
  6. .flex-item {
  7. width: 100px;
  8. background-color: lightblue;
  9. margin: 5px;
  10. text-align: center;
  11. line-height: 50px;
  12. }
  13. .align-start {
  14. align-items: flex-start;
  15. }
  16. .align-end {
  17. align-items: flex-end;
  18. }
  19. .align-center {
  20. align-items: center;
  21. }
  22. .align-baseline {
  23. align-items: baseline;
  24. }
  25. .align-stretch {
  26. align-items: stretch;
  27. }

运行结果:

2.6 align-content

align-content 是 CSS Flexbox 布局中的一个属性,它用于定义在交叉轴(cross axis)上如何对齐 flex 容器的行(如果 flex 容器是多行的)。这个属性只对设置了 display: flex; 并且具有多行子项的容器有效。当容器只有一行子项时,align-content 属性不会产生任何效果。

align-content 的值及其含义如下:

  1. flex-start:与交叉轴的起点对齐。
  2. flex-end:与交叉轴的终点对齐。
  3. center:与交叉轴的中点对齐。
  4. space-between:子项之间的间隔平均分布。
  5. space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

示例:

flex.html:

  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>Align Content Example</title>
  7. <link rel="stylesheet" href="styles.css">
  8. </head>
  9. <body>
  10. <div class="flex-container align-start">
  11. <div class="flex-item">1</div>
  12. <div class="flex-item">2</div>
  13. <div class="flex-item">3</div>
  14. <div class="flex-item">4</div>
  15. <div class="flex-item">5</div>
  16. <div class="flex-item">6</div>
  17. <div class="flex-item">7</div>
  18. <div class="flex-item">8</div>
  19. <div class="flex-item">9</div>
  20. </div>
  21. <div class="flex-container align-end">
  22. <div class="flex-item">1</div>
  23. <div class="flex-item">2</div>
  24. <div class="flex-item">3</div>
  25. <div class="flex-item">4</div>
  26. <div class="flex-item">5</div>
  27. <div class="flex-item">6</div>
  28. <div class="flex-item">7</div>
  29. <div class="flex-item">8</div>
  30. <div class="flex-item">9</div>
  31. </div>
  32. <div class="flex-container align-center">
  33. <div class="flex-item">1</div>
  34. <div class="flex-item">2</div>
  35. <div class="flex-item">3</div>
  36. <div class="flex-item">4</div>
  37. <div class="flex-item">5</div>
  38. <div class="flex-item">6</div>
  39. <div class="flex-item">7</div>
  40. <div class="flex-item">8</div>
  41. <div class="flex-item">9</div>
  42. </div>
  43. <div class="flex-container align-between">
  44. <div class="flex-item">1</div>
  45. <div class="flex-item">2</div>
  46. <div class="flex-item">3</div>
  47. <div class="flex-item">4</div>
  48. <div class="flex-item">5</div>
  49. <div class="flex-item">6</div>
  50. <div class="flex-item">7</div>
  51. <div class="flex-item">8</div>
  52. <div class="flex-item">9</div>
  53. </div>
  54. <div class="flex-container align-around">
  55. <div class="flex-item">1</div>
  56. <div class="flex-item">2</div>
  57. <div class="flex-item">3</div>
  58. <div class="flex-item">4</div>
  59. <div class="flex-item">5</div>
  60. <div class="flex-item">6</div>
  61. <div class="flex-item">7</div>
  62. <div class="flex-item">8</div>
  63. <div class="flex-item">9</div>
  64. </div>
  65. </body>
  66. </html>

styles.css:

  1. .flex-container {
  2. display: flex;
  3. flex-wrap: wrap;
  4. justify-content: flex-start;
  5. height: 150px;
  6. width: 600px;
  7. padding: 10px;
  8. box-sizing: border-box;
  9. background-color: lightgrey;
  10. margin-bottom: 10px;
  11. }
  12. .flex-item {
  13. width: 50px;
  14. height: 50px;
  15. margin: 5px;
  16. background-color: lightblue;
  17. display: flex;
  18. justify-content: center;
  19. align-items: center;
  20. color: white;
  21. font-size: 14px;
  22. }
  23. .align-start {
  24. align-content: flex-start;
  25. }
  26. .align-end {
  27. align-content: flex-end;
  28. }
  29. .align-center {
  30. align-content: center;
  31. }
  32. .align-between {
  33. align-content: space-between;
  34. }
  35. .align-around {
  36. align-content: space-around;
  37. }

运行结果:

三、Flex项目属性

Flex布局支持6个项目属性order、flex-grow、flex-shrink、flex-basis、flex、align-self

3.1 order

order属性用于控制Flex子项在容器中的排列顺序。默认情况下,Flex子项按照它们在HTML中出现的顺序排列,但是通过为子项设置不同的order值,你可以改变它们的排列顺序。较小的order值将排在前面,而较大的order值将排在后面。

示例:

  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 Order Example</title>
  7. <style>
  8. .flex-container {
  9. display: flex;
  10. list-style: none;
  11. padding: 0;
  12. }
  13. .flex-item {
  14. margin: 10px;
  15. padding: 20px;
  16. background-color: lightblue;
  17. text-align: center;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <ul class="flex-container">
  23. <li class="flex-item" style="order: 3;">Item 1,order: 3</li>
  24. <li class="flex-item" style="order: 1;">Item 2,order: 1</li>
  25. <li class="flex-item" style="order: 2;">Item 3,order: 2</li>
  26. </ul>
  27. </body>
  28. </html>

 运行结果:

3.2 flex-grow

flex-grow属性定义项目的放大比例,默认为0,如果存在剩余空间,也不放大

示例:

  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 Grow Example</title>
  7. <style>
  8. .flex-container {
  9. display: flex;
  10. background-color: lightgrey;
  11. padding: 10px;
  12. height: 200px;
  13. }
  14. .flex-item {
  15. margin: 5px;
  16. background-color: lightblue;
  17. text-align: center;
  18. line-height: 50px; /* 垂直居中 */
  19. }
  20. .flex-item:nth-child(1) {
  21. flex-grow: 1;
  22. }
  23. .flex-item:nth-child(2) {
  24. flex-grow: 2;
  25. }
  26. .flex-item:nth-child(3) {
  27. flex-grow: 3;
  28. }
  29. </style>
  30. </head>
  31. <body>
  32. <div class="flex-container">
  33. <div class="flex-item">1</div>
  34. <div class="flex-item">2</div>
  35. <div class="flex-item">3</div>
  36. </div>
  37. </body>
  38. </html>

运行结果:

3.3 flex-shrink 

flex-shrink属性定义项目缩小比例,默认为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>Flex Shrink Example</title>
  7. <style>
  8. .flex-container {
  9. display: flex;
  10. width: 300px; /* 限制容器宽度 */
  11. background-color: lightgrey;
  12. padding: 10px;
  13. overflow: auto; /* 显示溢出内容 */
  14. }
  15. .flex-item {
  16. margin: 5px;
  17. background-color: lightblue;
  18. text-align: center;
  19. line-height: 50px; /* 垂直居中 */
  20. }
  21. .flex-item:nth-child(1) {
  22. flex-shrink: 1;
  23. }
  24. .flex-item:nth-child(2) {
  25. flex-shrink: 2;
  26. }
  27. .flex-item:nth-child(3) {
  28. flex-shrink: 3;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <div class="flex-container">
  34. <div class="flex-item">Item 1 (flex-shrink: 1)</div>
  35. <div class="flex-item">Item 2 (flex-shrink: 2)</div>
  36. <div class="flex-item">Item 3 (flex-shrink: 3)</div>
  37. </div>
  38. </body>
  39. </html>

运行结果:

3.4 flex-basis

flex-basis是CSS Flexbox布局中的一个属性,它定义了Flex容器中的子项(flex items)在主轴方向上的初始大小。这个属性决定了子项内容盒(content-box)的宽度或高度,具体取决于主轴的方向。

示例:

  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 Basis Example</title>
  7. <style>
  8. .flex-container {
  9. display: flex;
  10. justify-content: flex-start;
  11. border: 1px solid black;
  12. width: 700px;
  13. padding-left: 10px;
  14. }
  15. .flex-item {
  16. background-color: lightblue;
  17. margin: 5px;
  18. text-align: center;
  19. line-height: 50px; /* 垂直居中 */
  20. }
  21. .item1 {
  22. flex-basis: 100px;
  23. }
  24. .item2 {
  25. flex-basis: 200px;
  26. }
  27. .item3 {
  28. flex-basis: 300px;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <div class="flex-container">
  34. <div class="flex-item item1">Item 1</div>
  35. <div class="flex-item item2">Item 2</div>
  36. <div class="flex-item item3">Item 3</div>
  37. </div>
  38. </body>
  39. </html>

运行结果:

 

3.5 flex

用于设置一个元素的flex-growflex-shrink, 和 flex-basis。这三个属性共同决定了元素如何在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>Flexbox Example</title>
  7. <style>
  8. /* Flex container */
  9. .flex-container {
  10. display: flex;
  11. flex-wrap: wrap; /* Allow items to wrap to new lines */
  12. justify-content: space-between; /* Space between items */
  13. align-items: center; /* Center items vertically */
  14. background-color: #f2f2f2;
  15. padding: 10px;
  16. }
  17. /* Flex items */
  18. .flex-item {
  19. flex: 1 1 auto; /* flex-grow, flex-shrink, flex-basis */
  20. margin: 10px;
  21. padding: 20px;
  22. background-color: #66b3ff;
  23. color: white;
  24. text-align: center;
  25. border-radius: 5px;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <div class="flex-container">
  31. <div class="flex-item">Item 1</div>
  32. <div class="flex-item">Item 2</div>
  33. <div class="flex-item">Item 3</div>
  34. <div class="flex-item">Item 4</div>
  35. <div class="flex-item">Item 5</div>
  36. </div>
  37. </body>
  38. </html>

运行结果:

3.6 align-self

align-self属性是一个特别有用的属性,它允许你单独覆盖一个flex子项目的对齐方式,而不是依赖于父容器设置的align-items属性。align-self优先级高于align-items,并且只在设置了该属性的flex子项目上生效。

align-self属性接受以下值:

  1. auto: 默认值,等同于父元素的align-items值。如果父元素没有设置align-items,则等同于stretch
  2. flex-start: 子项目与容器的交叉轴起点对齐。
  3. flex-end: 子项目与容器的交叉轴终点对齐。
  4. center: 子项目在容器的交叉轴上居中对齐。
  5. baseline: 子项目按照它们的基线对齐。
  6. stretch:(默认值,如果align-itemsalign-self设置为auto)子项目将沿交叉轴方向拉伸以填满整个容器。

示例:

  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>Flexbox Example with align-self</title>
  7. <style>
  8. .flex-container {
  9. display: flex;
  10. justify-content: space-around;
  11. align-items: center; /* This will be overridden by align-self */
  12. height: 200px;
  13. background-color: #f2f2f2;
  14. }
  15. .flex-item {
  16. margin: 10px;
  17. padding: 20px;
  18. background-color: #66b3ff;
  19. color: white;
  20. text-align: center;
  21. border-radius: 5px;
  22. }
  23. /* Using align-self to override alignment for a specific item */
  24. .flex-item:nth-child(2) {
  25. align-self: flex-start; /* This item will start at the top */
  26. }
  27. .flex-item:nth-child(3) {
  28. align-self: flex-end; /* This item will end at the bottom */
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <div class="flex-container">
  34. <div class="flex-item">Item 1</div>
  35. <div class="flex-item">Item 2</div>
  36. <div class="flex-item">Item 3</div>
  37. </div>
  38. </body>
  39. </html>

运行结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/325610
推荐阅读
相关标签
  

闽ICP备14008679号