如何基于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 相关文章推荐
用js闭包的方法实现多点标注冒泡示例
May 29 Javascript
JavaScript中的原型和继承详解(图文)
Jul 18 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
Dec 17 Javascript
jQuery日程管理插件fullcalendar使用详解
Jan 07 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
Mar 14 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
Jul 03 Javascript
vue中实现移动端的scroll滚动方法
Mar 03 Javascript
layui的table单击行勾选checkbox功能方法
Aug 14 Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 14 Javascript
实例分析javascript中的异步
Jun 02 Javascript
基于vue+echarts数据可视化大屏展示的实现
Dec 25 Vue.js
微前端qiankun改造日渐庞大的项目教程
Jun 21 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/04/28 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
PHP中trim()函数简单使用指南
2015/04/16 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
python yield和Generator函数用法详解
2020/02/10 Python
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
销售副总经理岗位职责
2013/12/11 职场文书
求职意向书
2014/04/01 职场文书
合作协议书怎么写
2014/04/18 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
先进个人主要事迹范文
2015/11/04 职场文书