Blogger Information
Blog 32
fans 0
comment 0
visits 27674
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
css基础之flex布局
Yang_Sir
Original
990 people have browsed it

flex布局

1.什么是flex

  • flex 是 Flexible Box 的缩写,意为弹性布局
  • flex布局中把一个元素作为容器,容器中的子元素称为项目
  • 可以通过容器的flex属性,设置所有项目的排列样式。也可以通过项目的flex属性,设置指定项目的排列样式。

2.flex布局的方向

  • flex布局项目的排列方向可以有两个维度,一水平,二垂直
  • 项目排列方向称为主轴,与主轴垂直的方向叫交叉轴
  • 在每个轴上有两个方向,从左至右,从右到左;从上到下,从下到上。

2.1 flex水平布局

  • 在水平维度,默认方向是从左至右
  • 可以通过 flex-direction:row-reverse设置为从右到左排列
  1. <style>
  2. header {
  3. background-color: skyblue;
  4. }
  5. .nav-container {
  6. display: flex;
  7. flex-directionrow;
  8. flex-directionrow-reverse;
  9. }
  10. </style>
  11. <header>
  12. <nav>
  13. <ul class="nav-container">
  14. <li class=""><img src="" alt="LOGO" /></li>
  15. <li class=""><a href="">导航1</a></li>
  16. <li class=""><a href="">导航2</a></li>
  17. <li class=""><a href="">导航3</a></li>
  18. <li class=""><a href="">导航4</a></li>
  19. </ul>
  20. </nav>
  21. </header>

效果图:
1).默认方向,从左至右

2).反方向

2.2 垂直布局

  1. <style>
  2. header {
  3. background-color: skyblue;
  4. }
  5. .nav-container {
  6. display: flex;
  7. flex-directioncolumn;
  8. flex-directionrow-reverse;
  9. }
  10. </style>
  11. <header>
  12. <nav>
  13. <ul class="nav-container">
  14. <li class=""><img src="" alt="LOGO" /></li>
  15. <li class=""><a href="">导航1</a></li>
  16. <li class=""><a href="">导航2</a></li>
  17. <li class=""><a href="">导航3</a></li>
  18. <li class=""><a href="">导航4</a></li>
  19. </ul>
  20. </nav>
  21. </header>

效果图:
1).默认方向,从上到下

2).反方向

3. 容器内项目换行

  • 通过flex-wrap属性,设置项目在容器内是否可以换行,默认不允许换行。
  • 不换行的称为单行容器,换行的称为多行容器
  • 也可以通过flex-flow属性同时设置容器主轴方向和是否换行(推荐使用)
  1. <style>
  2. .content {
  3. border-style: groove;
  4. width: 150px;
  5. height: 80px;
  6. margin-top: 10px;
  7. }
  8. main > section {
  9. width: 600px;
  10. display: flex;
  11. border-style: dotted;
  12. flex-flow: row nowrap;/*水平方向,不允许换行*/
  13. flex-flow: row wrap;/*水平方向,允许换行*/
  14. }
  15. </style>
  16. <main>
  17. <section>
  18. <div class="content">
  19. <p>我是段落01</p>
  20. </div>
  21. <div class="content">
  22. <p>我是段落02</p>
  23. </div>
  24. <div class="content">
  25. <p>我是段落03</p>
  26. </div>
  27. <div class="content">
  28. <p>我是段落04</p>
  29. </div>
  30. <div class="content">
  31. <p>我是段落05</p>
  32. </div>
  33. <div class="content">
  34. <p>我是段落06</p>
  35. </div>
  36. <div class="content">
  37. <p>我是段落07</p>
  38. </div>
  39. </section>
  40. </main>

效果图:
1).默认不允许换行,项目被压缩

2).允许换行,当剩余宽度不足容纳一个项目块时,就换行

4.项目对齐

4.1 主轴线上项目对齐

  • justify-content属性,设置主轴线上的项目对齐方式。只有当容器主轴线上有剩余空间时才生效
  1. <style>
  2. .content {
  3. border-style: groove;
  4. width: 150px;
  5. height: 80px;
  6. margin-top: 10px;
  7. }
  8. main > section {
  9. width: 600px;
  10. display: flex;
  11. border-style: dotted;
  12. flex-flow: row wrap;/*水平方向,允许换行*/
  13. justify-content: center;
  14. justify-content: flex-end;
  15. justify-content: space-evenly;
  16. }
  17. </style>
  18. <main>
  19. <section>
  20. <div class="content">
  21. <p>我是段落01</p>
  22. </div>
  23. <div class="content">
  24. <p>我是段落02</p>
  25. </div>
  26. <div class="content">
  27. <p>我是段落03</p>
  28. </div>
  29. <div class="content">
  30. <p>我是段落04</p>
  31. </div>
  32. <div class="content">
  33. <p>我是段落05</p>
  34. </div>
  35. <div class="content">
  36. <p>我是段落06</p>
  37. </div>
  38. <div class="content">
  39. <p>我是段落07</p>
  40. </div>
  41. </section>
  42. </main>

