rem的適配原理(淘寶)
將設計圖劃分紅10份,假設設計圖尺寸是750px,那麼每份就是75px,也就是根元素html的font-size的大小,也就是1rem的大小;考慮dpi影響和meta上標籤的scale變化。
換算舉例:例如設計圖尺寸750px,設備尺寸是375px,那麼若是設計圖上一個元素的寬度是75px,那麼換算到設備上面的寬度尺寸就是 37.5px(未通過像素密度轉換)也就是1rem;
- 一、經過 【設計圖上的元素寬度 / 設計圖尺寸 = 設備上的元素寬度? / 設備寬度】計算出設備上的元素寬度 37.5px;
- 二、經過 【設備寬度 * 設備的像素密度 / 10(淘寶rem劃分原理) = 1rem ?】計算出 1rem 等於 75px {未通過scale縮放}
- 三、經過 【設備上的元素寬度 * 設備的像素密度 / 1rem = 設備上的元素寬度(單位rem)?】的到 1rem {未通過scale縮放}
- 四、html根元素rem處理和meta代碼以下:
remJsTD () {
let dpi = window.devicePixelRatio
let html = document.documentElement
let deviceWidth = window.screen.width
let fen = 10;
(function () {
function onWindowResize () {
html.style.fontSize = deviceWidth / fen * dpi + 'px'
}
window.addEventListener('resize', onWindowResize)
onWindowResize()
})()
const scale = 1 / dpi
const oMeta = document.createElement('meta')
oMeta.content = `width=device-width, initial-scale=${scale}, maximum-scale=${scale},minimum-scale=${scale}, user-scalable=0`
oMeta.name = 'viewport'
document.getElementsByTagName('head')[0].appendChild(oMeta)
},
複製代碼