问题来源
px
是一个相对单位,并不是说1px
就一定等于1个物理像素,设备像素比不同,1px
对应的物理像素数量不同。也就是说在不同设备、不同分辨率的情况下,1px
所代表的物理像素数量不一样,因此1px
在屏幕上显示的宽度也不一样。
设备像素、css像素、设备独立像素、设备像素比
设备像素:设备像素又称物理像素,是设备能够控制显示的最小物理单位
css像素:px是一个相对单位,相对的是设备像素(device pixel)一般情况,页面缩放比为1,1个CSS像素等于1个设备独立像素
设备独立像素:与设备无关的逻辑像素,代表可以通过程序控制使用的虚拟像素,是一个总体概念,包括了CSS像素,而至于1个虚拟像素究竟对应几个物理像素,就设计设备像素比(device pixel ratio)
设备像素比:DPR = 设备像素/设备独立像素
当设备像素比为1:1时,使用1(1×1)个设备像素显示1个CSS像素
当设备像素比为2:1时,使用4(2×2)个设备像素显示1个CSS像素
当设备像素比为3:1时,使用9(3×3)个设备像素显示1个CSS像素
设备像素比可通过
window.devicePixelRatio
查询
实现一条1px的线
1 | <div class="A"></div> |
1 | .A { |
transform
中的scale
字段能够对元素进行缩放,当dpr=2
时,(2 * 2)个物理像素对应1个设备独立像素,因此scale(0.5, 0.5)
代表将1px
缩放为原本的0.5倍,这样我们就得到了和dpr=1
的设备上显示一样宽的1px
通过媒体查询
针对不同dpr进行不同的缩放,保持各设备显示的一致性
实现一像素的边框
1 | <div class="target">12345</div> |
1 | .target { |
transform-origin
CSS属性用于更改一个元素变形的原点。默认原点是元素旋转中心。