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

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

天涯
天涯原创
2020年06月25日 09:59:57897浏览

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通用布局

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