px em rem 的区别?

本文介绍了CSS中px、em和rem三种相对长度单位。px相对于显示器屏幕分辨率,值固定;em相对于当前对象内文本字体尺寸,会继承父级元素字体大小;rem是CSS3新增单位,相对HTML根元素。还给出了使用建议及代码示例。

共同点:都是相对长度

不同点:px是相对于显示器屏幕分辨率而言的

              em是相对于当前对象内文本的字体尺寸,如果当前对字体只存未设置则默认为浏览器的默认字体大小(任意浏览器的默认字体高都是16px),1em=16px   10px=0.65em  为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为 16px*62.5%=10px 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了

px的特性

-1. IE无法调整那些使用px作为单位的字体大小;

-2. 国外的大部分网站能够调整的原因在于其使用了emrem作为字体单位;

-3. Firefox能够调整pxemrem,但是有大部分的国产浏览器使用IE内核。

px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。(引自CSS2.0手册)

em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。(引自CSS2.0手册)

任意浏览器的默认字体高都是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数值。避免字体大小的重复声明。

也就是避免1.2 * 1.2= 1.44的现象。比如说你在#content中声明了字体大小为1.2em,那么在声明p的字体大小时就只能是1em,而不是1.2em, 因为此em非彼em,它因继承#content的字体高而变为了1em=12px

rem特点

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

Px remem的区别

pxem都是长度单位,

区别是,px的值是固定的,指定是多少就是多少,计算比较容易。

rem,em得值不是固定的,并且em会继承父级元素的字体大小。

浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em

一、 rem的特点:

1rem的大小是根据html根目录下的字体大小进行计算的。

2、当我们改变根目录下的字体大小的时候,下面字体都改变。

3rem不仅可以设置字体的大小,也可以设置元素宽、高等属性。

二、em的特点:

1、字体大小是根据父元素字体大小设置的。

三、代码部分

1rem的代码。

<!DOCTYPE html>

<html>

<head lang="en">

    <meta charset="UTF-8">

    <title>rem</title>

    <style type="text/css">

        *{

            margin: 0;

            padding: 0;

        }

        html{

            font-size:12px;

        }

        .outer{

            font-size:3rem;//3*12px

            background:red;

            width:400px;

            height:400px;

            position: relative;

        }

        .middle{

            font-size:2rem;// 2*12px

            background: aqua;

            width:200px;

            height: 200px;

            position: absolute;

            left:100px;

            top:100px;

 

        }

        .inner{

            font-size:1rem;

            background: palegreen;

            width:100px;

            height:100px;

            position: absolute;

            left:50px;

            top:50px;

        }

    </style>

</head>

<body>

<div class="outer">

    外部

    <div class="middle">

        中间

        <div class="inner">内部</div>

    </div>

</div>

</body>

</html>

rem结果如下: 

1em的代码

<!DOCTYPE html>

<html>

<head lang="en">

    <meta charset="UTF-8">

    <title>rem</title>

    <style type="text/css">

        *{

            margin: 0;

            padding: 0;

        }

        html{

            font-size:12px;

        }

        .outer{

            font-size:3em;//父元素是html   3*12=36px

            background:red;

            width:800px;

            height:800px;

            position: relative;

        }

        .middle{

            font-size:2em;//父元素是outer 所以是2*36=72px

            background: aqua;

            width:400px;

            height: 400px;

            position: absolute;

            left:200px;

            top:200px;

 

        }

        .inner{

            font-size:1em;

            background: palegreen;

            width:200px;

            height:200px;

            position: absolute;

            left:100px;

            top:100px;

        }

    </style>

</head>

<body>

<div class="outer">

    外部

    <div class="middle">

        中间

        <div class="inner">内部</div>

    </div>

</div>

</body>

</html>

em的结果如下:

 

px相对另外两种非常死板  简而言之就是写上去多少就多少以后改不了(要改就一起改了)

rem选择相对非常灵活  虽然有些坑(12px和小数点)但是能解决很大一部分问题了  这个做移动 响应 都非常好

但是并不是万能的  如果 你用rem写插件 给别人用 你敢么,谁都不知道 使用者用什么单位的,

 

当写到插件的时候 比较推荐 使用em  毕竟px太次了不太好(适应性方面),而且em这单位 如果大范围使用 能累死所以 在局部使用最好了  em概念不太清楚的 可以看下下面 我网上找了个大神的blog

### 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、付费专栏及课程。

余额充值