为什么用em而不是px?

斯派克

听说您应该在样式表中使用em而不是像素来定义尺寸和距离。所以问题是,为什么在CSS中定义样式时应该使用em而不是px?有一个很好的例子可以说明这一点吗?

斯派克

我问这个问题的原因是我忘记了如何使用em,因为我在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>

一个简单的实现将以date-boxpx为单位定义的宽度

* { 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;
}

问题

但是,如果我们要在浏览器中放大文本大小,则设计会中断。文字也会在框外流血,这与flodin指出的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

这样,您就可以在日期框上进行流畅的设计,即框将与文本一起按日期框定义的字体大小按比例放大。在此示例中,font-size的定义*为10pt,它将是该字体大小的2.5倍。因此,当您在浏览器中调整字体大小时,该框的大小将是该字体大小的2.5倍。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

循环条件:为什么用“不等于”而不是“低于”

为什么用dict.get(key)而不是dict [key]?

为什么用dict.get(key)而不是dict [key]?

为什么用FloatBuffer而不是float []?

为什么用成员数组调用constexpr函数不是常量表达式?

为什么Bootstrap 4选择rem和em而不是px?

在运行中,为什么用[] int而不是int []?

为什么用rgb而不是cmy?

为什么用Big O表示法而不是Theta给出算法复杂度?

为什么用类型实参调用非参数化方法不是错误?

为什么用一个参数而不是两个参数调用释放函数?

在Python中,为什么用“ r +”而不是“ rw”来表示“读写”?

为什么用“ Is”而不是“ IsNot”进行编译?

为什么用string_view而不是广义的container_view <T>?

为什么用webpack导入bootstrap css而不是仅仅链接到它?

为什么用空格定界而不是FPAT

System.Threading.Tasks.Dataflow:为什么用List而不是Queue实现标准块类型?

为什么用__m256而不是'float'可以提供超过x8的性能?

为什么用等号而不是分号/对象字面量符号记录我的对象?

为什么用.Call而不是.C调用C ++函数时出现段错误?

丑陋的双打-为什么用2.9000000000000004而不是2.9?

为什么用format()函数抛出异常而不是编译时错误?

为什么用函数获取记录而不是表?

为什么用===而不是==来表示未定义

C-为什么用&而不是switch / if比较常数?

Shell:为什么用[-n“ $ {VAR-}”]而不是[-n“ $ VAR”]?

为什么用[[-n $ var]]而不是[[$ var]]?

为什么用“ if(!! variable)”而不是“ if(variable)”?

理解函数参数声明中的 Go 指针:为什么用 * 而不是 &?