px、em 和 rem 的区别:深入理解 CSS 中的单位

文章目录

    • 前言
    • 一、`px` - 像素 (Pixel)
    • 二、`em` - 相对父元素字体大小 (Ems)
    • 三、`rem` - 相对于根元素字体大小 (Root Ems)
    • 四、综合比较
    • 结语


前言

在CSS中,pxemrem是三种用于定义尺寸(如宽度、高度、边距、填充等)的长度单位。它们各自有不同的特性,适用于不同的场景。接下来我们将更详细地探讨这三种单位。


一、px - 像素 (Pixel)

  • 定义
    • px代表像素,是一个绝对单位,它的大小固定且与设备无关,通常表示屏幕上一个点的大小。
  • 计算方式
    • 在大多数现代显示器上,1px等于屏幕上的一个物理像素点。然而,在高分辨率显示器(例如Retina显示屏)上,1px可能对应多个物理像素以保持视觉清晰度。
  • 适用场景
    • 当你需要精确控制元素的尺寸或位置时,比如设计图标或需要对齐的图形元素。
    • 对于需要保证一致性的布局部分,如导航栏的高度或按钮的尺寸。
  • 使用方法
    • 直接为属性赋值,无需考虑上下文环境的影响。
    /* 设置一个div的宽度为200像素 */
    div {width: 200px;
    }
    
  • 注意事项
    • 使用px可能会限制页面的响应性和可访问性,因为用户无法通过浏览器设置轻松调整文本大小。
    • 在移动设备上,固定的px值可能不适合所有屏幕尺寸,影响用户体验。

二、em - 相对父元素字体大小 (Ems)

  • 定义
    • em是一种相对单位,其值基于当前元素的字体大小。如果未特别指定,则默认为继承自父元素的字体大小。1em等于当前元素的字体大小。
  • 计算方式
    • 如果一个元素没有明确指定字体大小,它会从最近的非静态定位的祖先元素继承字体大小。因此,em的值依赖于上下文环境中的字体大小设定。
  • 适用场景
    • 适合创建可以随着父元素变化而自动调整的灵活布局。
    • 可以用作字体大小的单位,使整个文档树能够根据根元素的比例缩放。
  • 使用方法
    • em的值是相对于直接父元素的字体大小。对于嵌套的元素,子元素的em值会累积,即子元素的尺寸是基于父元素的em值计算的。
    /* 如果html的字体大小是16px,默认情况下,下面的p标签将有32px的字体大小 */
    p {font-size: 2em; /* 2 * 父元素的字体大小 */
    }/* 子元素的em值会累积 */
    .parent {font-size: 2em;
    }
    .parent .child {font-size: 1.5em; /* 1.5 * parent的字体大小 = 3em = 48px */
    }
    
  • 注意事项
    • 因为em是相对于父元素的字体大小,所以在嵌套结构中,每个子元素的em值都是基于其直接父元素的字体大小,这可能导致尺寸累积效应,增加计算复杂度。
    • 如果不注意,这种累积效应可能会导致难以预料的结果,特别是在深层次嵌套的情况下。

三、rem - 相对于根元素字体大小 (Root Ems)

  • 定义
    • rem也是一种相对单位,但它不是相对于父元素,而是相对于HTML文档的根元素(即<html>标签)的字体大小。这意味着无论元素位于DOM树的哪个位置,rem的值都是一致的。
  • 计算方式
    • 1rem等于HTML根元素的字体大小。如果未指定,则默认为浏览器的默认字体大小,通常是16px。
  • 使用场景
    • 创建完全独立于任何特定父元素的响应式设计,确保所有元素按照相同的基准进行缩放。
    • 简化了复杂的嵌套结构中的尺寸管理问题,因为不需要考虑父元素的影响。
  • 使用方法
    • rem的值是相对于根元素的字体大小。你可以通过改变根元素的字体大小来统一调整整个页面的尺寸。
    /* 设定根元素的字体大小 */
    html {font-size: 62.5%; /* 默认16px -> 10px */
    }/* 根据根元素字体大小设定其他元素 */
    body {font-size: 1.4rem; /* 1.4 * 10px = 14px */
    }h1 {font-size: 2.4rem; /* 2.4 * 10px = 24px */
    }/* 修改根元素字体大小会影响所有rem单位 */
    @media (min-width: 768px) {html {font-size: 75%; /* 新的1rem = 12px */}
    }
    
  • 注意事项
    • 要想让rem生效,最好是在全局样式表中设定根元素的字体大小。例如,可以通过html { font-size: 62.5%; }将默认字体大小设置为10px,使得后续的rem计算更加直观。
      在一些旧版本的浏览器中可能存在兼容性问题,但目前主流浏览器都已经支持rem

四、综合比较

特性/单位pxemrem
类型绝对单位相对单位相对单位
参考点屏幕像素父元素字体大小根元素字体大小
适用场景需要精确控制的元素深层次嵌套结构全局响应式设计
优点精确、易于预测灵活、适应性强易维护、一致性好
缺点不利于响应式设计计算复杂、易出错可能需要额外配置

结语

选择哪种单位取决于你的具体需求以及你希望给用户提供的体验。对于那些追求像素级精度的设计师来说,px可能是最好的选择;而对于想要创建更加灵活和响应式的网页,em和rem则是更好的选项。特别是rem,由于其简化了尺寸管理,并且提供了良好的可访问性支持,因此在现代Web开发中越来越受欢迎。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CI/CD构建】关于不小心将springMVC注解写在service层

背景 之前写一个接口的时候没有察觉到将RequestBody这个注解带到service层了。 今天提交代码的时候&#xff0c;插件没有检测到这个低级错误&#xff0c;导致试飞构建连maven编译都过不了&#xff0c;maven找不到程序包org.springframework.web.bind.annotation这个包 结果…

《深入理解Mybatis原理》Mybatis中的缓存实现原理

一级缓存实现 什么是一级缓存&#xff1f; 为什么使用一级缓存&#xff1f; 每当我们使用MyBatis开启一次和数据库的会话&#xff0c;MyBatis会创建出一个SqlSession对象表示一次数据库会话。 在对数据库的一次会话中&#xff0c;我们有可能会反复地执行完全相同的查询语句&…

win32汇编环境,窗口程序中单选框的一般操作示例

;运行效果 ;win32汇编环境,窗口程序中单选框的一般操作示例 ;比如在窗口程序中生成单选框&#xff0c;默认哪项选中&#xff0c;判断当前选中哪一项&#xff0c;让哪项选中&#xff0c;得到选中项的名称等 ;直接抄进RadAsm可编译运行。重点部分加备注。 ;以下是ASM文件 ;>&g…

个人主页搭建全流程(Nginx部署+SSL配置+DCDN加速)

前言 最近开始准备秋招&#xff0c;打算做一个个人主页&#xff0c;以便在秋招市场上更有竞争力。 目前&#xff0c;现有的一些搭建主页的博文教程存在以下一些问题&#xff1a; 使用Github Page进行部署&#xff0c;这在国内访问容易受阻使用宝塔面板等框架&#xff0c;功能…

Spring MVC简单数据绑定

【图书介绍】《SpringSpring MVCMyBatis从零开始学&#xff08;视频教学版&#xff09;&#xff08;第3版&#xff09;》_springspringmvcmybatis从零开始 代码、课件、教学视频与相关软件包下载-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)&#xff08;第3版&…

Mac上安装Label Studio

在Mac上安装Anaconda并随后安装Label Studio&#xff0c;可以按照以下步骤进行&#xff1a; 1. 在Mac上安装Anaconda 首先&#xff0c;你需要从Anaconda的官方网站下载适用于Mac的安装程序。访问Anaconda官网&#xff0c;点击“Download Anaconda”按钮&#xff0c;选择适合M…

vscode开启调试模式,结合Delve调试器调试golang项目详细步骤

1.前期准备 (1).在vs code中的扩展程序中搜索并安装Go扩展程序 (2).安装 Delve 调试器 go install github.com/go-delve/delve/cmd/dlvlatest (3).打开vs code的命令面板&#xff0c;输入Go: Install/Update Tools&#xff0c;并单击该命令执行&#xff0c;安装或更新Go语…

SQL面试题1:连续登陆问题

引言 场景介绍&#xff1a; 许多互联网平台为了提高用户的参与度和忠诚度&#xff0c;会推出各种连续登录奖励机制。例如&#xff0c;游戏平台会给连续登录的玩家发放游戏道具、金币等奖励&#xff1b;学习类 APP 会为连续登录学习的用户提供积分&#xff0c;积分可兑换课程或…

GPT(General Purpose Timer)定时器

基本概念&#xff1a; 在嵌入式系统中&#xff0c;General Purpose Timer&#xff08;GPT&#xff09;是一种非常重要的硬件组件&#xff0c;用于提供定时功能。 定义&#xff1a;通用定时器是一种能够提供精确时间测量和控制功能的电子设备或电路模块。它可以产生周期性的时…

数据挖掘实训:天气数据分析与机器学习模型构建

