博客列表 >移动端布局详解/实例演示

移动端布局详解/实例演示

汇享科技
汇享科技原创
2022年07月16日 11:36:19358浏览

移动端布局原理

三大视口

  1. 布局视口:面向开发者和设备没有关系 默认980px 使用width表示
  2. 视觉视口:设备硬件的显示窗口就是视觉视口用device-width表示
  3. 理想视口:可以不用缩放就可以看到所有内容的视口就是理想视口/相当于:布局视口 = 视觉视口

所以一开始可以直接使用理想视口进行布局 不需要缩放不需要拖动 原比例显示initial-scale=1.0

布局三部曲

  1. 设置根元素字号为动态值 定义一个可以根据宽高进行缩放的大小
  2. 在body中将字号重置
  3. 使用rem进行布局

怎么设置根元素字号为动态的呢

通常设计师会给一个设计稿 有一个通用的公认的稿宽375px
这个375也就是设备上的视觉视口也就相当于100vw == 375px
在这个基础上进行运算

  1. 1个vw是多少
    1vw = 100vw/100 = 375px/100 =3.75px
    可以这样理解1个vw == 3.75px
  2. 1个rem是多少
    假设人为设置跟字号为100px
    那么此时1rem=100px
    那么1rem设置为100px是否合适呢
    如果1rem设置为一个绝对值 那么就会失去响应布局的条件 根据vw公示来看
    如果设备宽度是414呢
    414/3.75 == 110.4px 那么此时1个rem应该等于110.4
    但是这个414始终都是100vw 375也是100vw 395也是100vw
    那么就可以使用vw来动态的表示rem的值实现移动端布局
    正常来写的话:
    1. html{
    2. /*此种方案肯定是不行的不能设置为绝对值
    3. 可以通过一个函数calc来动态计算*/
    4. font-size:100px;
    5. font-size:calc(100vw/3.75)
    6. /*那么此时 不管设备宽度是414还是375还是395还是多少都是自动计算
    7. 100vw=414px 375px 用100vw/3.75 可以动态控制跟字号大小*/
    8. }
    实例演示:
    效果图:
  • html代码部分

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8" />
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    7. <title>淘宝首页实例演示移动端布局</title>
    8. <link rel="stylesheet" href="static/css/demo1.css" />
    9. </head>
    10. <body>
    11. <header>sxx</header>
    12. <main>
    13. <div class="nav">
    14. <a href="">
    15. <img src="static/images/a.jpg" alt="" />
    16. <p>天猫新品</p>
    17. </a>
    18. <a href="">
    19. <img src="static/images/a.jpg" alt="" />
    20. <p>天猫新品</p>
    21. </a>
    22. <a href="">
    23. <img src="static/images/a.jpg" alt="" />
    24. <p>天猫新品</p>
    25. </a>
    26. <a href="">
    27. <img src="static/images/a.jpg" alt="" />
    28. <p>天猫新品</p>
    29. </a>
    30. <a href="">
    31. <img src="static/images/a.jpg" alt="" />
    32. <p>天猫新品</p>
    33. </a>
    34. <a href="">
    35. <img src="static/images/a.jpg" alt="" />
    36. <p>天猫新品</p>
    37. </a>
    38. <a href="">
    39. <img src="static/images/a.jpg" alt="" />
    40. <p>天猫新品</p>
    41. </a>
    42. <a href="">
    43. <img src="static/images/a.jpg" alt="" />
    44. <p>天猫新品</p>
    45. </a>
    46. <a href="">
    47. <img src="static/images/a.jpg" alt="" />
    48. <p>天猫新品</p>
    49. </a>
    50. <a href="">
    51. <img src="static/images/a.jpg" alt="" />
    52. <p>天猫新品</p>
    53. </a>
    54. </div>
    55. </main>
    56. <footer>xxx</footer>
    57. </body>
    58. </html>
  • css部分
  1. * {
  2. padding: 0;
  3. margin: 0;
  4. box-sizing: border-box;
  5. }
  6. a {
  7. text-decoration: none;
  8. }
  9. /*
  10. 三大视口
  11. 1.布局视口:面向开发者和设备没有关系 默认980px 使用width表示
  12. 2.视觉视口:设备硬件的显示窗口就是视觉视口用device-width表示
  13. 3.理想视口:可以不用缩放就可以看到所有内容的视口就是理想视口/相当于:布局视口 = 视觉视口
  14. 所以一开始可以直接使用理想视口进行布局 不需要缩放不需要拖动 原比例显示initial-scale=1.0
  15. */
  16. /*
  17. 布局三部曲
  18. 1.设置根元素字号为动态值 定义一个可以根据宽高进行缩放的大小
  19. 2.在body中将字号重置
  20. 3.使用rem进行布局
  21. */
  22. /*怎么设置根元素字号为动态的呢*/
  23. /*
  24. 通常设计师会给一个设计稿 有一个通用的公认的稿宽375px
  25. 这个375也就是设备上的视觉视口也就相当于100vw == 375px
  26. 在这个基础上进行运算
  27. 1个vw是多少
  28. 1vw = 100vw/100 = 375px/100 =3.75px
  29. 可以这样理解1个vw == 3.75px
  30. 1个rem是多少
  31. 假设人为设置跟字号为100px
  32. 那么此时1rem=100px
  33. 那么1rem设置为100px是否合适呢
  34. 如果1rem设置为一个绝对值 那么就会失去响应布局的条件 根据vw公示来看
  35. 如果设备宽度是414呢
  36. 414/3.75 == 110.4px 那么此时1个rem应该等于110.4
  37. 但是这个414始终都是100vw 375也是100vw 395也是100vw
  38. 那么就可以使用vw来动态的表示rem的值实现移动端布局
  39. 正常来写的话:
  40. html{
  41. font-size:100px;
  42. 此种方案肯定是不行的不能设置为绝对值
  43. 可以通过一个函数calc来动态计算
  44. font-size:calc(100vw/3.75)
  45. 那么此时 不管设备宽度是414还是375还是395还是多少都是自动计算
  46. 100vw=414px 375px 用100vw/3.75 可以动态控制跟字号大小
  47. }
  48. */
  49. /* 1.动态设置跟字号 */
  50. html {
  51. font-size: calc(100vw / 3.75);
  52. }
  53. /* 2.在body中重置跟字号 */
  54. body {
  55. font-size: 16px;
  56. background-color: #f4f4f4;
  57. }
  58. /* 3.通过rem来进行布局 */
  59. header {
  60. height: 0.5rem;
  61. width: 100vw;
  62. /* background-color: #ccc; */
  63. }
  64. main {
  65. width: 100vw;
  66. }
  67. main .nav {
  68. background-color: #fff;
  69. height: 1.46rem;
  70. width: 3.57rem;
  71. display: grid;
  72. grid-template-columns: repeat(5, 0.61rem);
  73. grid-template-rows: repeat(2, 0.66rem);
  74. gap: 0.1rem;
  75. place-items: center;
  76. place-content: space-between;
  77. margin: auto;
  78. border-radius: 0.12rem;
  79. }
  80. main .nav a {
  81. /* : 0.2rem; */
  82. margin-bottom: 0.1rem;
  83. }
  84. main .nav a img {
  85. width: 100%;
  86. }
  87. main .nav a p {
  88. /* display: block; */
  89. font-size: 0.13rem;
  90. height: 0.13rem;
  91. color: #666666;
  92. /* margin-top: 0.05rem; */
  93. }
  94. /*假设我们不想让图标无限放大那么咱们只需要用媒体查询限制一下即可以480px为断点最大设置为跟字号20px*/
  95. @media (min-width: 480px) {
  96. html {
  97. /* 观察在479px时字号是20px 那么咱们就固定在20px 默认1个rem=100px*/
  98. /* 计算方式:
  99. 20px是在body的16px上进行放大1.25倍(20/16 = 1.25) 用100*1.25 = 125px
  100. */
  101. font-size: 125px;
  102. }
  103. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议