对于不同的移动设备,其物理像素与逻辑像素间存在不同的比例关系。所以我们仅仅在CSS中为border设置1px时,在手机上看起来会显得比较粗,达不到预期效果。
关于物理像素与逻辑像素
- 物理像素
移动设备出厂时,不同设备自带的不同像素,也称硬件像素; - 逻辑像素
即css中记录的像素。
物理像素与逻辑像素的比例
通常可以通过js的 window.devicePixelRatio 在获取不同设备的物理像素和逻辑像素的比例关系(在控制台打印即可得到)。
解决 1px 问题的推荐方法
方法
项目中引入:border-1px.css,然后通过控制元素的before和after伪元素,改变border大小或颜色。
@charset "utf-8";
.border,
.border-top,
.border-right,
.border-bottom,
.border-left,
.border-topbottom,
.border-rightleft,
.border-topleft,
.border-rightbottom,
.border-topright,
.border-bottomleft {
position: relative;
}
.border::before,
.border-top::before,
.border-right::before,
.border-bottom::before,
.border-left::before,
.border-topbottom::before,
.border-topbottom::after,
.border-rightleft::before,
.border-rightleft::after,
.border-topleft::before,
.border-topleft::after,
.border-rightbottom::before,
.border-rightbottom::after,
.border-topright::before,
.border-topright::after,
.border-bottomleft::before,
.border-bottomleft::after {
content: "