CSS—px与rem:3分钟掌握rem适配原理

devtools/2025/3/7 1:57:17/

个人博客:haichenyi.com。感谢关注

1. 目录

2. px(像素)

  px我们用的很多,一直都在用。我们真的了解px吗?
  之前最常见的720P的分辨率和1080P的分辨率是啥意思?这里的720P的对应的就是1280x720,1080P对应的就是1920x1080。以1080P为例:

  1. 1920的意思就是水平方向上有1920个像素点
  2. 1080的意思就是垂直方向上有1080个像素点
      像素点是什么意思呢?
      我再举一个例子。
    像素点
      如上图,不同物理尺寸,相同分辨率的设备。看上面的点,两个设备水平方向上的点个数都是相同的。都是720个。这就是像素点。就可以把这个理解像素点。
    定义: px是pixel的缩写,即像素,是图像显示的基本单位,代表屏幕上的一个点。
    特点:
      固定大小: 在不同设备上,一个px的物理尺寸可能不同,但逻辑大小是固定的。
      精确性高: 在设计稿有精确像素要求时,px能很好地实现设计效果。
      缺乏响应性: 在不同屏幕尺寸和分辨率的设备上,使用px定义尺寸的元素可能会出现显示效果不佳的情况。比如,在高分辨率设备上可能显得过小,在低分辨率设备上可能显得过大。

  上面的固定大小的解释是什么意思呢?再看看我们上面图中的设备,都是720P的分辨率,但是一个宽度是720cm,一个宽度是1440cm,他们横向都是720个像素点,怎么填充的满呢?我们就简单的理解,逻辑大小是固定的,这个逻辑大小就是720个像素点。物理尺寸的意思就是720cm,1440cm。那么,怎么填充满呢?简单的理解,你再看看我上面的点,是不是左边的点要小一点,右边的点要大一点?对,没错。就是这样,简单的理解,左边一个像素点的大小是1cm,右边一个像素点的大小是2cm。这样他们就填充满了。

我觉得上面这段话很重要,如果没读懂,多理解几遍。
我觉得上面这段话很重要,如果没读懂,多理解几遍。
我觉得上面这段话很重要,如果没读懂,多理解几遍。
  适配的问题,都是从上面这段话衍生出来的。什么是适配问题呢?
  以上面这两个设备为例子,我如果把字体设置为3px。
3像素  从上面图就能看出来,两个一的宽度肉眼可见的不相同(理论上来说,右边一的宽度应该是左边一的2倍,这里没有画好)。这样不同的宽度,在不同的手机上显示出来的效果不一样,导致用户的体验不相同。这就需要适配。这还是不同的物理宽度。你在想想,如果相同的物理宽度,不同的分辨率。如下:
同设备不同分辨率
  看上面这个图左边是低分辨率,右边是高分辨率。同样是3px,左边对应6cm,右边对应3cm。相对于整个屏幕来说,高分辨率下的内容就会整体变小。对于,用户来说,我靠,你这怎么看啊,字这么小,内容这么小,密密麻麻的。这就是问题。怎么解决这个问题呢?这就需要说到我们下面要说的rem了

3. rem

  因为px响应性差,无法适配的问题。就出现rem。
定义: rem是相对于根元素(即元素)的字体大小而言的相对长度单位。它不受元素字体大小和父元素字体大小的影响,只受根元素字体大小的影响。

特点:
  响应性好: 由于rem是基于根元素字体大小的相对单位,通过调整根元素的字体大小,可以轻松实现整个页面的缩放,使页面在不同屏幕尺寸的设备上都能有较好的显示效果。
  计算相对复杂: 因为rem的值是基于根元素字体大小计算的,在进行页面布局和样式设计时,需要考虑根元素字体大小的设置,并进行相应的计算来确定元素的尺寸。

  默认情况下,html根元素默认字体大小为16px。所以默认情况下1rem=16px。这也只是默认情况下的结论。根元素的字体大小可以改。
  rem响应性好,那么,问题来了,怎么做适配呢?光口说是没有用的。放到后面移动端适配来说。这里只用记住rem是相对于html根元素的字体的一个相对单位就行了。

4. 移动端适配

