移动端1px的实现
author: @TiffanysBear
背景
在移动端,css中的1px并等于移动设备的1px,因为手机屏幕有不同的像素密度。window中的devicePixelRatio就是反应css中像素与真实像素的比例,也就是设备物理像素和设备独立像素的比例,也就是 devicePixelRatio = 物理像素 / 独立像素。所以造成了通过css设置1px,在移动端屏幕上会变粗。
解决方案一:使用伪类缩放
使用伪类缩放需要主要的是:
- 设置全边框的时候,box-sizing要设置为border-box,否则伪元素上下左右各会多1px
- 需要将父元素设置为relative
- 注意 transform 的起点,上边距要用左上角,下边距用左下角
0.5px下边框
1 | /* 下边框 */ |
0.5px上边框
1 | /* 上边框 */ |
0.5px全边框
1 | .one-px-border3:after { |
解决方案二:使用 -webkit-min-device-pixel-ratio
The -webkit-device-pixel-ratio CSS media query. Use this to specify the screen densities for which this style sheet is to be used. The corresponding value should be either “0.75”, “1”, or “1.5”, to indicate that the styles are for devices with low density, medium density, or high density screens, respectively. For example: The hdpi.css stylesheet is only used for devices with a screen pixel ration of 1.5, which is the high density pixel ratio.
使用less对常用的1px进行封装:
1 | // 高清屏 1px |
使用时:
1 | .one-px-border { |
解决方案三:使用图片
切图,使用图片结合border-image进行css样式设置
1 | .border-bottom-1px { |
缺点:不够灵活,换颜色需要换图片
解决方案四:使用box-shadow模拟
1 | .box-shadow-1px { |