深入理解rem、px、em

CSS单位em与rem详解
本文详细解析了CSS中em与rem单位的应用技巧,包括如何将px单位转换为em单位,以及em单位的特点和计算方法。同时介绍了rem单位的优势及其在不同浏览器中的兼容性。

   任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。

EM特点 

1. em的值并不是固定的;

2. em会继承父级元素的字体大小。 

所以我们在写CSS的时候,需要注意两点:

1. body选择器中声明Font-size=62.5%;

2. 将你的原来的px数值除以10,然后换上em作为单位;

3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。

em单位只跟字体大小有关!!!!

em单位可以支持到小数点后3位。

在CSS中,“em”实际上是一个垂直测量。一个em等于任何字体中的字母所需要的垂直空间,而和它所占据的水平空间没有任何的关系,因此:

如果字体大小是16px,那么1em=16px。

设置Body的font-size

很多前辈在多年的实践中得出一个经验,他们建议我们在<body>中设置一个正文文本所需的字体大小,或者设置为“10px”,相当于(“0.625em或62.5%”),这样为了方便其子元素计算。这两种都是可取的。但是我们都知道,<body>的默认字体是“16px”,同时我们也很清楚了,我们改变了他的默认值,要让弹性布局不被打破,就需要重新进行计算,重新进行调整。所以完美的设置是:
body {font-size:1em;}

可是在那个没人爱的IE底下,“em”会有一个问题存在。调整字体大小的时候,同样会打破我们的弹性布局,不过还好,有一个方法可以解决:

html {font-size: 100%;}


PX 转换 em表:



如果前提浏览器的默认设置为16px 那么直接可以用这个公式:

960px ÷ 16px = 60em 


rem特点 

rem是CSS3新增的一个相对单位(root em,根em),这个单位引起了广泛关注。这个单位与em有什么区别呢?区别在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。目前,除了IE8及更早版本外,所有浏览器均已支持rem。对于不支持它的浏览器,应对方法也很简单,就是多写一个绝对单位的声明。这些浏览器会忽略用rem设定的字体大小。下面就是


### CSS 单位对比:remempx 的区别及使用场景 #### 1. px(像素) px 是一种绝对长度单位,表示显示器屏幕分辨率中的一个点的大小。它的值是固定的,不会随着父元素或根元素的变化而改变。因此,在响应式设计中,px 的应用相对较少,因为它无法根据用户的浏览器设置动态调整大小[^2]。 - **优点**: - 简单直观,开发时容易控制。 - 在需要固定尺寸的场景下表现良好,例如边框、阴影等。 - **缺点**: - 不具备响应式特性,可能导致在不同设备上显示效果不一致。 - **典型应用场景**: - 固定宽度和高度的元素。 - 边框、阴影等不需要随布局变化的样式。 ```css /* 使用 px 设置固定样式 */ .border-box { border: 1px solid black; } ``` #### 2. em(相对于父元素字体大小) em 是一种相对长度单位,其值基于当前元素的父元素的字体大小计算。如果未指定父元素的字体大小,则默认为浏览器的字体大小(通常为 16px)。由于 em 的值依赖于父元素,因此在嵌套结构中可能会导致复杂性[^3]。 - **优点**: - 相对灵活,适合用于文本相关样式。 - 可以实现一定的响应式效果。 - **缺点**: - 在多层嵌套时,em 的值会累积,可能增加计算难度。 - **典型应用场景**: - 文本相关的样式,如字体大小、行高。 - 按钮内边距等与文本紧密相关的属性。 ```css /* 使用 em 设置相对样式 */ .text-box { font-size: 1.2em; /* 相对于父元素字体大小 */ } ``` #### 3. rem(相对于根元素字体大小) rem 是一种相对长度单位,但其值始终基于 HTML 根元素(`<html>`)的字体大小。这种特性使得 rem 在全局布局和响应式设计中非常有用,因为它避免了 em 在嵌套时的累积问题[^3]。 - **优点**: - 全局一致性,适用于整体布局和间距。 - 更易于维护和预测,尤其是在复杂的嵌套结构中。 - **缺点**: - 需要明确设置根元素的字体大小,否则默认值可能不符合设计需求。 - **典型应用场景**: - 整体布局,如容器宽度、间距等。 - 移动端适配方案,通过动态调整根元素字体大小实现响应式设计。 ```css /* 使用 rem 设置全局样式 */ html { font-size: 16px; /* 设置根元素字体大小 */ } .container { width: 20rem; /* 相对于根元素字体大小 */ } ``` #### 单位对比表 | 单位 | 基准 | 是否响应式 | 典型应用场景 | |------|--------------------------|------------|-------------------------------| | px | 绝对值 | 否 | 边框、固定尺寸元素 | | em | 当前/父元素字体大小 | 是 | 文本相关、按钮内边距 | | rem | 根元素字体大小 | 是 | 整体布局、间距 | #### 实际开发建议 - **混合使用原则**: - 使用 `rem` 设置主要布局尺寸。 - 使用 `px` 设置边框、阴影等固定样式。 - 使用 `em` 设置文本相关和组件内部间距。 - 使用 `vw/vh` 设置全屏元素。 - **移动端适配方案**: ```css /* 基于750px设计稿的rem适配 */ html { font-size: calc(100vw / 7.5); /* 100vw/750×100 */ } .box { width: 3.2rem; /* 设计稿320px */ } ``` - **现代 CSS 方案**: ```css .container { width: clamp(300px, 80vw, 1200px); /* 最小值、理想值、最大值 */ padding: max(2vw, 10px); /* 取较大值 */ } ``` 理解这些单位的差异并根据实际场景合理选择,可以创建出既精确又灵活的响应式布局[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值