博主目前在蚂蚁集团-体验技术部,AntV/S2 是博主所在团队的开源项目——多维交叉分析表格,欢迎使用,感谢到 S2 github 仓库点赞 star,有任何关于前端面试、就业、技术问题都可给在文章后留言。

对于做前端的朋友,相信看到像素(pixel)、分辨率(resolution)、CSS长度单位这些概念都不陌生,但是对它们之间的关系是否清楚呢?以及如何区分应用场景?本文将带你搞懂这些内容。

一、像素

像素是图像的基本采样单位,它不是一个确定的物理量,也不是一个具体的点或小方块(尽管可以用点或小方块来呈现),而是一个抽象概念。

不同的设备,其图像基本单位是不同的,比如显示器的点距,可以认为是显示器的物理像素。现在的液晶显示器的点距一般在0.25mm到0.3mm之间。

液晶显示器点距参考表(1 英寸 = 2.54 厘米):

尺寸 规格 点距
15.6英寸 16:9宽屏(1366×768) 0.252mm×0.252mm
17英寸 16:10宽屏(1440×900) 0.255mm×0.255mm
17英寸 5:4普屏(1280×1024) 0.264mm×0.264mm
18.5英寸 16:9宽屏(1366×768) 0.300mm×0.300mm
19英寸 16:10宽屏(1440×900) 0.285mm×0.285mm
19英寸 16:10宽屏(1680×1050) 0.244mm×0.244mm
19英寸 5:4普屏(1280×1024) 0.294mm×0.294mm
20英寸 5:4普屏(1400×1050) 0.292mm×0.292mm
20英寸 5:4普屏(1600×1200) 0.255mm×0.255mm
20英寸 16:9宽屏(1600×900) 0.276mm×0.276mm
20英寸 16:10宽屏(1680×1050) 0.258mm×0.258mm
21.5英寸 16:9宽屏(1920×1080) 0.248mm×0.248mm
21.6英寸 16:10宽屏(1680×1050) 0.276mm×0.276mm
22英寸 16:10宽屏(1680×105) 0.282mm×0.282mm
23英寸 16:9宽屏(1920×1080) 0.266mm×0.266mm
23英寸 16:9宽屏(2048×1152) 0.249mm×0.249mm
23英寸 16:10宽屏(1920×1200) 0.258mm×0.258mm
24英寸 16:9宽屏(1920×1080) 0.276mm×0.276mm
24英寸 16:10宽屏(1920×1200) 0.27mm×0.27mm
25.5英寸 16:10宽屏(1920×1200) 0.2865mm×0.2865mm
27英寸 16:10宽屏(1920×1200) 0.303mm×0.303mm
30英寸 16:10宽屏(2560×1600) 0.2505mm×0.2505mm
而打印机的墨点,也可以认为是打印机的物理像素,300DPI就是0.085mm,600DPI就是0.042mm。

接下来介绍关于像素的几个概念:

设备像素: 设备的物理像素,其尺寸大小是绝对的。

逻辑像素: CSS 的像素单位,其尺寸大小是相对的,也称为独立像素。

DPI(dots per inch): 像素密度,表示水平或垂直方向每英寸长度的像素数目。

PPI(pixels per inch): 像素密度,表示沿对角线每英寸长度的像素数目。

缩放因子(Scale Factor): 逻辑像素相对于设备像素的放大比例,可通过 window.devicePixelRatio 获得,但二者并不完全等同。


逻辑像素 = 设备像素 × 缩放因子

设备像素都是固定的,所以逻辑像素大小由缩放因子决定。对于桌面设备,逻辑像素通常就等同于物理像素,本来是不用考虑缩放问题的。而现在屏幕变得越来越高清,PPI 越来越大,如果没有缩放,所有的东西看起来都会比较小,因此需要放大。所以决定缩放因子大小的,就是像素密度,密度越大、越高清的屏幕,需要的缩放比例就越大。

PC 上的缩放比例是自定义的,而移动端的缩放比例是通过 viewport 确定的,viewport 就是屏幕那块固定的可视区域。默认情况下,移动端浏览器会将 viewport 宽度设为980px(也有可能是1024px 或其它值),也就是说1px = 设备屏幕宽度的1/980。这跟缩放因子没有任何关系。这时的1px 非常小,所有的元素都变得非常小,移动端浏览器之所以这么做,是为了尽可能完整的显示 PC 端的网页,然后允许用户通过缩放来查看细节。

