前言
该解决方案包含的技术有:传统的rem移动端布局;动态修改meta标签实现不同dpr设备的页面缩放;flex弹性布局;媒体查询加载相应倍图;Img的srcset;background的image-set;svg图标系统;
这个方案我是在网上看了关于 viewport 缩放页面后,结合当前使用的rem布局方案而来。
你有没有在移动H5开发的时候遇到过这样的情况,页面不清晰,明明1px的线条看上去却很宽,而且有些模糊,图片看上去好像失真了一样?和大厂的m站一比,光看自己页面的细节就土的掉渣。遇到过,那就说明你用的移动设备的屏幕是高清屏,也就是dpr大于1的屏幕。而这一切都是拜 乔帮主(你知道是哪位) 所赐。我这里只是简单的介绍,本来也想详细的说说,但感觉自己的语言组织不是太给力,所以还是推荐大家直接看参考文章,这些文章都很值得大家好好看的,里面图文并茂,该有的不该有的都有。
传统的一种移动端布局方案
w: 当前页面宽度
x: 当前字体大小
换算关系:
w / 640 = x / 100
所有的px尺寸都除以100,就得到rem的尺寸
解决什么问题
border: 1px问题;
图片高清问题;
屏幕适配布局问题;
用到的知识点
设备像素比dpr
dpr = 物理像素 / 设备独立像素;
参考文章:
设备像素比devicePixelRatio简单介绍
原创移动端高清、多屏适配方案
viewport
flex布局
关于flex布局可以看下我的这篇文章:flex布局解析
解决思路
flex解决布局适配问题
参见 flexible项目 的flexible.css
动态修改meta标签实现页面的缩放
参见 flexible项目 的flexible.js
高清图片
SVG 图标系统
可以解决小icon的高清适配问题,因为SVG是矢量图,缩放不会失真;
建议通过 iconfont 制作
这里有一个在线的 svg压缩工具
1 | /* 定义 */ |
iconfont
可以解决 icon
的高清适配问题,建议通过 iconfont 制作
MediaQuery
MediaQuery
可以解决背景图片的高清适配;
1 | @media only screen |
CSS的image-set属性
image-set属性可以解决背景图片的高清适配;
目前移动端可以使用带 -webkit- 前缀的属性,Android4.4及以上系统,IOS9.0及以上系统;
可在 caniuse 查看该属性目前的支持情况;
1 | div{ |
图片延迟加载
移动端的图片延迟加载在我看来很必要的,而且顺带可以解决图片的高清适配;
通过 window.devicePixelRatio
可以获取到当前设备的dpr,然后加载相应的图片。
img的srcset和sizes属性
解决图片的高清适配,具体还是看张鑫旭张老师的这篇文章
转载请注明出处:移动端web高清屏显示及伸缩布局方案