px和em的战争

好吧。我承认我标题党了。

其实我就是想说px和em的区别,网上资料其实一堆堆,但是还不如自己试验总结的清楚。前端高手可能觉得这玩意简单,但是作为小猫,还是好好学一下。

下面一点点说~~~

 

px和em都是长度单位,区别是,px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,并且em会继承父级元素的字体大小。

 

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

为了简化计算,在css中的body选择器中声明Font-size=62.5%,这就使em值变为16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。

就像这样:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
body
{Font-size:62.5%}
.div_px
{font-size:10px; border:1px red solid;width:120px; height:20px}
.div_em
{font-size:1em; border:0.1em red solid;width:12em; height:2em}

</style>
</head>

<body>
<div class="div_px" >1、这里是div_px</div><br/>

<div class="div_em" >2、这里是div_em</div><br/>

<br/>
</body>
</html>

效果如下:

这两个div基本是一样的。

 

但是,如果仅仅是这样,那就好办了。直接替换就好了。

‘em会继承父级元素的字体大小’这条,要了亲命了。。。

比如这样的一个页面:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
body
{Font-size:62.5%}

.div_out
{font-size:1em; border:1px red solid;width:12em; height:4em }
.div_in
{ font-size:1em; border:1px blue solid;width:12em; height:4em }
</style>
</head>

<body>

<div class="div_out" >
3、这是div_out
<div class="div_in" >
4、这是div_in
</div>
</div>
<br/><br/><br/><br/><br/><br/><br/><br/>
<div class="div_in" >
5、这是在外面的div_in
</div>

</body>
</html>

这里有3个div,3和4是套在一起的,5是作对比的。

现在的效果是这样的:

恩,看起来这几个div效果是一样的,div_out和div_in的设定,font-size都是1em,所以继承没有表现出来。

通过检测,3和4的字体都是10px,长度都是122px,宽度都是42px。(设置了border,所以多了2px)

 

现在改一下:

.div_out{font-size:1.5em; border:1px red solid;width:12em; height:4em  }

效果是这样的

很明显,前两个div变大了,说明。。。
红框的div_out,由于font-size设置了1.5em,真实字体大小是10*1.5=15px,宽度12*10*1.5=180px;高度4*10*1.5=60px (没有计算border)

样式div_in没有做更改,font-size仍然是1em,但是嵌套在3里面的4号div和5效果不一样,4继承了div_out。

 

再来一个:

.div_out{font-size:1.5em; border:1px red solid;width:12em; height:4em  }
.div_in
{font-size:1.5em; border:1px blue solid; width:12em; height:4em }

这次把两个样式的font-size都设置为1.5em。看看效果。


这是为什么呢。。

3号div真实字体大小是10*1.5=15px,宽度12*10*1.5=180px;高度4*10*1.5=60px (没有计算border)

5号div真实字体大小是10*1.5=15px,宽度12*10*1.5=180px;高度4*10*1.5=60px (没有计算border) 

4号div真实字体大小是10*1.5*1.5=22.5px,宽度12*10*1.5*1.5=270px;高度4*10*1.5*1.5=90px (没有计算border)

……………………………………………………………………………………………………………………………………………………………………………………………………………………

 

如果都用px,那么完全没有问题,你设置多少就是多少,不会让人计算的头晕。我平时都用px作为字号,宽度,高度等的单位,唯一用到em的就是字体缩进。

关于px和em各位还有什么要注意的,如果能告诉我,感激不尽。谢谢!

转载于:https://www.cnblogs.com/CherryGhost/archive/2011/09/29/2195451.html

### CSS中 `px`, `em`, `rem` 的区别及用法 #### 1. 定义与特性 - **`px`**: 表示屏幕上的物理像素,是一种绝对单位。它的值不会随浏览器缩放或视口变化而改变[^2]。每个 `px` 对应显示设备的一个单一像素。 - **`em`**: 是一种相对长度单位,基于当前元素的父级字体大小计算。默认情况下,大多数浏览器设置的初始字体大小为 16px,因此未调整前 1em = 16px。通过修改 body 字体大小(如设为 62.5%),可以使 1em 转化为更易于管理的比例关系,即 1em ≈ 10px[^1]。 - **`rem`**: 同样是相对长度单位,但它始终相对于根元素 `<html>` 的字体大小定义。无论嵌套层次如何,`rem` 不会受任何父级元素的影响,这使得它非常适合全局一致性的布局需求[^3]。 #### 2. 计算方式 - 如果 HTML 设置如下: ```css html { font-size: 16px; } div { font-size: 18px; } span { font-size: 1.5em; /* 相对于最近的父元素 */ } ``` 则 `<span>` 的实际字体大小将是 `1.5 * 18px = 27px`,因为 `em` 基于直接父级 `div` 的字体大小计算。 - 若改为使用 `rem`: ```css span { font-size: 1.5rem; /* 相对于根元素 <html> */ } ``` 此时 `<span>` 的字体大小则为 `1.5 * 16px = 24px`,独立于中间层 `div` 的设定。 #### 3. 使用场景 - **`px`**: - 当需要精确控制页面元素尺寸时适用。 - 如按钮宽度、图片高度等固定不变的设计细节。 - **`em`**: - 更适合局部范围内的比例调节,比如段落文字相对于标题字号缩小的情况。 - 或者构建动态适应不同分辨率的小型模块结构。 - **`rem`**: - 推荐用于整体网站框架搭建以及大型组件样式制定。 - 提供更好的可维护性一致性,在响应式网页设计中有显著优势[^4]。 ```css /* 示例代码展示三种单位的实际应用 */ /* 全局基础配置 */ html { font-size: 16px; /* 默认基准 */ } body { font-size: 62.5%; /* 修改后便于 em/px 换算 */ } /* 局部控件采用 px 实现精准定位 */ .button { width: 120px; height: 40px; } /* 文本内容利用 em 达成灵活适配 */ p { font-size: 1.2em; /* 等价于原生约 19.2px */ } h1 { font-size: 2em; /* 大小依据上下文环境自动调整 */ } /* 主题风格切换依靠 rem 维护统一标准 */ .container { padding: 2rem; /* 固定间距不依赖特定区域属性 */ } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值