细说 rem 与 em

简介: 细说 rem 与 em

细说 rem 与 em

CSS 是任何网站设计的关键部分,但理解如何使用它的细微差别可能是棘手的。本文我们将介绍 CSS 中的 remem,理解这两个单位之间的区别对于想要创建灵活、响应迅速、易于维护和修改的网页的 web 开发人员来说是至关重要的。

我们将了解 emrem 的详细内容,它们的区别,何时以及如何使用它们,以及 emrem 的实际例子。在本文的最后,你应该对这两个单位有一个详细的理解。废话不多说,让我们直接开始吧。

1. CSS 中的 em 和 rem 单位

在寻找在 CSS 中指定长度的方法时,我们有很多选择。所有在 CSS 中指定长度的单位都属于两类。

  • 「绝对长度」:绝对长度,顾名思义,是绝对的;它们是固定的,不与任何东西相对。这意味着无论发生什么,它们都是相同的尺寸。绝对长度包括 cmmminpxptspc
  • 「相对长度」:相对长度是指相对于另一个单位指定长度的单位,也就是说,它们基于其他指定的单位或元素作出反应。它们包括 %vmaxvminvhvwchex,以及我们将要讨论的单位 emrem

现在让我们来看看我们来到这里的两个单位。

2. CSS 中的 em

就像上面说的,CSS 中的 em 单位是一个相对的测量单位,用于测量网页上元素的大小,主要是字体大小。因为它是相对于其父元素而言的,所以 1 个 em 等于「父元素」中设置的「字体大小」

这意味着如果你将父 div 中的字体大小设置为 20px,并将子 div 的字体大小设置为 2em,那么子 div 中的字体大小将等于 40px

这里有一个栗子。 首先,我们来写一下 HTML:

<div class="parent">
  I'm parent div set to 20px
  <div class="child">
    I'm the child div set to 2em, i.e 40px.
  </div>
</div>

接下来是 CSS:

.parent{
  font-size: 20px;
}
.child{
  font-size: 2em;
}
p {
  font-size: 1.5em;
}

会得到如下结果:

c67cb5256c13177766a44a5822575b64.png

em 单位很有用,因为它允许你根据之前所说的元素的字体大小来调整页面上的元素的大小,这有助于创建一个一致的视觉层次结构。这对创建无障碍网站很有帮助,可以让有视觉障碍的用户容易阅读。

需要注意的是,如果你没有指定父元素的值,浏览器的默认值会被当作父元素。

p {
  font-size: 1.5em;
}

在这个例子中,font-size 属性被设置为 1.5em,意味着如果没有直接的父元素,<p> 元素中的文字大小将是浏览器默认字体大小的 1.5 倍。

由于大多数浏览器都会根据屏幕的大小来调整其默认的字体大小,这使得你可以创建灵活的、响应式的布局,以适应不同的屏幕和字体大小。

另外em 单位也可以用来设置其他元素属性的大小,如 marginpaddingborder

3. CSS 中的 rem

现在我们知道了什么是 em,我们来看看 remrem 是 CSS 中另一个测量长度的单位,它代表 root em。既然我们知道 em 等于当前字体的尺寸,我们就可以推断出 root em 是指根元素的字体尺寸,而根元素通常是指 <html> 元素。

em 一样,rem 也是从父元素那里继承它的大小,但 rem 看的父元素不是它上面的 divsection,而是围绕它的第一个元素,也就是 html 元素。让我们用前面的代码做一个例子。同样的 html 代码,只是多了一个 div

<div class="parent">
  I'm parent div set to 20px
  <div class="child">
    I'm the child div set to 2em, i.e 40px.
  </div>
  <div class="child-2">
      I'm the child div set to 2em, i.e 60px.
  </div>
</div>

接下来是我们的 CSS:

.parent{
  font-size: 20px;
}
.child{
  font-size: 2em;
}
p {
  font-size: 1.5em;
}
html{
  font-size: 30px;
}
.child-2{
  font-size: 2rem;
}

会得到如下结果:

a6aedceeb37f76403f78c9c63735be24.png

正如你所看到的,尽管 child-2 div 在另一个 div 里面,但它一直回到 html 元素来继承其字体大小。

使用 rem 单元可以使页面上元素的大小有更大的伸缩性和灵活性,因为如果你改变根元素的字体大小,所有用 rem 单元确定大小的元素都会自动更新,以保持它们的相对大小。

4. em 和 rem 的区别

