博客列表 >Flex属性实例

Flex属性实例

Haggi的糖果屋
Haggi的糖果屋原创
2020年06月26日 18:23:12590浏览

一、复习内容

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>基于浮动的三列布局</title>
  7. <style>
  8. header,
  9. footer,
  10. aside,
  11. main {
  12. background-color: #dedede;
  13. }
  14. header,
  15. footer {
  16. height: 50px;
  17. }
  18. aside,
  19. main {
  20. min-height: 600px;
  21. }
  22. .wrap {
  23. width: 1000px;
  24. border: 1px solid #000000;
  25. overflow: hidden;
  26. margin: 10px auto;
  27. }
  28. aside {
  29. width: 200px;
  30. float: left;
  31. }
  32. main {
  33. width: 790px;
  34. float: right;
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. <header>页眉</header>
  40. <div class="wrap">
  41. <aside>侧边栏</aside>
  42. <main>主题内容</main>
  43. </div>
  44. <header>页尾</header>
  45. </body>
  46. </html>

运行图:

2.定位布局

  1. <style>
  2. header,
  3. footer,
  4. aside,
  5. main {
  6. background-color: #dedede;
  7. }
  8. header,
  9. footer {
  10. height: 50px;
  11. }
  12. aside,
  13. main {
  14. min-height: 600px;
  15. }
  16. .wrap {
  17. width: 1000px;
  18. border: 1px solid #000000;
  19. margin: 10px auto;
  20. /* 设置定位父级 */
  21. position: relative;
  22. min-height: 600px;
  23. }
  24. aside {
  25. width: 200px;
  26. position: absolute;
  27. /* 代码简化 */
  28. /* left: 0;
  29. top: 0; */
  30. min-height: inherit;
  31. }
  32. main {
  33. width: 790px;
  34. float: right;
  35. position: absolute;
  36. right: 0;
  37. /* 代码简化 */
  38. /* top: 0; */
  39. min-height: inherit;
  40. }

运行图:


二、多栏、多列显示

1.显示文章

  1. <div>
  2. 投入真金白银抢先布局 新能源车发展的底气来自这些“硬核”支撑12年过去了,邓承浩还记得2008年北京奥运会时,自己第一次在新闻中见到长安新能源车的场景。尽管目前新能源汽车市场仍处于恢复发展期,这位1986年出生的青年工程师依然坚信自己的判断:在建设汽车强国的征程中,新能源汽车将扮演愈来越重要的角色。今年以来,刺激汽车消费、助力产业升级早已成为社会各界关注的热门话题。在今年全国两会第二场“部长通道”中,工业和信息化部部长苗圩专门回答了关于新能源汽车发展的提问。他开出从供给侧、需求侧和使用侧三管齐下的药方,为新能源汽车发展“添柴加火”。
  3. </div>

2.设置样式:

  1. <style>
  2. * {
  3. padding: 0;
  4. margin: 0;
  5. box-sizing: border-box;
  6. }
  7. /* html {
  8. font-size: 18px;
  9. color: #555555;
  10. } */
  11. :root {
  12. font-size: 18px;
  13. color: #555555;
  14. }
  15. div {
  16. border: 1px solid #000;
  17. padding: 1rem;
  18. width: 60rem;
  19. margin: 30px auto;
  20. column-count: 3;
  21. column-width: auto;
  22. /* rem 字体宽度 */
  23. /* column-rule-style: solid;
  24. column-rule-width: 1px;
  25. column-rule-color: gray; */
  26. /* 样式 */
  27. column-rule: 1px solid lightgreen;
  28. }
  29. </style>

运行图:

3.布局页面


三、flex布局

1.将容器转为弹性盒子

  1. .container {
  2. width: 300px;
  3. /* 将容器转为弹性盒子 */
  4. display: flex;
  5. }

运行图:

2.设置子元素(弹性项目)

  1. .container > .item {
  2. /* 弹性盒子的子元素为弹性项目,支持任何元素,类型变为行内块 */
  3. /*flex: auto;*/
  4. width: 50px;
  5. }

运行图:

3.多行显示

  1. .container {
  2. /* 换行显示 */
  3. flex-wrap: wrap;
  4. }

运行图:

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. </head>
  8. <style>
  9. .container {
  10. width: 300px;
  11. display: flex;
  12. /* 控制所有项目在主轴上的对齐方式
  13. 设置容器中的剩余空间在
  14. 项目之间
  15. 的分配方案*/
  16. /* 1.在整体项目的两边进行分配 */
  17. /* 左对齐 */
  18. justify-content: flex-start;
  19. /* 右对齐 */
  20. justify-content: flex-end;
  21. /* 居中 */
  22. justify-content: center;
  23. /* 在各个项目之间进行分配 */
  24. /* 两端对齐 首尾元素不参与,其余项目左右分配剩余空间*/
  25. justify-content: space-between;
  26. /* 分散对齐 所有项目两端分配剩余空间,并且相等 */
  27. justify-content: space-around;
  28. /* 平均分配 */
  29. justify-content: space-evenly;
  30. }
  31. .container > .item {
  32. width: 60px;
  33. }
  34. </style>
  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">3</div>
  41. </div>
  42. </body>
  43. </html>

a.在整体项目的两边进行分配

左对齐-运行图:

右对齐-运行图:

居中-运行图:

b.在各个项目之间进行分配

两端对齐

分散对齐

平均分配

5.多行容器的对齐方式

设置为多行容器
flex-wrap: 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>多行容器的对齐方式</title>
  7. </head>
  8. <style>
  9. .container {
  10. width: 300px;
  11. display: flex;
  12. /* 设置为多行容器 */
  13. flex-wrap: wrap;
  14. height: 150px;
  15. /* 多行容器排列 */
  16. /* stretch为默认值 */
  17. align-content: stretch;
  18. /* 1.在整体项目的两边进行分配 */
  19. align-content: flex-start;
  20. align-content: flex-end;
  21. align-content: center;
  22. /* 项目之间 */
  23. align-content: space-between;
  24. /* 分散对齐 所有项目两端分配剩余空间,并且相等 */
  25. align-content: space-around;
  26. /* 平均分配 */
  27. align-content: space-evenly;
  28. }
  29. .container > .item {
  30. width: 60px;
  31. }
  32. </style>
  33. <body>
  34. <div class="container">
  35. <div class="item">1</div>
  36. <div class="item">2</div>
  37. <div class="item">3</div>
  38. <div class="item">4</div>
  39. <div class="item">5</div>
  40. <div class="item">6</div>
  41. <div class="item">7</div>
  42. <div class="item">8</div>
  43. </div>
  44. </body>
  45. </html>

默认值:stretch

上对齐

下对齐

居中

两端对齐

分散对齐

平均分配

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. .container {
  9. width: 300px;
  10. height: 150px;
  11. display: flex;
  12. /* 控制主轴方向,默认为行 */
  13. flex-direction: column;
  14. /* 1.在整体项目的两边进行分配 */
  15. justify-content: flex-start;
  16. justify-content: flex-end;
  17. justify-content: center;
  18. /* 项目之间 */
  19. justify-content: space-between;
  20. /* 分散对齐 所有项目两端分配剩余空间,并且相等 */
  21. justify-content: space-around;
  22. /* 平均分配 */
  23. justify-content: space-evenly;
  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>

上对齐-运行图:

下对齐-运行图:

居中-运行图:

两端对齐

分散对齐

平均分配

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. .container {
  9. width: 300px;
  10. height: 150px;
  11. display: flex;
  12. /* 项目在交叉轴上是自动伸缩的 */
  13. align-items: stretch;
  14. align-items: flex-start;
  15. align-items: flex-end;
  16. align-items: center;
  17. }
  18. .container > .item {
  19. width: 60px;
  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>
  29. </body>
  30. </html>

默认值:strench

上对齐:

下对齐:

居中:

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

flex-direction: row; flex-wrap: nowrap;
等同于简写
flex-flow: row nowrap;

9.实战:利用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. * {
  9. padding: 0;
  10. margin: 0;
  11. box-sizing: border-box;
  12. }
  13. :root {
  14. font-size: 20px;
  15. }
  16. a {
  17. text-decoration: none;
  18. color: #ccc;
  19. }
  20. nav,
  21. footer {
  22. height: 50px;
  23. background-color: #333;
  24. padding: 0 50px;
  25. display: flex;
  26. }
  27. nav a,
  28. footer {
  29. height: inherit;
  30. line-height: 50px;
  31. padding: 0 15px;
  32. }
  33. nav a:hover {
  34. background-color: lime;
  35. color: white;
  36. }
  37. nav a:last-of-type {
  38. margin-left: auto;
  39. }
  40. .container {
  41. width: 900px;
  42. display: flex;
  43. margin: 10px auto;
  44. }
  45. .container > aside {
  46. width: 300px;
  47. background-color: mediumpurple;
  48. height: 600px;
  49. }
  50. .container > main {
  51. width: 780px;
  52. background-color: mediumspringgreen;
  53. }
  54. </style>
  55. </head>
  56. <body>
  57. <nav>
  58. <a href="">首页</a>
  59. <a href="">教学视频</a>
  60. <a href="">社区问答</a>
  61. <a href="">登录/注册</a>
  62. </nav>
  63. <div class="container">
  64. <aside>左边</aside>
  65. <main>中间</main>
  66. <aside>右边</aside>
  67. </div>
  68. <footer>www.php.cn</footer>
  69. </body>
  70. </html>

运行图:

10.order属性控制项目排列书序及实战案例

  1. <style>
  2. .container {
  3. width: 300px;
  4. display: flex;
  5. }
  6. .container > .item {
  7. width: 60px;
  8. }
  9. .container > .item:first-of-type {
  10. order: 3;
  11. }
  12. </style>

运行图:

案列:

  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>order小案例</title>
  7. </head>
  8. <style>
  9. .container {
  10. width: 300px;
  11. display: flex;
  12. flex-direction: column;
  13. }
  14. .container > .item {
  15. border: 1px solid #000000;
  16. padding: 10px;
  17. display: flex;
  18. position: relative;
  19. }
  20. .container > .item > div {
  21. display: flex;
  22. }
  23. </style>
  24. <body>
  25. <div class="container">
  26. <div class="item">
  27. 1
  28. <div>
  29. <button onclick="up(this)">up</button>
  30. <button onclick="down(this)">down</button>
  31. </div>
  32. </div>
  33. <div class="item">
  34. 2
  35. <div>
  36. <button onclick="up(this)">up</button>
  37. <button onclick="down(this)">down</button>
  38. </div>
  39. </div>
  40. <div class="item">
  41. 3
  42. <div>
  43. <button onclick="up(this)">up</button>
  44. <button onclick="down(this)">down</button>
  45. </div>
  46. </div>
  47. </div>
  48. </body>
  49. <script>
  50. let up = (ele) => (ele.offsetParent.style.order -= 1);
  51. let down = (ele) => (ele.offsetParent.style.order += 1);
  52. </script>
  53. </html>

运行图:

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