如何基于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 常见对象类创建代码与优缺点分析
Dec 07 Javascript
js整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
js创建一个input数组并绑定click事件的方法
Jun 12 Javascript
Boostrap实现的登录界面实例代码
Oct 09 Javascript
js 递归和定时器的实例解析
Feb 03 Javascript
vue使用vue-cli快速创建工程
Jul 28 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
Oct 09 Javascript
JavaScript两种计时器的实例讲解
Jan 31 Javascript
实例详解vue中的$root和$parent
Apr 29 Javascript
js布局实现单选按钮控件
Jan 17 Javascript
JS面向对象编程实现的拖拽功能案例详解
Mar 03 Javascript
原生js实现放大镜组件
Jan 22 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
php抽奖小程序的实现代码
2013/06/18 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
JavaScript 原型链学习总结
2010/10/29 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
构建一个JavaScript插件系统
2020/10/20 Javascript
在类Unix系统上开始Python3编程入门
2015/08/20 Python
Python实现将xml导入至excel
2015/11/20 Python
Python subprocess库的使用详解
2018/10/26 Python
树莓派与PC端在局域网内运用python实现即时通讯
2019/06/22 Python
python如何制作英文字典
2019/06/25 Python
Python算法中的时间复杂度问题
2019/11/19 Python
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
党校培训自我鉴定
2014/02/01 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
离婚协议书格式
2014/11/21 职场文书
个人优缺点总结
2015/02/28 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
追讨欠款律师函
2015/06/24 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript