首页 > 其他分享 >px、em 和 rem 的区别:深入理解 CSS 中的单位

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

时间:2025-01-19 23:29:01浏览次数:3  
标签:em 字体大小 px 元素 rem font size

文章目录


前言

在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开发中越来越受欢迎。

标签:em,字体大小,px,元素,rem,font,size
From: https://blog.csdn.net/chaosweet/article/details/145141452

相关文章

  • 文献阅读分享:《Top-K Off-Policy Correction for a REINFORCE Recommender System》
    Top-KOff-PolicyCorrectionforaREINFORCERecommenderSystemTheTwelfthACMInternationalConferenceonWebSearchandDataMining(WSDM’19)2019研究背景......
  • _EMD-KPCA-LSTM 基于经验模态分解和核主成分分析的长短期记忆网络多维时间序列预测_ma
    EMD-KPCA-LSTM基于经验模态分解和核主成分分析的长短期记忆网络多维时间序列预测MATLAB代码(含LSTM、EMD-LSTM、EMD-KPCA-LSTM三个模型的对比)matlab参考文档:基于EMD-PCA-LSTM的光伏功率预测模型研究内容:本案例使用数据集是北半球光伏功率,共四个输入特征(太阳辐射度气温......
  • (原创)[开源][.Net Standard 2.0] SimpleMMF (进程间通信框架)更新 v1.1,极低CPU占用
    一、前言在上一篇(原创)[.Net]进程间通信框架(基于共享内存)——SimpleMMF中,发布了v1.0版,最大的问题是:CPU占用较高,至少40-50%。这既与我的开发水平有关,也与SimpleMMF诞生环境有关,这个主要是用在数字孪生各软件之间同步数据,而部署软件的工作站性能都强悍,像我常用的便是一个有着19......
  • STM32之CubeMX新建工程操作(十八)
    STM32F407系列文章- STM32CubeMX(十八)目录前言一、STM32CubeMX二、新建工程​编辑1.创建工程2.选择芯片型号3.Pinout引脚分配1.SYS配置2.RCC配置3.定时器配置4.GPIO引脚配置5.中断配置6.通讯接口配置7.插件Middleware配置4.Clock时钟树配置5.工程管理Proje......
  • MESED: A Multi-modal Entity Set Expansion Dataset with Fine-grained Semantic Cla
    MESED:AMulti-modalEntitySetExpansionDatasetwithFine-grainedSemanticClassesandHardNegativeEntities译文论文题目:MESED:AMulti-modalEntitySetExpansionDatasetwithFine-grainedSemanticClassesandHardNegativeEntities论文链接:https://ar......
  • 使用 AWS CLI 管理 EMR
    AmazonEMR(ElasticMapReduce)是一种托管的大数据处理服务,使用户能够在云上便捷、快速地运行和管理大规模数据分析和处理任务。创建EMR集群创建默认IAM角色:awsemrcreate-default-roles查询EMR版本:awsemrlist-release-labels创建EMR集群:awsemrcrea......
  • 快速部署WSL(Windows Subsystem for Linux)
    概述WindowsSubsystemforLinux(WSL)是微软为Windows10及更高版本推出的一项功能,允许用户在Windows上运行Linux二进制可执行文件。WSL提供了一个完全兼容的Linux内核接口,使用户能够在不使用虚拟机或双启动的情况下运行Linux环境。本文将详细介绍如何快速部署WSL,包括安装、配置和......
  • SpringCloudAlibaba:从0搭建一套快速开发框架-06 告别重复代码,使用Freemarker轻松生成
    序言:上篇主要优化完善公共模块,本篇主要创建一个生成代码的独立模块,提升开发效率,避免繁琐的重复的crud操作。由于内容较多,我就分两节写了。本节我们主要以创建项目并简单的生成数据库实体类即可,下节我们会直接搞完。Freemarker是什么Freemarker是一个基于Java的模板引擎......
  • 【2017-2025】Adobe Premiere Pro(简称PR)专业视频编辑软件下载
    AdobePremierePro软件简介AdobePremierePro(简称PR)是由Adobe公司开发的一款专业视频编辑软件,广泛应用于电影制作、电视播出和网络视频的制作。该软件以其强大的编辑功能和灵活的工作流程,在业界中享有盛誉。无论是专业影视制作人还是业余爱好者,PremierePro都能满足他们的......
  • linux实现macos的timeMachine系统备份
    在上一篇文章中,我们详细介绍了Btrfs文件系统的基本使用方法和核心原理。本文将重点讲解如何利用Btrfs的特性来实现系统备份功能。实现原理其实很简单:Linux内核支持直接从Btrfs的子卷(subvolume)启动系统。基于这个特性,我们可以通过计划任务定期为系统根目录创建快照,再配合btrfs-lin......