移动端1px解决方案
产生原因
- 设备像素比(window.devicePixelRatio),也就是设备的物理像素与逻辑像素的比值
- 在retina屏的手机, dpr为2或3,css里写的1px宽度映射到物理像素上就有2px或3px宽度。
解决方案
实现1PX边框的方法有很多,各有优缺点,比如通过0.5px、背景图片实现、border-image、postcss-write-svg等实现。本文通过伪类元素+transform、viewport+rem两种方式实现,优点是可以自适应已知的各类手机屏幕,且不存在其它方法存在的变颜色困难、圆角阴影失效问题。
-
伪类元素 + transform
- 优点:所有场景都能满足,支持圆角(伪类和本体类都需要加border-radius)。
- 缺点:对于已经使用伪类的元素(例如clearfix),可能需要多层嵌套。
Document
-
viewport + rem + js
- 优点:所有场景都能满足,一套代码,可以兼容基本所有布局。
- 缺点:老项目修改代价过大,只适用于新项目。
Document