如何基于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中删除指定数组中指定的元素的代码
Feb 12 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
Oct 30 Javascript
Javascript中的delete介绍
Sep 02 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
Dec 26 Javascript
JS应用正则表达式转换大小写示例
Sep 18 Javascript
原生js和jQuery随意改变div属性style的名称和值
Oct 22 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
Jan 18 Javascript
js禁止浏览器的回退事件
Apr 20 Javascript
vue 强制组件重新渲染(重置)的两种方案
Oct 29 Javascript
jQuery实现轮播图效果demo
Jan 11 jQuery
vue项目中使用eslint+prettier规范与检查代码的方法
Jan 16 Javascript
Nuxt的路由配置和参数传递方式
Nov 06 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静态类
2006/11/25 PHP
PHP 时间日期操作实战
2011/08/26 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
基于jquery的cookie的用法
2011/01/10 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
详解jQuery中的事件
2016/12/14 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
python多线程扫描端口示例
2014/01/16 Python
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
windows系统下Python环境搭建教程
2017/03/28 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
最好的商品表达自己:Cafepress
2019/09/04 全球购物
西部世纪面试题
2014/12/05 面试题
教师年度考核自我鉴定
2014/01/19 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
社区活动总结
2015/02/04 职场文书
Navicat Premium自定义 sql 标签的创建方式
2022/09/23 数据库