如果我们不希望采用默认的设置,就需要人为设置 viewport:<meta name=“viewport” content=“width=device-width”>

将 viewport 宽度设为设备宽度,就跟缩放因子有关了。比如:iphone6(750 × 1334)的 PPI 是326,缩放因子是2,所以1个逻辑像素的大小等于2个设备像素。对于 iphone6,1px = 屏幕宽度的1/375,相比1/980放大了不少,而这时候的1px 就是一个比较理想的大小,即比较符合我们在 PC 端使用 px 时的感受。

二、分辨率

分辨率也叫做解析度解像度物理分辨率一定的情况下,显示屏越小图像越清晰;反之,显示屏大小固定时,物理分辨率越高图像越清晰。

物理分辨率 = 屏长的设备像素 × 屏宽的设备像素

通常我们所说的显示器分辨率,其实是指桌面设定的分辨率,而不是显示器的物理分辨率。只不过现在液晶显示器成为主流,由于液晶的显示原理与 CRT(阴极射线显像管)不同,只有在桌面分辨率与物理分辨率一致的情况下,显示效果最佳,所以现在我们的桌面分辨率几乎总是与显示器的物理分辨率一致了。


如果修改为其他桌面分辨率,如:1680 × 1050,则显示桌面范围的长(均匀)分布1680个物理像素,宽(均匀)分布1050个物理像素。

三、CSS 长度单位

单位 含义
px(相对单位) 相对于桌面分辨率而不是视窗大小:通常为1个点,一般为1/96英寸
em(相对单位) 相对于父元素的字体大小,若父元素 font-size 为 16px,那么 1em 就为 16px
%(相对单位) 相对于父元素,正常情况下是通过属性定义自身或其他元素
rem(相对单位) 相对于根元素字体大小,若根元素(html)font-size 为 16px,那么 1rem 就为 16px
ex(相对单位) 相对于小写字母 “x” 的高度
vw(相对单位) 相对于视窗的宽度:视窗宽度是 100vw
vh(相对单位) 相对于视窗高度:视窗宽度是 100vh
vmin(相对单位) vw 和 vh 中较小的那个
vmax(相对单位) vw 和 vh 中较大的那个
ch(相对单位) 1ch 的大小和字母 o 的宽度相等
in(绝对单位) inch,表英寸
cm(绝对单位) centimeter,表厘米
mm(绝对单位) millimeter,表毫米
pt(绝对单位) 磅,1/72英寸
pc(绝对单位) 12点活字,或1/12点

四、三种适配的场景

  1. PPI适配 —— 解决在最小基本单位尺寸不固定的情况下,如何找到一个固定大小的尺寸单位的问题。
    对于文字,希望 16px 的文字无论在什么样的屏幕下看起来都是一样大的。也就是说这里的 px 是一个实际物理尺寸固定的单位。
    设置 viewport 就可以实现这个目的:<meta name=“viewport” content=“width=device-width”>
    1个逻辑像素的尺寸 = 1 / PPI × 缩放因子,所以说设置 viewport 本质上是把 px 变成了一个“绝对单位”

  2. 分辨率(resolution)适配 —— 解决找一个相对单位,使同一尺寸在不同大小的屏幕上看上去相对大小一致的问题。
    比如一张宽100%,高100unit 的 banner 图,希望它在任何大小的屏幕上能够等比例缩放,因此需要这里的 unit 是一个相对单位。vw 和 vh 就是很好的相对单位。

  3. DPR(devicePixelRatio)适配 —— 解决在设置了 viewport,width=device-width 的情况下,如何画出1px(设备像素)的问题。
    DPR = 2 意味着 CSS 中的1px 会用2个设备像素来渲染,解决方案有:用小数、渐变、transform 缩放,手机淘宝的做法是使用 js 动态设置 viewport 的 initial-scale。

博主水平有限,若发现文中存在问题,欢迎留言指正!

学习之路永无止境!

