博客列表 >vw/rem移动端响应式布局视口自适应的解决方案

vw/rem移动端响应式布局视口自适应的解决方案

西门瑶雪
西门瑶雪原创
2022年07月22日 16:39:06879浏览

vw/rem移动端响应式布局视口自适应的解决方案

3大视口

布局视口:

开发者看到的页面宽度,默认980px 使用width表示

视觉视口:

设备硬件的显示窗口即视觉视口用device-width表示

理想视口:

可以不用缩放就可以看到所有内容的视口就是理想视口
即:布局视口 = 视觉视口

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

布局三部曲

1.1、设置根元素字号为动态值 定义一个可以根据宽高进行缩放的大小(根元素html字号的大小即为rem的字号大小,rem继承html字号)
1.2、在body中将字号重置
1.3、使用rem进行布局

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

一般设计师提供设计稿,有一个通用的公认的稿宽375px
这个375也就是设备上的视觉视口也就相当于100vw == 375px
在这个基础上进行运算
注意:
①、任何设备视觉视口都是100vw
②、以默认的布局视口375px为基准宽度,令100vw=375px做参照规划自适应rem布局
[========]

a、1个vw是多少

1vw = 100vw/100 = 375px/100 =3.75px
可以这样理解1个vw == 3.75px
1个rem是多少
假设设置根字号为100px
那么此时1rem=100px
那么1rem设置为100px是否合适呢
如果1rem设置为一个绝对值,那么就会失去响应布局的条件

b、如果设备宽度是414呢

414/3.75 == 110.4px 那么此时1个rem应该等于110.4
但是这个414始终都是100vw 375也是100vw 395也是100vw
那么就可以使用vw来动态的表示rem的值实现移动端布局

c、综上所述:公式font-size=calc(100vw/3.75)目的是动态自动计算1rem等于多少px

100vw代表的是不同设备的宽度,实际计算替换为对应设备宽度自动计算;
3.75是标准参照数据;
总之,最终目的是计算不同设备的宽度等于多少px即为rem

  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. </head>
  9. <body>
  10. <nav>
  11. <div class="top">
  12. <a href=""><img src="https://m.php.cn/static/images/ico/html.png" alt=""> </br>数据库A</a>
  13. <a href=""><img src="https://m.php.cn/static/images/ico/html.png" alt=""> </br>数据库B</a>
  14. <a href=""><img src="https://m.php.cn/static/images/ico/html.png" alt=""> </br>数据库A</a>
  15. <a href=""><img src="https://m.php.cn/static/images/ico/html.png" alt=""> </br>数据库B</a>
  16. <a href=""><img src="https://m.php.cn/static/images/ico/html.png" alt=""> </br>数据库A</a>
  17. <a href=""><img src="https://m.php.cn/static/images/ico/html.png" alt=""> </br>数据库B</a>
  18. <a href=""><img src="https://m.php.cn/static/images/ico/html.png" alt=""> </br>数据库A</a>
  19. <a href=""><img src="https://m.php.cn/static/images/ico/html.png" alt=""> </br>数据库B</a>
  20. </div>
  21. </nav>
  22. <style>
  23. *{
  24. margin: 0;
  25. padding: 0;
  26. box-sizing: border-box;
  27. }
  28. a{
  29. text-decoration: none;
  30. }
  31. html{
  32. font-size: 100px;
  33. font-size: calc(100vw/3.75);
  34. }
  35. body {
  36. font-size: 0.16rem;
  37. }
  38. nav .top {
  39. width: 100vw;
  40. display: grid;
  41. grid-template-columns: repeat(4,0.8rem);
  42. grid-template-rows: 0.5rem 0.5rem;
  43. place-content: center center;
  44. place-items: center center;
  45. margin: auto;
  46. padding: 0.05rem 0.05rem;
  47. }
  48. nav .top a{
  49. font-size: 0.14rem;
  50. color: #333;
  51. }
  52. nav .top a img{
  53. width: 0.3rem;
  54. }
  55. </style>
  56. </body>
  57. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议