移动设备下小数位px的渲染

起因

起初发现文字未垂直居中,以为是行高和基线引起,后来将行高,字体大小指定为1rem高度用padding支撑,但发现为元素指定相同高度的情况下,上面的高度永远比下面的小一些,导致文字上移,未能垂直居中

原因

但是PC上显示正常,随后想到可能是因为手机dpi高导致浏览器渲染小数形式的px时,自动做出调整。所以随便写了个测试,如下:

// 小demo
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style media="screen">
        .a, .b {
            width: 100px;
            height: 1.42px;
            background-color: red;
            margin-top: 1px;
        }
        .b {
            background-color: green;
        }
        .c {
            width: 100px;
            height: 1.61px;
            margin-top: 1px;
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div class="a"></div>
    <div class="b"></div>
    <div class="c"></div>
</body>
</html>

image.png

很明显红色的是1px,绿色的是2px,黄色的是1px,那结果就很明确了,手机浏览器对于小数渲染采用四舍五入的方式(注意:只是展示,实际占位还是原始大小),上一个元素舍去的部分会和下一个元素相加

  1. 红色区域(1.41px)- 舍去0.41px - 渲染大小为1px - 下一个元素渲染高度加上0.41px
  2. 绿色区域(1.41px + 0.41px = 1.82px) - 掠夺0.18px - 渲染大小为2px - 下一个元素渲染高度减去0.18px
  3. 黄色区域(1.61px - 0.18px = 1.43px)- 舍去0.43px - 渲染大小为1px - 下一个元素渲染大小高度增加0.43px

想法

rem等单位的好处很明显,但是在有些场景下还是px更加合适,多灵活按照实际情况运用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,827评论 1 92
  • 使用sketch最重要的一点是设计好控件的规范。 为做好设计规范需要对色彩进行编号,比如:color_a”_1,c...
    youyeath阅读 26,337评论 2 237
  • 1、垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,...
    kiddings阅读 3,215评论 0 11
  • 刚开始做移动端web开发的同学应该都碰到过页面适配问题,为什么我在开发手机上调试好的页面在其他手机会有这样或那样的...
    留七七阅读 19,547评论 5 80
  • 能入你眼的 一定 赠你 如果秋天的风你嫌有点 凉了 我将滚动画面 酌选清风三千 任你选
    江城妖怪阅读 279评论 0 1