产生原因
因为retina屏的分辨率始终是普通屏幕的2倍,1px的边框在devicePixelRatio=2的retina屏下会显示成2px,所以在高清屏下看着1px总是感觉变大了
主要有以下几种解决方式:
使用scale缩放
利用伪元素和scale缩放
背景渐变
使用背景渐变
使用背景图片
这种方式缺点蛮明显的,不能更改边框颜色
|
|
viewport
这是之前淘宝移动端采取的方案
它的原理是判断 window.devicePixelRatio的值,对viewport进行缩放,
比如当 devicePixelRatio = 2 时,设置
|
|
这种方法呢,当 devicePixelRatio = 3 时,在一些设备上效果不太好
|
|
另外还有淘宝 https://github.com/amfe/lib-flexible 。它的原理是判断浏览器是否支持0.5px的属性,如果支持,则在html上增加.hairlines 类。
综上几种方法,我也对比了几家大公司网站的做法,前面两种方法是比较常用的,关于兼容性问题的话,因为条件有限,没有办法去一一验证。但有大公司在前用,想必兼容性没有多大的问题。