Blogger Information
Blog 14
fans 0
comment 2
visits 12663
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
flex 布局
JKY辉哥
Original
719 people have browsed it

flex 布局

  • 1. flex 基础

    • 1.1. flex 布局是什么?

      Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。

    • 1.2. flex 特点
      • flex 布局没有方向性
      • flex 布局空间自由分配, 自动对齐
      • flex 仅适用于简单的线性布局
    • 1.3. Flex 基本概念

      采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。

    flex

    容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
    项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

  • 2. flex 属性

  • 2.1 flex 容器

可以将任一元素添加display:flex属性转为 flex 容器

允许应用到 flex 容器上的 6 个属性

序号 描述 属性/值
1 方向 flex-direction:row/column/row-reverse/column-reverse
2 换行 flex-wrap: wrap/nowrap/wrap-reverse
3 flex-flow 上面 2 个的简写 flex-flow: flex-direction, flex-wrap
4 主轴的对齐方向 justify-content:center/flex-start/flex-end/space-around/space-between
5 侧轴的对齐方向 align-items:center/flex-end/flex-start/stretch/baseline
6 多行列的对齐方向 align-content

2.2 flex 项目(item)

序号 描述 属性/值
1 增长比例 flex-grow
2 缩减比例 flex-shrink
3 默认大小 flex-basis
4 上述三者简写 flex
5 项目顺序 order
6 自身对齐方式 align-self
  • 3. FlexBox 弹性盒布局案例

  • 3.1 FlexBox 弹性盒布局快速预览案例代码

  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弹性盒布局快速预览</title>
  7. <style>
  8. /* 弹性盒子,要用火狐浏览器查看 */
  9. .container {
  10. width: 300px;
  11. /* 如果这个容器中的内容要使用flexBox布局, 第一步就是必须将这个容器转为弹性盒子 */
  12. display: flex;
  13. }
  14. .container > .item {
  15. /* 一旦将父元素转为弹性容器,内部的“子元素”就会自动成为: 弹性项目 */
  16. /* 不管这个项目标签之前是什么类型,统统转为“行内块” */
  17. /* 行内:全部在一排显示 */
  18. /* 块: 可以设置宽和高 */
  19. /* 设置弹性项目空间平分分配,进行平均缩放,如果没有定义,可能会有剩余空间 */
  20. /* flex: auto; */
  21. /* 设置每个弹性项目宽度和高度 */
  22. width: 40px;
  23. height: 30px;
  24. }
  25. </style>
  26. </head>
  27. <body>
  28. <!-- .container>.item{$}*3 -->
  29. <div class="container">
  30. <div class="item">1</div>
  31. <div class="item">2</div>
  32. <div class="item">3</div>
  33. <div class="item">4</div>
  34. <div class="item">5</div>
  35. </div>
  36. </body>
  37. </html>

