如何基于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 相关文章推荐
Prototype源码浅析 String部分(二)
Jan 16 Javascript
文本框水印提示效果的简单实现代码
Feb 22 Javascript
网站内容禁止复制和粘贴、另存为的js代码
Feb 26 Javascript
jQuery插件实现文字无缝向上滚动效果代码
Feb 25 Javascript
JavaScript来实现打开链接页面的简单实例
Jun 02 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
使用jquery实现的循环连续可停顿滚动实例
Nov 23 Javascript
js实现控制文件拖拽并获取拖拽内容功能
Feb 17 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
Vue-component全局注册实例
Sep 06 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
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
是否存在第一台收音机的说法
2021/03/01 无线电
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
php技巧小结【推荐】
2017/01/19 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
幼儿园园长自我鉴定
2013/10/22 职场文书
应届生法律顾问求职信
2013/11/19 职场文书
运动会入场解说词300字
2014/01/25 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书