示例:
1).居中对齐

2).靠终止边对齐

3).平分对齐

4.2 交叉轴上项目对齐

  • align-items属性,适用于单行容器
  • align-content属性,适用于多行容器
  • 交叉轴上的项目对齐,在交叉轴上有剩余空间才有意义

4.2.1 交叉轴上单行容器对齐

  1. <style>
  2. .content {
  3. border-style: groove;
  4. width: 150px;
  5. height: 80px;
  6. margin-top: 10px;
  7. }
  8. main > section {
  9. width: 600px;
  10. height: 180px;
  11. display: flex;
  12. border-style: dotted;
  13. flex-flow: row nowrap;
  14. align-items: center; /*交叉轴 居中对齐 */
  15. align-items: flex-end; /* 交叉轴终止边对齐 */
  16. }
  17. </style>
  18. <main>
  19. <section>
  20. <div class="content">
  21. <p>我是段落01</p>
  22. </div>
  23. <div class="content">
  24. <p>我是段落02</p>
  25. </div>
  26. <div class="content">
  27. <p>我是段落03</p>
  28. </div>
  29. </main>

1).交叉轴居中对齐

2).交叉轴靠终止边对齐

4.2.2 交叉轴上多行容器对齐

  1. <style>
  2. .content {
  3. border-style: groove;
  4. width: 120px;
  5. height: 80px;
  6. margin-top: 10px;
  7. }
  8. main > section {
  9. width: 600px;
  10. height: 280px;
  11. display: flex;
  12. border-style: dotted;
  13. flex-flow: row wrap;
  14. align-content: center; /*交叉轴 居中对齐 */
  15. align-content: flex-end; /*交叉轴终止边对齐 */
  16. }
  17. </style>
  18. <main>
  19. <section>
  20. <div class="content">
  21. <p>我是段落01</p>
  22. </div>
  23. <div class="content">
  24. <p>我是段落02</p>
  25. </div>
  26. <div class="content">
  27. <p>我是段落03</p>
  28. </div>
  29. <div class="content">
  30. <p>我是段落04</p>
  31. </div>
  32. <div class="content">
  33. <p>我是段落05</p>
  34. </div>
  35. <div class="content">
  36. <p>我是段落06</p>
  37. </div>
  38. <div class="content">
  39. <p>我是段落07</p>
  40. </div>
  41. </section>
  42. </main>

1).交叉轴居中对齐

2).交叉轴靠终止边对齐

5.项目在交叉轴上的单独对齐

  • align-self属性,可以单独设置项目在交叉轴上的对齐
  • 如果多行容器设置了align-content,项目align-self属性失效
    1. <style>
    2. .content {
    3. border-style: groove;
    4. width: 120px;
    5. height: 80px;
    6. margin-top: 10px;
    7. }
    8. .content:last-of-type {
    9. align-self: flex-end;
    10. }
    11. main > section {
    12. width: 600px;
    13. height: 280px;
    14. display: flex;
    15. border-style: dotted;
    16. flex-flow: row wrap;
    17. /* align-content: center; */
    18. align-items: center; /*交叉轴 居中对齐 */
    19. }
    20. </style>
    21. <main>
    22. <section>
    23. <div class="content">
    24. <p>我是段落01</p>
    25. </div>
    26. <div class="content">
    27. <p>我是段落02</p>
    28. </div>
    29. <div class="content">
    30. <p>我是段落03</p>
    31. </div>
    32. <div class="content">
    33. <p>我是段落04</p>
    34. </div>
    35. <div class="content">
    36. <p>我是段落05</p>
    37. </div>
    38. <div class="content">
    39. <p>我是段落06</p>
    40. </div>
    41. <div class="content">
    42. <p>我是段落07</p>
    43. </div>
    44. </section>
    45. </main>

