Blogger Information
Blog 10
fans 0
comment 0
visits 8685
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
flex项目尺寸的增长和缩小及PC端通用布局案例
天涯
Original
891 people have browsed it

flex项目尺寸的增长和缩小及PC端通用布局案例

flex项目尺寸的增长

flex项目的增长,使用flex-grow来实现。
使用前提:当flex项目总宽度或总高度小于父弹性盒子时使用

  1. 具体格式:
    1. .item{
    2. /*1为增长因子,可以为小数*/
    3. flex-grow:1;
    4. }
  2. 具体算法:
    参考代码:
  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. display: flex;
  11. }
  12. .container > .item {
  13. width: 60px;
  14. /*增长因子为0不放大*/
  15. flex-grow: 0;
  16. /*flex简写,=flex-grow:1,增长因子为1,根据剩余空间计算后放大1份*/
  17. flex: 1;
  18. /*auto自动,即默认为1*/
  19. flex: auto;
  20. }
  21. .container > .item:first-of-type {
  22. /* 第一个项目放大2份*/
  23. flex-grow: 2;
  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>

计算方法:

  1. 首先求出剩余空间大小,根据第9行width: 300px;、第13行width: 60px;,我们得出剩余空间大小为:300-60*3=120px。
  2. 根据项目总数算出每份大小值,根据代码得出项目因子总和,此案例中第一个项目的因子为2(从第21行、23行代码中得出),第二个项目和第三个项目的因子为1(从第19行代码得出),所以每份的大小值为:120/4=30px。
  3. 最后根据flex-grow的值计算出每个项目在原始尺寸的基础上再增长多少,如第23行代码flex-grow: 2;,即可以算出,第一个项目(.container > .item:first-of-type)的结果尺寸为:60px+(30px*2)=120px。

运行效果图:
flex增长因子

flex项目尺寸的缩小

flex项目的增长,使用flex-shrink来实现。
使用前提:当flex项目总宽度或总高度大于父弹性盒子时使用

  1. 具体格式:
    1. .item{
    2. /*1为缩小因子,可以为小数*/
    3. flex-shrink:1;
    4. }
  2. 具体算法:
    参考代码:

    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. display: flex;
    11. }
    12. .container > .item {
    13. /* 收缩因子有效的前提是, 所有项目宽度之和必须大于主轴上的当前空间大小 */
    14. width: 160px;
    15. /* 不收缩 */
    16. flex-shrink: 0;
    17. /* 收缩, 默认是1,允许收缩填充主轴全部空间 */
    18. /* 收缩因子之和:  1 + 1 +1 = 3 */
    19. /* 180 / 3 = 60,每个项目需要消化掉60 */
    20. flex-shrink: 1;
    21. }
    22. .container > .item:first-of-type {
    23. /* 收缩因子之和: 0.5 + 1 + 1 = 2.5 */
    24. /* 180px / 2.5 = 72px */
    25. /* 第一个项目: 160 - (72*0.5) = 124px */
    26. /* 第二个项目, 第三个项目: 160 -72 = 88px */
    27. flex-shrink: 0.5;
    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>

运行效果图:
flex项目缩小

计算方法与增长因子类似,只是基础值是因子的总宽度或总高度减去父元素宽度或高度值,份数计算方法一致。

重设项目的基础尺寸

flex项目的基础尺寸,使用flex-base来实现。

具体代码:

  1. flex-basis: 80px;

实现重新设置项目的尺寸,优先级高于项目的原始尺寸。

flex实现PC通用布局案例:

  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>PC通用布局</title>
  7. <style>
  8. /* 初始化 */
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. box-sizing: border-box;
  13. }
  14. a {
  15. color: #666;
  16. text-decoration: none;
  17. }
  18. /* 将body转为flex */
  19. body {
  20. min-width: 680px;
  21. display: flex;
  22. /* 主轴垂直方向,不换行 */
  23. flex-flow: column nowrap;
  24. }
  25. header,
  26. footer {
  27. height: 50px;
  28. border: 1px solid #000;
  29. }
  30. /* 将页眉转为flex */
  31. header {
  32. display: flex;
  33. /* 所有项目在交叉轴方向上居中显示 */
  34. align-items: center;
  35. }
  36. header > a {
  37. flex: 0 1 100px;
  38. text-align: center;
  39. }
  40. /* Logo */
  41. header > a:first-of-type {
  42. margin-right: 50px;
  43. }
  44. header > a:last-of-type {
  45. margin-left: auto;
  46. }
  47. /* 鼠标悬停时忽略logo */
  48. header > a:hover:not(:first-of-type) {
  49. color: coral;
  50. }
  51. .container {
  52. min-height: 400px;
  53. margin: 10px auto;
  54. display: flex;
  55. justify-content: center;
  56. }
  57. .container > aside,
  58. .container > main {
  59. border: 1px solid #000;
  60. padding: 10px;
  61. }
  62. .container > aside {
  63. flex: 0 0 200px;
  64. }
  65. .container > main {
  66. flex: 0 0 600px;
  67. margin: 0 10px;
  68. }
  69. footer {
  70. display: flex;
  71. flex-flow: column nowrap;
  72. text-align: center;
  73. }
  74. </style>
  75. </head>
  76. <body>
  77. <!-- 页眉 -->
  78. <header>
  79. <a href="">LOGO</a>
  80. <a href="">首页</a>
  81. <a href="">栏目1</a>
  82. <a href="">栏目2</a>
  83. <a href="">栏目3</a>
  84. <a href="">登录</a>
  85. </header>
  86. <!-- 主体 -->
  87. <div class="container">
  88. <!-- 左边栏 -->
  89. <aside>左边栏</aside>
  90. <!-- 主体内容区 -->
  91. <main>主体内容区</main>
  92. <!-- 右边栏 -->
  93. <aside>右边栏</aside>
  94. </div>
  95. <!-- 页脚 -->
  96. <footer>
  97. <p>
  98. php中文网 &copy;版权所有 &nbsp;&nbsp;(2018-2022) | 备案号:
  99. <a href="">皖ICP-1*********</a>
  100. </p>
  101. <p>中国.合肥市***** | 电话: 0551-888888**</p>
  102. </footer>
  103. </body>
  104. </html>

运行效果:
PC通用布局

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