开发移动端有一段时间了,目前移动端主流的适配方案依然是rem。由于rem适配以根元素字体大小为基准的单位,当用户设置了系统字体大小的时候,普通的rem适配方法会失效,导致样式错乱。我在开发的时候也遇到这个问题,所以在原有rem适配方法上加了校验功能。
链接:https://github.com/blcyzycc/hs_rem
(function (doc, win) {
var remFull = 3.75 // 3.75rem全屏
var docEl = doc.documentElement
var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'
var recalc = function () {
var clientWidth = docEl.clientWidth
if (!clientWidth) return;
var fontSize = clientWidth / (remFull * 100) * 100
docEl.style.fontSize = fontSize + 'px'
var eDivWidth = 0
var eDiv = document.createElement('div')
eDiv.style.width = remFull + 'rem'
eDiv.style.height = '1px'
eDiv.style.position = 'fixed'
eDiv.style.boxSizing = 'border-box'
document.body.appendChild(eDiv)
eDivWidth = eDiv.clientWidth
if (clientWidth !== eDivWidth) {
var timer = setInterval((function () {
clientWidth = docEl.clientWidth
eDivWidth = eDiv.clientWidth
if (clientWidth !== eDivWidth) {
docEl.style.fontSize = fontSize * (clientWidth / eDivWidth) + 'px'
} else {
clearInterval(timer)
document.body.removeChild(eDiv)
}
return arguments.callee
})(), 100)
} else {
document.body.removeChild(eDiv)
}
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false)
doc.addEventListener('DOMContentLoaded', recalc, false)
})(document, window);