6.项目的缩放

  • flex-grow属性,设置项目的放大系数,默认0,不放大。
  • 在容器主轴上存在剩余空间时,flex-grow才有意义
  • 放大时,按各项目的放大系数在系数和中占的比例分配剩余空间
  • flex-shrink属性,设置项目的缩小系数,默认1,允许缩小。
  • 当容器主轴 “空间不足” 且 “禁止换行” 时,flex-shrink才有意义
  • 缩小时,按各项目的缩小系数在系数和中占的比例缩小超出容器的空间
  • flex-basis属性,设置flex 元素在主轴方向上的初始大小
  • 项目缩放的简写:flex: flex-grow flex-shrink flex-basis
  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. body {
  9. width: 800px;
  10. height: 2000px;
  11. display: flex;
  12. flex-flow: column wrap;
  13. align-items: center;
  14. margin: auto;
  15. }
  16. /* * {
  17. outline-style: groove;
  18. } */
  19. header {
  20. background-color: skyblue;
  21. }
  22. nav {
  23. width: 800px;
  24. margin: auto;
  25. }
  26. .nav-container {
  27. display: flex;
  28. justify-content: space-around;
  29. }
  30. li {
  31. list-style-type: none;
  32. }
  33. ol > li {
  34. list-style-type: decimal;
  35. }
  36. .container {
  37. width: 800px;
  38. display: flex;
  39. justify-content: space-between;
  40. }
  41. aside {
  42. /* */
  43. flex: 1 1 200px;
  44. margin-right: 5%;
  45. }
  46. main {
  47. flex: 3 1 auto;
  48. }
  49. .content {
  50. border-style: groove;
  51. width: 120px;
  52. height: 80px;
  53. margin-top: 10px;
  54. flex: 1 0 100px;
  55. }
  56. /*.content:last-of-type {
  57. flex: 1 1 80px;
  58. }
  59. .content:nth-of-type(6) {
  60. flex: 2 1 80px;
  61. }*/
  62. main > section {
  63. width: 600px;
  64. height: 280px;
  65. display: flex;
  66. flex-flow: row wrap;
  67. /* align-content: center; */
  68. align-items: center; /*交叉轴 居中对齐 */
  69. }
  70. p {
  71. margin: auto;
  72. text-align: center;
  73. }
  74. footer {
  75. width: inherit;
  76. height: 80px;
  77. background-color: #ffff80;
  78. }
  79. </style>
  80. </head>
  81. <body>
  82. <header>
  83. <nav>
  84. <ul class="nav-container">
  85. <li class=""><img src="" alt="LOGO" /></li>
  86. <li class=""><a href="">导航1</a></li>
  87. <li class=""><a href="">导航2</a></li>
  88. <li class=""><a href="">导航3</a></li>
  89. <li class=""><a href="">导航4</a></li>
  90. </ul>
  91. </nav>
  92. </header>
  93. <div class="container">
  94. <aside>
  95. <!-- <h3>排行榜</h3> -->
  96. <ol>
  97. <li><a href="">排名1</a></li>
  98. <li><a href="">排名2</a></li>
  99. <li><a href="">排名3</a></li>
  100. <li><a href="">排名4</a></li>
  101. <li><a href="">排名5</a></li>
  102. <li><a href="">排名6</a></li>
  103. <li><a href="">排名7</a></li>
  104. <li><a href="">排名8</a></li>
  105. <li><a href="">排名9</a></li>
  106. <li><a href="">排名10</a></li>
  107. </ol>
  108. </aside>
  109. <main>
  110. <section>
  111. <div class="content">
  112. <p>我是段落01</p>
  113. </div>
  114. <div class="content">
  115. <p>我是段落02</p>
  116. </div>
  117. <div class="content">
  118. <p>我是段落03</p>
  119. </div>
  120. <div class="content">
  121. <p>我是段落04</p>
  122. </div>
  123. <div class="content">
  124. <p>我是段落05</p>
  125. </div>
  126. <div class="content">
  127. <p>我是段落06</p>
  128. </div>
  129. <div class="content">
  130. <p>我是段落07</p>
  131. </div>
  132. </section>
  133. </main>
  134. </div>
  135. <footer>
  136. <section>
  137. <p>底部导航</p>
  138. </section>
  139. </footer>
  140. </body>
  141. </html>

7. 课程总结

  • flex布局可以把每一个元素都设成一个容器,它的子元素是他的项目,同时它又是其父级的项目。
  • 通过设置项目在容器主轴和交叉轴的排列方式来实现元素的定位
  • 通过容器内项目的缩放设置,使显示页面可以很好的适应可视窗口的变化
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:仔细想一下, flex其实挺简单的, 不是吗?
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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!