现在,你已经知道了 emrem 的区别,但为了清楚起见,我想重述一下这两个值的区别。 在 CSS 中,rem 单位只相对于文档的「根元素」,而 em 单位只相对于目标元素的「直接父元素」。这意味着 em 的大小是继承自父元素的,而 rem 的大小只继承自根元素。

5. em 和 rem 的使用场景

对于 font-sizemarginpadding 等全局值来说,使用 rem 单位是个不错的主意,特别是如果你想为整个文档指定一个字体大小,并让它统一缩放,而不是受父元素字体大小的影响。

em 更适合用于特定于某个元素及其子元素的值。这允许你创建一个一致而灵活的布局,可以很好地适应不同的屏幕尺寸和字体大小。然而在 CSS 中使用 emrem 单位的潜在问题,虽然 emrem 是目前在指定长度时使用的最好的单位,但就像生活中的所有事情一样,它们并不完美。

以下是你在使用 emrem 时可能遇到的几个问题:

  • 「复杂的计算」:使用 emrem 单位会导致复杂的计算,特别是涉及到嵌套元素时。这可能导致难以准确预测和控制页面上元素的大小。
  • 「继承性问题」:因为 em 单位是相对于其父元素的字体大小而言的,所以很难理解和控制整个页面的大小是如何继承的。这可能会导致意外的结果,需要额外的调试来解决。
  • 「性能问题」:在一些非常罕见的情况下,使用 emrem 单位可能会对性能产生负面影响,特别是当与复杂的计算相结合或在一个页面上使用过多时。

总的来说,虽然 emrem 单位在某些情况下是挺好的,但重要的是要仔细考虑它们的潜在缺点,以及它们是否是你项目的最佳选择。

如果你到了这里,恭喜你!你现在知道了关于 emrem 的所有知识,以及为什么我们需要它们。如果这篇文章对你有帮助,请你能一键三连。

相关文章
|
JavaScript
VUE3(十)生命周期及钩子函数
Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。
6453 0
VUE3(十)生命周期及钩子函数
|
Android开发 开发者 iOS开发
APP开发后如何上架,上架Android应用市场前要准备什么
移动应用程序(APP)的开发已经成为现代企业和开发者的常见实践。然而,开发一个成功的APP只是第一步,将其上架到应用商店让用户下载和使用是实现其潜力的关键一步。
408王道计算机组成原理强化——输入输出系统大题(I/O)
408王道计算机组成原理强化——输入输出系统大题(I/O)
623 1
408王道计算机组成原理强化——输入输出系统大题(I/O)
|
JSON iOS开发 开发者
uniapp配置ios的Universal Link和associate domains
uniapp配置ios的Universal Link和associate domains
|
运维 JavaScript 应用服务中间件
怎么微信WeixinJSBridge.invoke支付成功居然不跳转?还把我页面给关了!这篇文章就告诉你What should I do!
怎么微信WeixinJSBridge.invoke支付成功居然不跳转?还把我页面给关了!这篇文章就告诉你What should I do!
1736 0
怎么微信WeixinJSBridge.invoke支付成功居然不跳转?还把我页面给关了!这篇文章就告诉你What should I do!
|
运维 Oracle 关系型数据库
screw生成数据库文档
screw生成数据库文档
347 12
|
数据采集 JavaScript 搜索推荐
服务器端渲染(SSR)(Nuxt+Next.js)
服务器端渲染(SSR)技术在服务器上生成页面HTML,提升首屏加载速度和SEO效果。Nuxt.js和Next.js分别是基于Vue.js和React.js的流行SSR框架。Nuxt.js提供自动化路由管理、页面级数据获取和布局系统,支持SSR和静态站点生成。Next.js支持SSR、静态生成和文件系统路由,通过`getServerSideProps`和`getStaticProps`实现数据获取。SSR的优点包括首屏加载快、SEO友好和适合复杂页面,但也会增加服务器压力、开发限制和调试难度。选择框架时,可根据项目需求和技术栈决定使用Nuxt.js或Next.js。
|
开发框架 前端开发 JavaScript
常见的跨平台开发框架
【10月更文挑战第25天】这些跨平台开发框架各有特点,开发者可以根据项目的具体需求、团队的技术栈和对性能、用户体验的要求等因素来选择合适的框架进行开发。
|
存储 JSON 安全
深入理解与实践:Token的使用及其在Web应用安全中的重要性
【7月更文挑战第3天】在现代Web应用程序中,Token作为一种关键的安全机制,扮演着维护用户会话安全、验证用户身份的重要角色。本文将深入探讨Token的基本概念、类型、工作原理,并通过实际代码示例展示如何在Web应用中实现Token的生成、验证及应用,以确保数据传输的安全性和用户认证的有效性。
3831 2