快速flex布局

  • 3.2 FlexBox 弹性盒多行容器案例代码
  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弹性盒多行容器</title>
  7. <style>
  8. .container {
  9. width: 300px;
  10. /* 弹性容器 */
  11. display: flex;
  12. }
  13. .container > .item {
  14. /* 通过改变弹性项目宽度查看换行属性,默认不换行 */
  15. width: 60px;
  16. width: 120px;
  17. width: 150px;
  18. }
  19. /* 换行显示:flex-wrap:wrap ,转换为多行容器*/
  20. .container {
  21. flex-wrap: wrap;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <!-- .container>.item{$}*3 -->
  27. <div class="container">
  28. <div class="item">1</div>
  29. <div class="item">2</div>
  30. <div class="item">3</div>
  31. <div class="item">4</div>
  32. <div class="item">5</div>
  33. </div>
  34. </body>
  35. </html>

多行容器

  • 3.3FlexBox 单行容器中的项目对齐方式代码案例
  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. .container {
  9. /* 转为弹性盒 */
  10. display: flex;
  11. width: 300px;
  12. /* justify-content: 控制所有项目在主轴上的对齐方式; */
  13. /* 本质是:设置容器中的剩余空间在所有 “项目之间”的分配方案 */
  14. /* 1. 容器剩余空间在所有项目“二边”的如何分配 ,将全部项目视为一个整体*/
  15. justify-content: flex-start;
  16. justify-content: flex-end;
  17. justify-content: center;
  18. /* 2. 容器剩余空间在所有项目“之间”的如何分配 ,将项目视为一个个独立的个体*/
  19. /* 弹性项目两端对齐 */
  20. justify-content: space-between;
  21. /* 分散对齐: 剩余空间在所有项目二侧平均分配 */
  22. justify-content: space-around;
  23. /* 平均对齐分配空间 */
  24. justify-content: space-evenly;
  25. }
  26. .container > .item {
  27. /* 设置每个弹性项目宽度 */
  28. width: 60px;
  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>
  38. </body>
  39. </html>

单行容器对齐方式

  • 3.4 FlexBox 多行容器中的项目对齐方式演示代码
  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. .container {
  9. /* 转为弹性盒 */
  10. width: 300px;
  11. display: flex;
  12. /* 多行容器 */
  13. flex-wrap: wrap;
  14. height: 150px;
  15. /* align-content: 设置多行容器中的项目排列; */
  16. /* 1. 容器剩余空间在所有项目“二边”的如何分配 ,将全部项目视为一个整体*/
  17. /* 默认值 */
  18. align-content: stretch;
  19. /* 从顶部左侧开始排列 */
  20. align-content: flex-start;
  21. /* 从底部部右侧开始排列 */
  22. align-content: flex-end;
  23. /* 居中排列 */
  24. align-content: center;
  25. /* 2. 容器剩余空间在所有项目“之间”的如何分配 ,将项目视为一个个独立的个体*/
  26. /* 两端对齐 */
  27. align-content: space-between;
  28. /* 分散对齐 */
  29. align-content: space-around;
  30. /* 平均分配对齐 */
  31. align-content: space-evenly;
  32. }
  33. .container > .item {
  34. /* 设置每个弹性项目宽度 */
  35. width: 60px;
  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 class="item">5</div>
  46. <div class="item">6</div>
  47. <div class="item">7</div>
  48. <div class="item">8</div>
  49. </div>
  50. </body>
  51. </html>

多行容器对齐方式

  • 3.5 FlexBox 主轴为垂直方向时的项目排列案例代码
  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. .container {
  9. /* 转为弹性盒 */
  10. width: 300px;
  11. height: 150px;
  12. display: flex;
  13. /* 主轴方向:默认为行 */
  14. flex-direction: row;
  15. flex-direction: column;
  16. /* 项目二边分配 */
  17. justify-content: flex-start;
  18. justify-content: flex-end;
  19. justify-content: center;
  20. /* 项目之间分配 */
  21. justify-content: space-between;
  22. justify-content: space-around;
  23. justify-content: space-evenly;
  24. }
  25. .container > .item {
  26. /* 设置每个弹性项目宽度 */
  27. /* width: 60px; */
  28. }
  29. </style>
  30. </head>
  31. <body>
  32. <div class="container">
  33. <div class="item">1</div>
  34. <div class="item">2</div>
  35. <div class="item">3</div>
  36. </div>
  37. </body>
  38. </html>

主轴为垂直方向时的项目排列

  • 3.6 FlexBox 项目在交叉轴上的排列演示代码
  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. .container {
  9. /* 转为弹性盒 */
  10. display: flex;
  11. width: 300px;
  12. height: 200px;
  13. /* 项目在交叉轴上默认是自动伸缩的 */
  14. /* 默认值 */
  15. align-items: stretch;
  16. /* 项目交叉轴排列 */
  17. align-items: flex-start;
  18. align-items: flex-end;
  19. align-items: center;
  20. }
  21. .container > .item {
  22. /* 设置每个弹性项目宽度 */
  23. width: 60px;
  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>
  33. </body>
  34. </html>

项目在交叉轴上的排列

  • 3.7 FlexBox 主轴方向与项目排列的简写演示代码
  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. .container {
  9. /* 转为弹性盒 */
  10. display: flex;
  11. width: 300px;
  12. height: 50px;
  13. /* 默认值就不用写出来 */
  14. /* 默认对齐方式 */
  15. /* flex-direction: row; */
  16. /* 禁止换行 */
  17. /* flex-wrap: nowrap; */
  18. /* 提换上面两行代码简写 */
  19. /* flex-flow: row nowrap; */
  20. /* 按列排列,可以设置换行和不换行(nowrap/wrap),换行就是多行容器 */
  21. flex-flow: column wrap;
  22. }
  23. .container > .item {
  24. /* 设置每个弹性项目宽度 */
  25. width: 60px;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <div class="container">
  31. <div class="item">1</div>
  32. <div class="item">2</div>
  33. <div class="item">3</div>
  34. <div class="item">4</div>
  35. <div class="item">5</div>
  36. </div>
  37. </body>
  38. </html>

主轴方向与项目排列的简写

  • 3.8 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>flex容器属性实战:快速撸一个主导航</title>
  7. <style>
  8. * {
  9. padding: 0;
  10. margin: 0;
  11. box-sizing: border-box;
  12. }
  13. a {
  14. text-decoration: none;
  15. color: #ccc;
  16. }
  17. nav {
  18. height: 40px;
  19. line-height: 40px;
  20. background-color: #333;
  21. padding: 0 50px;
  22. /* 转换为弹性盒布局 */
  23. display: flex;
  24. }
  25. nav a {
  26. height: inherit;
  27. line-height: 40px;
  28. padding: 0px 15px;
  29. }
  30. nav a:hover {
  31. background-color: seagreen;
  32. color: white;
  33. }
  34. /* 登录/注册放在最右边 */
  35. nav a:last-of-type {
  36. margin-left: auto;
  37. }
  38. </style>
  39. </head>
  40. <body>
  41. <header>
  42. <nav>
  43. <a href="">首页</a>
  44. <a href="">HTML</a>
  45. <a href="">CSS</a>
  46. <a href="">JavaScript</a>
  47. <a href="">PHP</a>
  48. <a href="">登录/注册</a>
  49. </nav>
  50. </header>
  51. </body>
  52. </html>

快速撸一个主导航

  • 4. 总结

  • 传统布局: 基于浮动(float)与定位(position),flex 弹性布局: 灵活,强大,简单,直观
  • 可以将任一元素添加display:flex属性转为 flex 容器
  • 中间主体占据全部剩余空间 flex-grow: 1;
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:这个图很经典, 但却搞得有点复杂, 我是不太建议大家看的, 只要记住项目必须没主轴排列,且默认可自动收缩就可以了
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