什么是 1px 问题,在移动端设备上,对于一些 retina(一种显示标准,是把更多的像素点压缩在一块屏幕里) 机型,设置 1px 后,显示的效果不像 1px 的效果,会更粗。
原因就是 css 设置的 1px 不等于移动端设备上的1px 物理像素。
其中有一个公式:
window.devicePixelRatio = 设备像素 / css 像素
PS:iPhone 6 7 8 的设备像素比都是 2
解决方案
- 先获取设备的像素比 ,赋值给目标元素的属性,使用 css 控制,设置它的高度或者border 为 0.5px
- 使用伪元素,先放大在缩小。给目标元素加一个伪元素 :after,定位这个伪元素使得它铺在目标元素上,给他的 width 和 height 都放大为原来的 2倍,border 不变,使用 transform: scale( 0.5 ) 缩放。
#container[data-device="2"] {
position: relative;
}
#container[data-device="2"]::after{
position:absolute;
top: 0;
left: 0;
width: 200%;
height: 200%;
content:"";
transform: scale(0.5);
transform-origin: left top;
box-sizing: border-box;
border: 1px solid #333;
}
}