一文搞懂像素(px)、分辨率、CSS长度单位相关推荐

  1. css股票曲线图图解,如何看懂股票曲线图,一文搞懂这些曲线所代表的含义!

    原标题:如何看懂股票曲线图,一文搞懂这些曲线所代表的含义! 在股票技术分析中,我们经常要分析K线图,分时图等等,有些新手在入门的时候常常把两者弄混,所以统称它们为曲线图,实际它们就是K线图和分时图了, ...

  2. 一文搞懂 Cocos Creator 3.0 坐标转换原理

    一文搞懂 Cocos Creator 3.0 坐标转换原理 屏幕坐标 UI 触点坐标 UI 多分辨率适配方案 UI 触点获取 不同坐标之间的转换 屏幕坐标与 3D 节点世界坐标互转 3D 节点之间的坐 ...

  3. 一文搞懂如何使用ArcGIS API for Python训练深度学习模型

    一文搞懂如何使用ArcGIS API for Python训练深度学习模型 文章目录 一文搞懂如何使用ArcGIS API for Python训练深度学习模型 写在前面 一.ArcGIS API f ...

  4. 【显卡】一文搞懂显卡

    [显卡]一文搞懂显卡 文章目录 [显卡]一文搞懂显卡 1. 前言介绍 1.1 CPU和显卡的区别 1.1.1 作用不同 1.1.2 结构不同 1.1.3 应用场景不同 1.2 三个著名的显卡公司 2. ...

  5. 一文搞懂Qt中的颜色渐变(QGradient Class)

    一文搞懂Qt中的颜色渐变(QGradient Class) 1, 快速开始! Qt中与颜色渐变有关的类是QGradient 其中它又有三个子类:QLinearGradient.QRadialGradi ...

  6. 一文搞懂什么是 PostCSS

    一文搞懂什么是 PostCSS 在 Web 应用开发中,CSS 代码的编写是重要的一部分.CSS 规范从最初的 CSS1 到现在的 CSS3,再到 CSS 规范的下一步版本,规范本身一直在不断的发展演 ...

  7. 一文搞懂什么VR,什么是6Dof,欧拉角,四元数转视图矩阵

    目录 一.什么是VR 二.什么是3Dof,6Dof, 9Dof 三.欧拉角(姿态角) 四.Android手机的欧拉角与坐标系 五.安卓坐标系转换欧拉角 六.根据姿态四元数求视图矩阵 一文搞懂什么VR, ...

  8. 一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  9. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

最新文章

  1. 最新CAX/EDA/CFD/GIS/光学/化工/液压软件资源网
  2. python -- 青少年如何使用 Python 开始游戏开发
  3. Mac OS X 系统自带的截图快捷键有哪些?
  4. Converting slapd.conf to a Directory Based Configu
  5. Linux中增加软路由的两种方法,Linux中增加软路由的三种方法
  6. P1064 金明的预算方案(分组背包)
  7. 三种常见嵌入式设备通信协议
  8. 【uva1380 - 一个调度问题】思路题+树形dp
  9. Linux内核3.0移植并基于Initramfs根文件系统启动
  10. c语言编程文件中删除数据结构,C语言数据结构实战(一)顺序表的插入与删除
  11. War-Driving(战争驾驶***)
  12. Java数据库篇5——事务
  13. Properties工具类
  14. 织梦CMS被挂马特征汇总
  15. java+catch块不执行_Java异常处理机制:try...catch...的执行流程
  16. nodejs后台系列--第四篇--koa(三)
  17. linux虚拟机镜像下载
  18. Android中如何实现多个框,android几种不同对话框的实现方式
  19. Android Studio报错 程序包android.support.annotation不存在 解决方案
  20. ms-sql数据类型和access数据类型大全

热门文章

  1. 美国研究生计算机科学专业申请,留学美国研究生计算机科学专业申请建议
  2. 叽叽歪歪乱七八糟的标签——web(一)
  3. 罗技Usb Receiver在Win7 64位系统中驱动安装方法
  4. 均线粘合突破选股指标公式:寻找启动点,并进行信号过滤
  5. 公司裁员前后 你应该怎么做?(结尾有开庭流程)
  6. 【内推网】错失1800万融资之后,他用900元挽救了公司
  7. Android 获取设备的分辨率及屏幕密度、sw
  8. Android系统默认开启adb root模式
  9. HTML5新增标签有哪些你知道吗?
  10. Unity 游戏设计模式 — 策略模式(Strategy)