Skip to content

1px 宽度

注:文本小节

题目

Retina 屏 1px 像素问题,如何实现

介绍

该问题通常用于考察你是否做过移动端 h5 项目。
如果你能知道这个问题,并且答出来,知道前因后果,证明你有过 h5 开发经验。
否则就说明你没有 h5 的任何开发经验,尤其是你如果都不知道这个事情,那就更加说明这一点。

普通的 1px

如果仅仅使用 css 的 1px 来设置 border ,那可能会出现比较粗的情况。
因为,有些手机屏幕的 DPR = 2 ,即 1px 它会用两个物理像素来显示,就粗了。

css
#box {
    padding: 10px 0;
    border-bottom: 1px solid #eee;
}

如下图,上面是微信 app 的 border ,下面是 1px 的 border ,有明显的区别。显得很粗糙,很不精致,设计师不会允许这样的页面发布上线的。

PS:你不能直接写 0.5px ,浏览器兼容性不好,渲染出来可能还是 1px 的效果。

使用 transform 缩小

我们可以使用 css 伪类 + transform 来优化这一问题。即把默认的 1px 宽度给压缩 0.5 倍。

css
#box {
    padding: 10px 0;
    position: relative;
}
#box::before {
    content: '';
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    height: 1px;
    background: #d9d9d9;
    transform: scaleY(0.5);
    transform-origin: 0 0;
}

如下图,上面是微信 app 的 border ,下面是优化之后的 border ,两者粗细就一致了。

连环问:如果有 border-radius 怎么办

可以使用 box-shadow 设置

  • X 偏移量 0
  • Y 偏移量 0
  • 阴影模糊半径 0
  • 阴影扩散半径 0.5px
  • 阴影颜色
css
#box2 {
    margin-top: 20px;
    padding: 10px;
    border-radius: 5px;
    /* border: 1px solid #d9d9d9; */
    box-shadow: 0 0 0 0.5px #d9d9d9;
}