Skip to content
本页目录

移动端 1px 边框问题

问题

1. 1px 边框产生原因?

1px border 问题,是指在移动端高分辨率设备上 1px 边框视觉上感觉较粗的问题,此问题涉及到物理像素与逻辑像素问题。简单来说,如在2倍屏的设备下,设备宽度为375px,但实际物理像素点为 750px
假设 UI 的设计稿宽度为 750px,图中设计的边框宽度为 1px,在我们 375px 的设备下,我们应该将宽度写为 0.5px,但是安卓设备不支持此属性(IOS8+支持),直接不显示该边框。

2. 如何实现 0.5px 边框?

2.1 利用伪元素的 transform 缩放实现

该方案目前最为常用,比如 vant-uihairline 就是使用该方案实现 实现:在需要边框的元素上实现一个绝对定位的宽高为2倍的元素,给其设置 border: 1px,再利用 transform: scale(0.5) 对其缩放。

优点:

  • 基本满足所有场景
  • 支持圆角 border-radius (需要样式对伪类进行覆盖,较为繁琐,但一般会全局样式统一)

缺点:

  • 会占用伪元素,如果遇到伪元素已经被使用(如除了 clearfix)等情况,需要再包裹一层元素

2.2 border-image 实现

缺点:

  • 边框不同颜色需要切不同图片
  • 圆角需要图片处理,边缘模糊

2.3 viewport + rem 实现