核心要点就是一句话:保证比例不变,以不变应万变。
<a class=rem适配" />
  把上面这个图看明白了,就搞懂了rem适配了。
  无非稍微有点绕的就是:1倍屏的75x37.5 和 2倍屏的150x75 为啥显示的是一样的?你再想想前面说的px和物理尺寸的关系。想明白就可以了
  再来说说移动端适配,移动端的适配像我们项目里面用的vant框架。我们写布局的时候,都是设置的px,为什么它能适配呢?因为它把px先转成了rem(这一步是框架做的),然后,再其他手机上面显示的时候,就是rem适配了。

PS:整篇文章,精炼一下,如下

  1. 1rem=16px。默认情况下,因为跟布局的字体默认大小就是16px
  2. rem适配就是保证整体比例不变的情况下,通过设置rem,来保证在不同的设备上显示一样的效果,来达到适配的目的

http://www.ppmy.cn/devtools/165126.html

相关文章

SOUI基于Zint生成EAN码

EAN码广泛应用与欧洲的零售业。包括EAN-2、EAN-5、EAN-8和EAN-12码。分别编码 2、5、7 或 12 位数字。此外&#xff0c;可以使用 字符将 EAN-2 和 EAN-5 附加符号添加到 EAN-8 和 EAN-13 符号中&#xff0c;就像 UPC 符号一样。 EAN-8校验码计算&#xff1a; 从左往右奇数位的…

Android动态适配中英文开发指南

Android动态适配中英文开发。首先&#xff0c;我需要确定用户的需求到底是什么。可能他们正在开发一个需要支持中英文的Android应用&#xff0c;想要知道如何动态切换语言&#xff0c;而不仅仅是依赖系统默认语言。或者他们可能遇到了在应用内切换语言时的一些问题&#xff0c;…

将JSON格式数据转化为sql 插入语句

import json# 从 txt 文件中读取 JSON 数据 def read_json_from_file(file_path):with open(file_path, r, encodingutf-8) as file:return file.read()# 将 SQL 语句写入到 txt 文件中 def write_sql_to_file(output_file_path, sql_statements):with open(output_file_path, …

AI面板识别 - 华为OD统一考试(java)

题目描述 AI识别到面板上有N&#xff08;1 ≤ N ≤ 100&#xff09;个指示灯&#xff0c;灯大小一样&#xff0c;任意两个之间无重叠。 由于AI识别误差&#xff0c;每次别到的指示灯位置可能有差异&#xff0c;以4个坐标值描述AI识别的指示灯的大小和位置(左上角x1,y1&#x…

React Native 原理

React Native 是一个跨平台移动应用开发框架&#xff0c;它允许开发者使用 JavaScript 和 React 来开发 iOS 和 Android 原生应用。React Native 的核心原理是通过 桥接&#xff08;Bridge&#xff09; 技术&#xff0c;使用 JavaScript 来控制原生组件&#xff0c;并将应用逻辑…

本周四19点,《基于深度学习的计算音乐学》开讲!

《2025GAS声学大讲堂—音频产业创新技术公益讲座》声音与音乐技术系列专题讲座第2讲将于3月6日周四19点开讲&#xff0c;本次邀请了 复旦大学 博士生 茹港徽 演讲&#xff0c;讲座主题&#xff1a;《基于深度学习的计算音乐学》。此次直播方式为中国电子音响行业协会视频号和小…

C++程序设计语言标准库:STL概述

一、前言 本专题是作者为了加强C与数据结构的学习而作的记录&#xff0c;我所使用的STL版本为SGI STL&#xff0c;这里引用侯杰的《STL源码刨析》中的序言&#xff1a; STL&#xff0c;虽然是一套程序库&#xff08;library&#xff09;&#xff0c;却不只是一般印象中的程序库…

AI情感的产生:从大数据堆砌到“类人情感”的进化

人类情感的形成是一个复杂的过程&#xff0c;它源于无数次的互动、记忆和反馈。正如一个孩子通过母亲的照顾、陪伴和关爱逐渐形成对“妈妈”的情感依赖&#xff0c;这种情感本质上是基于大量数据的积累和模式识别。而人工智能&#xff08;AI&#xff09;作为大数据的产物&#…