px,em,rem的区别

本文介绍了网页设计中常用的三种长度单位:px、em和rem。解析了它们之间的区别与联系,以及如何在实际项目中合理运用这些单位,特别是rem单位的优势和使用技巧。
px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。

em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
任意浏览器的默认字体高都是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数值。避免字体大小的重复声明。

rem特点

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

p {font-size:14px; font-size:.875rem;}

注意:
选择使用什么字体单位主要由你的项目来决定,如果你的用户群都使用最新版的浏览器,那推荐使用rem,如果要考虑兼容性,那就使用px,或者两者同时使用。
### px、rpxemrem区别及使用场景 #### 1. **px (Pixel)** `px` 表示像素,是一种绝对长度单位。它是最常用的 CSS 计量单位之一,适用于不需要考虑多种设备分辨率的设计场景。由于其固定大小特性,`px` 能够提供较高的精度控制。 当仅需适配少量设备且分辨率对页面影响不大时,使用 `px` 是较为理想的选择[^1]。然而,在多设备环境下,`px` 缺乏灵活性,难以满足复杂的自适应需求。 --- #### 2. **rpx (Responsive Pixel)** `rpx` 是微信小程序中引入的一种相对单位,专为响应式布局设计。它的核心理念是基于屏幕宽度进行动态调整。具体而言,750rpx 等于屏幕的实际宽度,这意味着可以根据不同的屏幕尺寸自动计算出对应的物理像素值。 在 iPhone6 设备上,官方定义了 1rpx = 0.5px 或者说 1 物理像素[^3]。通过这种方式,开发者能够轻松实现跨屏适配。需要注意的是,`rpx` 主要用于微信生态内的开发环境,并不适合通用网页项目[^2]。 --- #### 3. **em** `em` 属于相对单位,依赖父级元素字体大小作为基准来进行比例换算。如果未指定任何样式,默认情况下会继承根节点 `<html>` 的 font-size 值(通常为 16px)。例如: 假设某容器设置了 `font-size: 16px;` ,那么子元素声明 `width: 2em;` 实际代表的就是 32px 宽度[^无直接引用]。 这种机制使得 `em` 非常适合构建嵌套结构中的渐变缩放效果;不过也因为层层累加的关系容易引发复杂性增加的问题。 --- #### 4. **rem (Root em)** 与 `em` 类似,`rem` 同样属于相对单位,但它始终参照文档根节点 (`<html>`) 的字体大小而非局部上下文。这赋予了 `rem` 更高的稳定性和一致性,尤其利于全局范围内的统一管理。 对于需要兼顾多个终端类型的移动互联网产品来说,采用 `rem` 进行布局规划显得尤为重要[^1]。借助媒体查询配合 JavaScript 动态修改 html 元素 fontSize 方法,可以达成高度灵活的响应式设计方案。 ```javascript function setRemUnit() { const screenWidth = document.documentElement.clientWidth || window.innerWidth; const baseFontSize = Math.min(screenWidth / 10, 50); // 自定义逻辑设定最大最小值限制 document.documentElement.style.fontSize = `${baseFontSize}px`; } window.addEventListener('resize', setRemUnit); setRemUnit(); ``` 上述脚本展示了如何依据视窗宽度实时更新基础字号从而驱动整个页面按比例伸缩的过程。 --- ### 总结对比表 | 单位 | 描述 | 使用场景 | |------|------------------------------------------------------------------------------------------|--------------------------------------------| | px | 绝对单位 | 不涉及过多设备兼容性的简单界面 | | rpx | 微信小程序专用,基于屏幕宽度的比例单位 | 小程序内部开发 | | em | 相对当前对象内文本的字体大小 | 复杂层次结构下局部区域独立调节 | | rem | 相对 HTML 根元素字体大小 | 整体一致性的响应式布局 | --- 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值