如何基于viewport vm适配移动端页面


Posted in Javascript onNovember 13, 2020

前言

作为一个小前端,经常要和H5打交道,这就面临着不同终端的适配问题。

Flexible方案通过Hack手段来根据设备的dpr值相应改变<meta>标签中viewport的值,给我更贴切的体会就是通过js脚本根据设备的dpr和设计图的宽度来计算出html的font-size值,然后就运用rem单位开发可以等比例缩放的H5页面。

但是!Flexible已经完成了他自身的历史使命,我们可以放下Flexible,拥抱新的变化。

做到适配要解决的问题

  • 在移动端布局,我们需要面对两个最为重要的问题:
  • 各终端下的适配问题
  • Retina屏的细节处理

不同的终端,我们面对的屏幕分辨率、DPR、1px、2x图等一系列的问题。那么这个布局方案也是针对性的解决这些问题,只不过解决这些问题不再是使用Hack手段来处理,而是直接使用原生的CSS技术来处理的。

适配终端

以前的Flexible方案是通过JavaScript来模拟vw的特性,那么到今天为止,vw已经得到了众多浏览器的支持,也就是说,可以直接考虑将vw单位运用于我们的适配布局中。

vw是基于Viewport视窗的长度单位,这里的视窗(Viewport)指的就是浏览器可视化的区域,而这个可视区域是window.innerWidth/window.innerHeight的大小。用下图简单的来示意一下:

如何基于viewport vm适配移动端页面

蓝色区域就是 window.innerWidth 和 window.innerHeight

在CSS Values and Units Module Level 3中和Viewport相关的单位有四个,分别为vw、vh、vmin和vmax。

  • vw:是Viewport's width的简写,1vw等于window.innerWidth的1%
  • vh:和vw类似,是Viewport's height的简写,1vh等于window.innerHeihgt的1%
  • vmin:vmin的值是当前vw和vh中较小的值
  • vmax:vmax的值是当前vw和vh中较大的值

如果设计稿用750px宽度的,100vw = 750px,即1vw = 7.5px。那么我们可以根据设计图上的px值直接转换成对应的vw值。如果不想自己计算,我们可以使用PostCSS的插件postcss-px-to-viewport,让我们可以直接在代码中写px。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
推荐一些非常不错的javascript学习资源站点
Aug 29 Javascript
JavaScript 用cloneNode方法克隆节点的代码
Oct 15 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
Jan 24 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
Jun 03 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
Jul 20 Javascript
Angular事件之不同组件间传递数据的方法
Nov 15 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
Feb 27 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
Aug 01 Javascript
js实现点击图片在屏幕中间弹出放大效果
Sep 11 Javascript
Vue中实现回车键切换焦点的方法
Feb 19 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
Aug 17 Javascript
JavaScript实现九宫格拖拽效果
Jun 28 Javascript
VueCli生产环境打包部署跨域失败的解决
Nov 13 #Javascript
Vue使用Proxy代理后仍无法生效的解决
Nov 13 #Javascript
vue iview 隐藏Table组件里的某一列操作
Nov 13 #Javascript
详解Java中String JSONObject JSONArray List转换
Nov 13 #Javascript
vue print.js打印支持Echarts图表操作
Nov 13 #Javascript
vue 中使用print.js导出pdf操作
Nov 13 #Javascript
详解vue中在父组件点击按钮触发子组件的事件
Nov 13 #Javascript
You might like
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
jquery图片放大功能简单实现
2013/08/01 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
python中itertools模块zip_longest函数详解
2018/06/12 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
python3实现弹弹球小游戏
2019/11/25 Python
python将时分秒转换成秒的实例
2019/12/07 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
毕业生求职推荐信
2013/11/04 职场文书
化学教学随笔感言
2014/02/19 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
前台岗位职责范本
2015/04/16 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python
gojs实现蚂蚁线动画效果
2022/02/18 Javascript