点击上方 前端瓶子君,关注公众号
回复算法,加入前端编程面试算法每日一题群
以此类推
这里说明一下,无论dpr
多大,1px
的大小通常来说是一致的,这也就意味着,随着dpr
的增大,物理像素点会越来越小,这样才能容纳更多的物理像素,才能更高清,更retina
说完基本概念,来说一下几个问题:
retina屏图片模糊
那为什么在dpr高的retina屏上反而会模糊呢?看图~
虽然这样在dpr
为1
的屏幕上会导致1
个物理像素上有4
个位图像素,但是这种情况的取色算法更优,影响不大,不做讨论。
1px的粗细问题
viewport
三个概念
layout viewport
visual viewport
ideal viewport
一个特性
<meta name='viewport' content='initial-scale=1' />
rem适配方案
// 第一版:
function initRem() {
const meta = document.querySelector('meta[name="viewport"]');;
const html = document.documentElement;
const cliW = html.clientWidth;
const dpr = window.devicePixelRatio || 1;
meta.setAttribute('name', 'viewport');
meta.setAttribute(
'content',
`width=${cliW * dpr}, initial-scale=${1 /
dpr} ,maximum-scale=${1 / dpr}, minimum-scale=${1 /
dpr},user-scalable=no`
);
html.setAttribute('data-dpr', dpr);
// 这样计算的好处是,你可以直接用ui的px/100得到的就是rem大小,方便快捷,无需mixin
html.style.fontSize = 10 / 75 * cliW * dpr + 'px';
}
initRem();
window.onresize = window.onorientationchange = initRem();
最后
本文分享自微信公众号 - 前端瓶子君(pinzi_com)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。