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)
},
复制代码