随着气候变化对各行各业的影响日益加剧&#xff0c;精准的天气预测已经变得尤为重要。降雨预测在日常生活中尤其关键&#xff0c;例如农业、交通和灾害预警等领域。本文将通过机器学习方法&#xff0c;利用历史天气数据预测明天是否会下雨&#xff0c;具体内容包括数据预处理、…

kalilinux - 目录扫描之dirsearch

情景导入 先简单介绍一下dirsearch有啥用。 假如你现在访问一个网站&#xff0c;例如https://www.example.com/ 它是一个电商平台或者其他功能性质的平台。 站在开发者的角度上思考&#xff0c;我们只指导https://www.example.com/ 但不知道它下面有什么文件&#xff0c;文…

SOME/IP协议详解 基础解读 涵盖SOME/IP协议解析 SOME/IP通讯机制 协议特点 错误处理机制

车载以太网协议栈总共可划分为五层&#xff0c;分别为物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;应用层&#xff0c;其中今天所要介绍的内容SOME/IP就是一种应用层协议。 SOME/IP协议内容按照AUTOSAR中的描述&#xff0c;我们可以更进一步…

springboot vue uniapp 仿小红书 1:1 还原 (含源码演示)

线上预览: 移动端 http://8.146.211.120:8081/ 管理端 http://8.146.211.120:8088/ 小红书凭借优秀的产品体验 和超高人气 目前成为笔记类产品佼佼者 此项目将详细介绍如何使用Vue.js和Spring Boot 集合uniapp 开发一个仿小红书应用&#xff0c;凭借uniapp 可以在h5 小程序 app…

Win11右键菜单实现

主要参考Win11 Context Menu Demo 此工程是vs2022编译&#xff0c;vs2019先修改下 base.h 方可编译过 编译好dll以后 拷贝至SparsePackage目录下 生成稀疏包msix 就拿他工程里面的改&#xff0c;编辑AppxManifest.xml&#xff0c;配置都要对&#xff0c;一个不对可能都失败&a…

像JSONDecodeError: Extra data: line 2 column 1 (char 134)这样的问题怎么解决

问题介绍 今天处理返回的 JSON 的时候&#xff0c;出现了下面这样的问题&#xff1a; 处理这种问题的时候&#xff0c;首先你要看一下当前的字符串格式是啥样的&#xff0c;比如我查看后发现是下面这样的&#xff1a; 会发现这个字符串中间没有逗号&#xff0c;也就是此时的J…

what?ngify 比 axios 更好用,更强大?

文章目录 前言一、什么是ngify&#xff1f;二、npm安装三、发起请求3.1 获取 JSON 数据3.2 获取其他类型的数据3.3 改变服务器状态3.4 设置 URL 参数3.5 设置请求标头3.6 与服务器响应事件交互3.7 接收原始进度事件3.8 处理请求失败3.9 Http Observables 四、更换 HTTP 请求实现…

Linux Kernel 之十 详解 PREEMPT_RT、Xenomai 的架构、源码、构建及使用

概述 现在的 RTOS 基本可以分为 Linux 阵营和非 Linux 阵营这两大阵营。非 Linux 阵营的各大 RTOS 都是独立发展,使用上也相对独立;而 Linux 阵营则有多种不同的实现方法来改造 Linux 以实现实时性要求。本文我们重点关注 Linux 阵营的实时内核实现方法! 本文我们重点关注 …

【拒绝算法PUA】3065. 超过阈值的最少操作数 I

系列文章目录 【拒绝算法PUA】0x00-位运算 【拒绝算法PUA】0x01- 区间比较技巧 【拒绝算法PUA】0x02- 区间合并技巧 【拒绝算法PUA】0x03 - LeetCode 排序类型刷题 【拒绝算法PUA】LeetCode每日一题系列刷题汇总-2025年持续刷新中 C刷题技巧总结&#xff1a; [温习C/C]0x04 刷…

ClickHouse-CPU、内存参数设置

常见配置 1. CPU资源 1、clickhouse服务端的配置在config.xml文件中 config.xml文件是服务端的配置&#xff0c;在config.xml文件中指向users.xml文件&#xff0c;相关的配置信息实际是在users.xml文件中的。大部分的配置信息在users.xml文件中&#xff0c;如果在users.xml文…

《自动驾驶与机器人中的SLAM技术》ch9:自动驾驶车辆的离线地图构建

目录 1 点云建图的流程 2 前端实现 2.1 前端流程 2.2 前端结果 3 后端位姿图优化与异常值剔除 3.1 两阶段优化流程 3.2 优化结果 ① 第一阶段优化结果 ② 第二阶段优化结果 4 回环检测 4.1 回环检测流程 ① 遍历第一阶段优化轨迹中的关键帧。 ② 并发计算候选回环对…