如何基于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 相关文章推荐
EasySlider 基于jQuery功能强大简单易用的滑动门插件
Jun 11 Javascript
jquery中实现标签切换效果的代码
Mar 01 Javascript
jquery Mobile入门—多页面切换示例学习
Jan 08 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
Jan 17 Javascript
javascript:文字不间断向左移动的实例代码
Aug 08 Javascript
JavaScript中Function()函数的使用教程
Jun 04 Javascript
使用javascript插入样式
Mar 14 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
Jul 21 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
Mar 09 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
layui使用templet格式化表格数据的方法
Sep 16 Javascript
vue实现多级菜单效果
Oct 19 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/10/09 PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
PHP一些常用的正则表达式字符的一些转换
2008/07/29 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
2013/07/05 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
php实现json编码的方法
2015/07/30 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
js下获取div中的数据的原理分析
2010/04/07 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
js打造数组转json函数
2015/01/14 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
Python性能优化技巧
2015/03/09 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
Django vue前后端分离整合过程解析
2020/11/20 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
合伙开公司协议书范本
2014/10/28 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
pandas提升计算效率的一些方法汇总
2021/05/30 Python