如何基于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 相关文章推荐
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
Aug 31 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
Jan 11 Javascript
ajax提交表单实现网页无刷新注册示例
May 08 Javascript
关于javaScript注册click事件传递参数的不成功问题
Jul 18 Javascript
JavaScript实现数字数组按照倒序排列的方法
Apr 06 Javascript
纯js实现瀑布流布局及ajax动态新增数据
Apr 07 Javascript
解析JavaScript模仿块级作用域
Dec 29 Javascript
JS 调试中常见的报错问题解决方法
May 20 Javascript
详解webpack-dev-server的简单使用
Apr 02 Javascript
dts文件中删除一个node或属性的操作方法
Aug 05 Javascript
JS中验证整数和小数的正则表达式
Oct 08 Javascript
小程序实现列表展开收起效果
Jul 29 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中改变图片的尺寸大小的代码
2011/07/17 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
深入解析php之apc
2013/05/15 PHP
利用PHP实现短域名互转
2013/07/05 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
JavaScript Serializer序列化时间处理示例
2014/07/31 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
layui表格实现代码
2017/05/20 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
python实现用户答题功能
2018/01/17 Python
pandas值替换方法
2018/07/10 Python
Python 支持向量机分类器的实现
2020/01/15 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
python代码中怎么换行
2020/06/17 Python
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
追悼会主持词
2014/03/20 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
论群众路线学习笔记
2014/11/06 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python