移动端的像素比(devicePixelRatio)是指手机的物理像素和逻辑像素的比值,物理像素又称设备像素,一个物理像素是显示器(手机屏幕)上最小的物理显示单元。逻辑像素,也可以认为是计算机坐标系中的一个点,这个点代表一个可以由程序使用的虚拟像素(css像素),然后相关系统转换为物理像素。如果我们设置了边框为1px,那么在像素比为2的手机上边框就会显示为2px。下面来说一下如何处理
首先可以使用css3的媒体查询
.border{1px solid deeppink}
//像素比为2
@media screen and (-webkit-min-device-pixel-ratio: 2) {
.border { border: 0.5px solid deeppink }
}
//像素比为3
@media screen and (-webkit-min-device-pixel-ratio: 3) {
.border { border: 0.33px solid deeppink }
}
除此之外,还可以使用伪类进行处理,缺点是代码量多
@media screen and (-webkit-min-device-pixel-ratio:2){
.border::after{
border:1px solid deeppink;
transform-origin:0 0;
transform:scale(0.5)}
}
还可以通过meta标签设置视口
//像素比为2
<meta name="viewport" content="width=device-width,initial-scale=0.5,maximum-scale=0.5, minimum-scale=0.5, user-scalable=no">
//像素比为3
<meta name="viewport" content="width=device-width,initial-scale=0.33,maximum-scale=0.33, minimum-scale=0.33, user-scalable=no">
最后还可以使用js判断
<style>
div{border:1px solid deeppink}
.border div{border:0.5px solid deeppink}
</style>
<script>
if(window.devicePixelRatio&&window.devicePixelRatio>1){
var item=document.createElement('div');
item.classList.add('border');
document.body.appendChild(item)
}
if(item.offsetHeight==1){
document.body.removeChild(item)
document.querySelector('html').classList.add('border')
}
</script>