CSS像素和理想视口

269 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

像素

像素是网页布局的基础,一个像素表示了计算机屏幕所能显示的最小区域,像素分为两种类型:css像素和物理像素。

在js或者css代码中使用的px单位就是指的是css像素,物理像素也称设备像素,只与设备或者说硬件有关,同样尺寸的屏幕,设备的密度越高,物理像素也就越多。

css像素和物理像素的具体区别如下表所示:

css像素为web开发者提供,在css中使用的一个抽象单位
物理像素只与设备的硬件密度有关,任何设备的物理像素都是固定的

那么css像素与物理像素的转换关系是怎么样的呢?为了明确css像素和物理像素的转换关系,必须先了解视口是什么。

视口

广义的视口,是指浏览器显示内容的屏幕区域,狭义的视口包括了布局视口、视觉视口和理想视口。

布局视口(layout viewport)

布局视口定义了pc网页在移动端的默认布局行为,因为通常pc的分辨率较大,布局视口默认为980px。也就是说在不设置网页的viewport的情况下,pc端的网页默认会以布局视口为基准,在移动端进行展示。因此可以明显看出来,默认为布局视口时,根植于pc端的网页在移动端展示很模糊。

视觉视口(visual viewport)

视觉视口表示浏览器内看到的网站的显示区域,用户可以通过缩放来查看网页的显示内容,从而改变视觉视口。视觉视口的定义,就像拿着一个放大镜分别从不同距离观察同一个物体,视觉视口仅仅类似于放大镜中显示的内容,因此视觉视口不会影响布局视口的宽度和高度。

理想视口(ideal viewport)

理想视口或者应该全称为“理想的布局视口”,在移动设备中就是指设备的分辨率。换句话说,理想视口或者说分辨率就是给定设备物理像素的情况下,最佳的“布局视口”。

上述视口中,最重要的是要明确理想视口的概念,在移动端中,理想视口或者说分辨率跟物理像素之间有什么关系呢?

为了理清分辨率和物理像素之间的联系,介绍一个用DPR(Device pixel ratio)设备像素比来表示,则可以写成:

1 DPR = 物理像素/分辨率

在不缩放的情况下,一个css像素就对应一个dpr,也就是说,在不缩放

1 CSS像素 = 物理像素/分辨率

此外,在移动端的布局中,可以通过viewport元标签来控制布局,比如一般情况下,可以通过下述标签使得移动端在理想视口下布局:

<meta id="viewport" name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1; user-scalable=no;">

上述meta标签的每一个属性的详细介绍如下:

属性名取值描述
width正整数定义布局视口的宽度,单位为像素
height正整数定义布局视口的高度,单位为像素,很少使用
initial-scale[0,10]初始缩放比例,1表示不缩放
minimum-scale[0,10]最小缩放比例
maximum-scale[0,10]最大缩放比例
user-scalableyes/no是否允许手动缩放页面,默认值为yes

其中来看width属性,在移动端布局时,在meta标签中会将width设置称为device-width,device-width一般是表示分辨率的宽,通过width=device-width的设置就将布局视口设置成了理想的视口。