開發(fā)移動端有一段時間了,目前移動端主流的適配方案依然是rem。由于rem適配以根元素字體大小為基準的單位,當用戶設置了系統(tǒng)字體大小的時候,普通的rem適配方法會失效,導致樣式錯亂。我在開發(fā)的時候也遇到這個問題,所以在原有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);