我听说你应该在样式表中用em而不是像素来定义大小和距离。所以问题是,在CSS中定义样式时,为什么要使用em而不是px?有没有一个很好的例子可以说明这一点?
当前回答
我问这个问题的原因是,我忘记了如何使用它们,因为有一段时间我正在愉快地使用CSS进行黑客攻击。人们没有注意到我将这个问题保持一般性,因为我并没有谈论字体本身的大小。我更感兴趣的是如何在页面上的任何给定块元素上定义样式。
正如Henrik Paul和其他人指出的,em与元素中使用的字体大小成比例。在px中定义块元素的大小是一种常见的做法,然而,在浏览器中调整字体大小通常会破坏这种设计。通常使用快捷键Ctrl++或Ctrl+-调整字体大小。因此,一个好的做法是使用em。
使用px定义宽度
下面是一个示例。假设我们有一个div标签,我们想把它变成一个时尚的日期框,我们可能有如下HTML代码:
<div class="date-box">
<p class="month">July</p>
<p class="day">4</p>
</div>
一个简单的实现将以px定义日期框类的宽度:
* { margin: 0; padding: 0; }
p.month { font-size: 10pt; }
p.day { font-size: 24pt; font-weight: bold; }
div.date-box {
background-color: #DD2222;
font-family: Arial, sans-serif;
color: white;
width: 50px;
}
问题是
然而,如果我们想在浏览器中调整文本的大小,设计就会失败。正如弗洛丁指出的,文本也会在框外溢出,这几乎与SO的设计相同。这是因为该框的宽度将保持不变,因为它被锁定为50px。
改用em
更聪明的方法是在ems中定义宽度:
div.date-box {
background-color: #DD2222;
font-family: Arial, sans-serif;
color: white;
width: 2.5em;
}
* { margin: 0; padding: 0; font-size: 10pt; }
// Initial width of date-box = 10 pt x 2.5 em = 25 pt
// Will also work if you used px instead of pt
这样,日期框上就有了一个流畅的设计,即该框的大小将与为日期框定义的字体大小成比例地与文本一起增大。在本例中,字体大小在*中定义为10pt,大小将为该字体大小的2.5倍。因此,当您在浏览器中调整字体大小时,该框的大小将是该字体大小的2.5倍。
其他回答
使用px精确放置图形元素。使用em进行测量,必须在文本元素周围进行定位和间隔,如行高等。px是像素精度的,em可以随使用的字体动态变化
普遍的共识是使用百分比来调整字体大小,因为它在浏览器/平台之间更加一致。
有趣的是,我以前总是使用pt来调整字体大小,我假设所有网站都使用pt。你通常不会在其他应用程序(如Word)中使用像素大小。我想这是因为它们是用于打印的-但在web浏览器中的大小与Word中的大小相同。。。
我有一台高分辨率的小型笔记本电脑,必须以120%的文本放大率运行Firefox,才能不斜视地阅读。
许多网站都有这样的问题。布局变成乱码,按钮中的文本被切成两半或完全消失。就连stackoverflow.com也深受其苦:
注意顶部按钮和页面选项卡如何重叠。如果他们使用em单位而不是px,就不会有问题。
例子:
代码:body{font-size:10px;}//保持10以下所有大小正确,更改此值,其余更改为该值的1.4
1{font-size:1.2em;}//12px
2{font-size:1.4em;}//14px
3{font-size:1.6em;}//16px
4{font-size:1.8em;}//18px
5{字体大小:2em;}//20px
…
body
1
2
3
4
5
通过改变身体中的值,其余部分会自动改变为基础值的一倍…
10×2=2010×1.6=16等
你可以将基值设为8px…所以8×2=168×1.6=12.8//可由浏览器舍入
像素是绝对单位,而rem/em是相对单位。更多信息:https://drafts.csswg.org/css-values-3/
当您希望字体大小根据系统的字体大小进行调整时,应使用相对单位,因为系统将字体大小值提供给根元素(即HTML元素)。
在这种情况下,如果网页在Google Chrome中打开,HTML元素的字体大小由Chrome设置,请尝试更改它,以查看使用rem/em单位字体的网页的效果。
如果使用px作为字体单位,字体将不会调整大小,而使用rem/em单位的字体将在更改系统字体大小时调整大小。
因此,如果您希望大小固定,请使用px;如果您希望系统大小自适应/动态,请使用rem/em。