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

article/2025/9/29 5:26:08

博主目前在蚂蚁集团-体验技术部,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。

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

学习之路永无止境!

http://chatgpt.dhexx.cn/article/Ll1YFrTU.shtml

相关文章

获取浏览器高度

获取浏览器高度 获取浏览器可视区域的高度 $(window).height(); //Cross browser gets the size of Visual area window,Have nothing to do with scroll bars /**** 仅获取可视区域的大小*/ var getInner(function() {// alert(typeof window.innerWidth ! undefined);if (…

js获取浏览器高度和宽度值(多浏览器)

IE中&#xff1a; document.body.clientWidth > BODY对象宽度 document.body.clientHeight > BODY对象高度 document.documentElement.clientWidth > 可见区域宽度 document.documentElement.clientHeight > 可见区域高度 FireFox中&#xff1a; document.bo…

JS 获取浏览器高度和宽度

JS获取浏览器高度和宽度 IE中&#xff1a; document.body.clientWidth > BODY对象宽度 document.body.clientHeight > BODY对象高度 document.documentElement.clientWidth > 可见区域宽度 document.documentElement.clientHeight > 可见区域高度 FireFox中&#x…

javascript获取浏览器宽度和高度

测试浏览器及版本&#xff1a;IE8、FF5、Chrome12 屏幕分辨率&#xff1a;1366 x 768 文档声明&#xff1a;<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ht…

Vue.js动态获取浏览器高度并进行实时修改DOM元素高度

项目中有高度自适应需求&#xff0c;div的高度始终需要一个浏览器的高度&#xff0c;在此做个记录&#xff0c;以便之后迅速搭建 <template> <div class"content" :style"contentStyleObj"></div> </template> <script> …

Vue,JS获取屏幕,浏览器高度宽度

Vue&#xff0c;JS获取屏幕&#xff0c;浏览器高度宽度 一、介绍 1. 容器 一个页面的展示&#xff0c;从外到内的容器为&#xff1a;屏幕、浏览器以及页面本身。 HTML元素展现在页面内&#xff0c;页面展现在浏览器内&#xff0c;而浏览器展现在屏幕内。 通过Js的一些对象…

JS -获取屏幕/浏览器高度

一、展示图 二、屏幕信息 window.screen.height&#xff1a;设备显示屏的高度 这个是设备显示屏的高度&#xff0c;各个机型的显示屏高度都不一样&#xff0c;可以在系统设置中看window.screen.availHeight&#xff1a;屏幕的可用高度 一般是显示屏高度减去显示屏工具栏的高度 …

【已解决】依赖包后出现Failed to resolve:com.github.xxx错误

【已解决】依赖包后出现Failed to resolve:com.github.xxx错误 问题 AndroidStudio常常需要引入第三方Library开源库&#xff0c;然后可能会遇到下面这样的问题&#xff1a; 原因 引入maven { url “xxx” }的时候&#xff0c;位置添加错了。 错误&#xff1a;添加到了bui…

webview添加参数与修改请求头的user-agent

前言 最近公司项目需求&#xff0c;在项目中嵌入h5页面&#xff0c;一般原生&#xff0c;看着感觉跟往常一样&#xff0c;一个地址就完全ok了&#xff0c;如果是这样那就没有这个博文的必要了&#xff01; 项目的登录使用的token登录&#xff0c;在移动端的登录是原生的&…

Android | 如何电脑调试APP中的webview 如何查看webview原web项目的console.log/控制台报错

目录 一、浏览器调试二、WebChromeClient onConsoleMessage()三、腾讯TBS Studio四、参考文献 最近一直在vueAndroid同时合作开发一个功能&#xff0c;我一个小小安卓开发迈向web开发真就处处是难关 一、浏览器调试 浏览器&#xff1a;chrome、Edge 说明&#xff1a;chrome是…

Android之 WebView的使用

一 简介 1.1 WebView是用来展示网页的控件&#xff0c;底层是google的WebKit的引擎。 比起苹果的WebView&#xff0c;webkit一些不足地方&#xff1a; 不能支持word等文件的预览纯标签加载&#xff0c;并不支持所有标签的加载不支持文件的下载&#xff0c;图片的放大&#xf…

Android:WebView 使用漏洞详解与解决方案

目录 1. 类型 WebView中&#xff0c;主要漏洞有三类&#xff1a; 任意代码执行漏洞密码明文存储漏洞域控制不严格漏洞 2. 具体分析 2.1 WebView 任意代码执行漏洞 出现该漏洞的原因有三个&#xff1a; WebView 中 addJavascriptInterface&#xff08;&#xff09; 接口WebVie…

android webview页面下方有input输入框,键盘弹起上滑无法拖动,导致输入内容也无法看到...

在手机端页面中有input输入框&#xff0c;输入框聚焦的时候会弹出键盘&#xff0c;如果input在页面的中下部&#xff0c;弹出的键盘会覆盖住input输入框&#xff0c;这个时候输入内容通常都是看不见的&#xff0c;用户看不到自己输入自己已经输入的内容这种体验非常的不好&…

Google上架因为WebView被拒

原因&#xff1a;在WebViewClient的回调方法onReceivedSslError里只单纯的写了handler.proceed();没给出明确的原因 两种解决方法&#xff1a; 1、去掉WebViewClient的回调方法onReceivedSslError 2、修改onReceivedSslError如下所示 Override public void onReceivedSslEr…

Android 使用Webview加载PDF文件

一、核心代码 protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_pdf_renderer);WebSettings webSettings weContainer.getSettings();webSettings.setJavaScriptEnabled(true);// 设置WebView是否允…

Android中解决ScrollView嵌套WebView底部留白太多和高度问题

前言&#xff1a; Android中WebView的坑很多&#xff0c;比如低版本内核不支持&#xff0c;加载速度慢&#xff0c;重定向等等&#xff0c;当使用ScrollView嵌套WebView时坑更多&#xff0c;有人说为啥要嵌套&#xff1f;单独使用WebView或者ScrollView不行吗&#xff1f;答案…

webview适配(一):文件选择,相机拍照,相册选择

说起来android适配webview就是比较烦人&#xff0c;本人遇到过很多坑&#xff0c;但是之前从来没有过记录&#xff0c;例如&#xff1a;文件选择框&#xff0c;toast弹框&#xff0c;视频不正常播放&#xff0c;视频各种不全屏&#xff08;网上说的方法都不行时候就崩溃了&…

Android跟web哪个好,比系统自带的WebView更好用 | AgentWeb

名称 AgentWeb 语言 Android 平台 GitHub 作者 Justson 在混合化开发大行其道的今天&#xff0c;安卓开发经常会用到WebView&#xff0c;用于加载网页。系统自带的WebView性能和流畅度都一般&#xff0c;今天给大家推荐一款第三方WebView&#xff0c;性能比系统自带的要好&…

X5 浏览器内核调研报告

关于这份调研报告&#xff0c;不是从技术角度深入探索&#xff0c;重点是从产品本身分析&#xff0c;通俗易懂才是重点。主要是为了锻炼平时做技术调研和竞品分析的能力&#xff0c;以及业务拓展的技术储备。内容有点多&#xff0c;下面 **X5 **内核调研报告将分为三个环节&…

南京理工大学计算机考研资料汇总

南京理工大学研究生院 http://gs.njust.edu.cn/ 南京理工大学计算机科学与工程学院 http://cs.njust.edu.cn/ 南京理工大学计算机科学与工程学院始建于1953年创办的哈尔滨军事工程学院模拟计算机研究组&#xff0c;先后经历了炮兵工程学院计算机教研室&#xff08;1960年&a…