如何基于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下判断 iframe 是否加载完成的完美方法
Oct 26 Javascript
js获取location.href的参数实例代码
Aug 02 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
Oct 17 Javascript
js判断主流浏览器类型和版本号的简单实现代码
May 26 Javascript
JS HTML5拖拽上传图片预览
Jul 18 Javascript
js轮盘抽奖实例分析
Apr 17 Javascript
D3.js实现文本的换行详解
Oct 14 Javascript
功能强大的jquery.validate表单验证插件
Nov 07 Javascript
ECMAScript6--解构
Mar 30 Javascript
jQuery日期范围选择器附源码下载
May 23 jQuery
jQuery实现购物车的总价计算和总价传值功能
Nov 28 jQuery
vue动态绘制四分之三圆环图效果
Sep 03 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中用文本文件做数据库的实现方法
2008/03/27 PHP
PHP基础学习小结
2011/04/17 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
Python生成随机验证码的两种方法
2015/12/22 Python
Python绘制七段数码管实例代码
2017/12/20 Python
python编写Logistic逻辑回归
2020/12/30 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2012/11/25 面试题
实习鉴定评语
2014/01/19 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
工资收入证明
2014/10/07 职场文书
实习生个人总结范文
2015/02/28 职场文书
硕士论文致谢范文
2015/05/14 职场文书
申请吧主发表的感言
2015/08/03 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
如何使用python包中的sched事件调度器
2022/04/30 Python