最近在尝试移动端web的开发,但是以前做适配都是用的百分比,现在已经不能满足我的需求了。适配问题成了一个难题。
适配方案
常用的适配方案是:%
、rem
、flex
、vw
、em
。
我个人更倾向于rem
搭配%
和flex
食用,美滋滋~~😎
实现方案
去浏览器上搜一搜就会发现,当前前端大环境下,各式各样的适配方案非常多。总结起来,在目前,比较常用的实现方案有:
- 当前React/Vue框架流行,市面上也针对这两种框架开发出了很多的插件帮助进行移动端适配,比如:
postcss
; - 还有相当一部分使用的是JS的方式进行计算,得出
font-size
,然后给html
赋值; - 使用css媒体查询实现,根据不同的屏幕,给
html
赋值相对应的font-size
,这样的缺点是很难覆盖到所有的机型。
上面的三种实现方案中,我更倾向于JS计算的方式:
<script>
( function (doc, win) {
var docEl = doc.documentElement,
bd = doc.body,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
// docEl.clientWidth 可能会获取不到
var clientWidth = docEl.clientWidth || bd.clientWidth
if (!clientWidth) return
// docEl.style.fontSize = 100 * ( clientWidth / 750 ) + 'px' //iphone6 clientWidth=375
docEl.style.fontSize = clientWidth / 20 + 'px' //iphone5 clientWidth=320
}
if (!doc.addEventListener) return
win.addEventListener(resizeEvt, recalc, false)
doc.addEventListener('DOMContentLoaded', recalc, false)
} )(document, window)
</script>
在上面的代码中,我注释了以iPhone 6为标准的计算方式,是因为我个人更习惯于使用以iPhone 5为标准的使用方式。
在有UI还原度要求的项目中,还是推荐使用以iPhone 6为标准的计算方式。
参考网址
- IMWeb社区-移动端适配大法.
- 技术胖教学视频。