移动端1px像素问题
在移动端web开发中,UI设计稿中设置边框为1像素,前端在开发过程中如果出现border:1px,测试会发现在某些机型上,1px会比较粗,即是较经典的 移动端1px像素问题。
设备的 物理像素[设备像素] & 逻辑像素[CSS像素]
;
物理像素:移动设备出厂时,不同设备自带的不同像素,也称硬件像素;
逻辑像素:即css中记录的像素。
在开发中,移动端CSS里面写了1px,实际上看起来比1px粗;其实这两个px的含义其实是不一样的,UI设计师要求的1px是指设备的物理像素1px,而CSS里记录的像素是逻辑像素,它们之间存在一个比例关系,通常可以用 javascript 中的 window.devicePixelRatio
来获取,也可以用媒体查询的 -webkit-min-device-pixel-ratio
来获取。当然,比例多少与设备相关。
在手机上border无法达到我们想要的效果。这是因为 devicePixelRatio
特性导致,iPhone的 devicePixelRatio==2
,而 border-width: 1p
x; 描述的是设备独立像素,所以,border被放大到物理像素2px显示,在iPhone上就显得较粗。
/* 2倍屏 */
@media only screen and (-webkit-min-device-pixel-ratio: 2.0) {
.border-bottom::after {
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
}
/* 3倍屏 */
@media only screen and (-webkit-min-device-pixel-ratio: 3.0) {
.border-bottom::after {
-webkit-transform: scaleY(0.33);
transform: scaleY(0.33);
}
}
300毫秒延迟问题
安装fastclick :
cnpm i fastclick --save
在main.js里面引入fastclick:
import fastClick from 'fastClick'
fastClick.attach(document.body)