当前位置:  开发笔记 > 编程语言 > 正文

为什么em而不是px?

如何解决《为什么em而不是px?》经验,为你挑选了9个好方法。

我听说你应该使用em而不是像素来定义样式表中的大小和距离.所以问题是为什么在css中定义样式时我应该使用em而不是px?有一个很好的例子可以说明这一点吗?



1> thomasrutter..:

说一个是比另一个更好的选择是错误的(或两者都不会在规范中给出自己的目的).甚至值得注意的是StackOverflow广泛使用px单元.Spoike被告知这不是一个糟糕的选择.

单位的定义

PX是测量的绝对单位(如,PT,或厘米),其也恰好是一个1/96 单元(更为什么更高版本).因为它是绝对测量,所以可以在任何时候使用它来定义特定大小的东西,而不是与浏览器窗口的大小或字体大小等其他东西成比例.

与所有其他绝对单位一样,px单位不会根据浏览器窗口的宽度进行缩放.因此,如果整个页面设计使用绝对单位(如px而不是%),则它将无法适应浏览器的宽度.这本身并不是好的或坏的,只是设计师在坚持精确尺寸和不灵活与拉伸之间需要做出的选择,但在此过程中不遵守确切的尺寸.对于站点来说,通常会混合使用固定大小和灵活大小的对象.

固定大小的元素通常需要合并到页面中 - 例如广告横幅,徽标或图标.这可确保您在设计中几乎总是需要至少一些基于px的测量.例如,图像将(默认情况下)缩放,使得每个像素的大小为1*px*,因此如果您围绕图像进行设计,则需要px单位.它对于精确的字体大小调整和边框宽度也非常有用,由于四舍五入,因此对大多数屏幕使用px单位最有意义.

所有绝对测量值都是严格相关的; 也就是说,1英寸永远 96PX,就像1英寸永远 72pt.(请注意,在谈论基于屏幕的媒体时,1in几乎从不实际上是物理英寸).所有绝对测量假设标称屏幕分辨率为96ppi,桌面监视器的标称观看距离,在这样的屏幕上,一个px将等于屏幕上的一个物理像素,一个将等于96个物理像素.在像素密度或观看距离上显着不同的屏幕上,或者如果用户使用浏览器的缩放功能缩放了页面,则px将不再与物理像素相关.

em不是绝对单位 - 它是相对于当前选择的字体大小的单位.除非您通过使用绝对单位(例如pxpt)设置字体大小来覆盖字体样式,否则这将受到用户浏览器或操作系统中字体选择的影响(如果它们已经制作了字体样式),因此它没有意义使用em作为长度的一般单位,除非您特别希望它按字体大小比例缩放.

当您特别希望某些内容的大小取决于当前字体大小时,请使用em.

%也是相对单位,在这种情况下,相对于父元素的高度或宽度.如果你的设计不依赖于特定的像素大小来设置它的大小,它们是px单元的一个很好的替代品,例如设计的总宽度.

在设计中使用%单位可以使您的设计适应屏幕/设备的宽度,而使用绝对单位(如px)则不然.


没有办法在ems和像素之间进行转换,除非你知道'em'在像素中的大小是多少.这可能取决于该元素的继承字体大小,而该元素又可以依赖于整个文档的字体大小,这取决于用户浏览器和/或操作系统中的字体大小设置.如果您的目标是特定像素大小,请以像素为单位指定它.即,如果你想要990px​​,那就把990px​​.如果像素是你想要的,为什么不使用它们呢?
咦?我没有说任何与之相矛盾的内容.我在说什么px单位用于什么以及em单位用于什么.你似乎暗示使用px单位通常很糟糕.如果在调整浏览器的默认字体大小时网站中断,则错误不是px单位,这是错误的假设.很明显,网页设计师依赖于默认的字体大小(通常是一个好主意),然后根据有关此字体大小的错误假设创建其余布局,例如尝试将固定大小的图形元素与文本对齐,其中元素大小仅匹配一种字体大小的文本.
@thomasrutter,哇!我只是用Google搜索,是的,我不得不说我错了.这些年来我都不知道.我以前认为屏幕上有1个像素= 1"点".我想我今天学到了新东西.
这没有错,也没有过分简化.显然,如果你在实际*声明*font-size的行中使用em,那么在该行上的em不可能相对于该元素的*any font-size声明之后的相同元素的font-size*,因为它还不知道 - 所以相反它必须是相对于元素在*之前具有的字体大小*声明同一元素的font-size属性.由于任何其他行为实际上是不可能的,我不认为那里有任何歧义.
您会忘记视力障碍人士的可及性。最常见的用例是,有这种残疾的人会更改浏览器的基本字体大小。如果他们要。您的所有像素尺寸都有问题,例如,文本会重叠。我认为弗洛丁的例子很清楚地指出了这一点。在chrome,safari或任何浏览器中更改基本字体大小,并以PX尺寸浏览有趣的网站。
一段时间后,OP回答了他自己的问题.看起来他有一个非常具体的场景(他没有在问题中包括).
@TalhaSayed,您正在将像素与px单位混淆。它们不是一回事-请阅读CSS规范。px单位是绝对单位,与in单位,cm单位或pt单位含义相同。

2> flodin..:

我有一台高分辨率的小型笔记本电脑,必须以120%的文本缩放率运行Firefox,才能在不眯眼的情况下阅读.

许多网站都存在此问题.布局变得全乱,按钮中的文本被切成两半或完全消失.甚至stackoverflow.com也会受到影响:

Firefox的屏幕截图,120%文字缩放

请注意顶部按钮和页面选项卡如何重叠.如果他们使用em单位而不是px,那就没有问题了.


您还可以在视图 - >缩放 - >缩放文本中缩放图像而不缩放图像,然后正常缩放.
@Juan:那是因为他们使用最简单的缩放方法:缩放整个页面.但这意味着在150%变焦时,1000px宽的页面变为1500px宽.这是缩放网络和浏览器开发人员的最简单方法.不幸的是,它不是非常用户友好.这就是为什么其他浏览器具有文本缩放功能,仅在不改变布局的情况下放大内容.但这意味着Web开发人员需要基本上为各种字体大小设计其布局,这极大地限制了您可以在设计方面做的事情.使用16pt字体以及48pt字体使网站看起来很难.
@Spoike:我愿意,但Firefox不尊重系统DPI设置.请参阅https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/19524
+1好点.虽然对于大分辨率,您可以将屏幕设置设置为以120 dpi而不是标准96分辨率显示文本

3> Spoike..:

我之所以问这个问题的原因是我忘记了如何使用em,因为有一段时间我在CSS中很开心.人们没有注意到我保持这个问题的一般性,因为我不是在谈论调整字体本身.我对如何在页面上的任何给定块元素上定义样式更感兴趣.

正如Henrik Paul和其他人指出的那样,em与元素中使用的字体大小成正比.在px中定义块元素的大小是常见的做法,但是,在浏览器中调整字体大小通常会破坏这种设计.通常使用快捷键Ctrl+ +Ctrl+ 来调整字体大小-.所以一个好的做法是改用em.

使用px定义宽度

这是一个说明性的例子.假设我们有一个div标签,我们想要变成一个时尚的日期框,我们可能有这样的HTML代码:

July

4

一个简单的实现将date-box在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的设计几乎相同,就像flodin指出的那样.这是因为盒子的宽度与锁定时的宽度相同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倍.


现在这不是真的.在任何现代浏览器中按"Ctrl +"和"Ctrl-"也会缩放像素值.现在已经有一段时间了.
@spoike,正如YemSalat的评论所暗示的那样,显然不再如此

4> Vbakke..:

顶部投票答案在这里从thomasrutter是正确的,他对响应EM.但是像素的大小是非常错误的.所以即使它已经老了,我也不能让它变得不成熟.

电脑屏幕通常不是96dpi!(或者ppi,如果你想变得迂腐.)


像素没有固定的物理尺寸.
(是的,它仅在一个屏幕内固定,但在下一个屏幕中,像素很可能更大或更小,当然不是1/96英寸.)


证明
画一条线,长960像素.用物理标尺测量它.是10英寸?没有..?
将笔记本电脑连接到电视.线路现在是10英寸?还没有?
在iPhone上显示该行.还是一样大小?为什么不?

谁发明了96dpi电脑屏幕神话?
(有些宗教以72dpi神话运作.但同样错误.)


>为了了解px的外观,想象一下20世纪90年代的CRT计算机显示器:它可以显示的最小点大小为1/100英寸(0.25毫米)或更多.px单元的名称来自那些屏幕像素. - 来自W3C的报价:http://www.w3.org/Style/Examples/007/units.en.html#units
_所有绝对测量值都是严格相关的; 也就是说,1in总是*96px*,就像1in总是*72pt*.(请注意,在谈论基于屏幕的媒体时,1in几乎从未实际上是物理英寸)_我不认为最高投票的答案是谈论物理英寸.这些关系属于不同的绝对尺寸方案,如in和pt.对于Eg.如果我绘制一条1_in_的线,只要扩展你的'证明',它会在物理上测量1英寸吗?
-1表示不正确,不相关的咆哮.`px`相对于_reference pixel_的大小,而不是你在这里的屏幕上的像素.你可能不喜欢这样,但是让你的统治者不再是一个事实,也不会有助于回答这个问题.http://stackoverflow.com/questions/27382331/how-a-css-pixel-size-is-calculated`"参考像素是设备上一个像素的视角,像素密度为96dpi,距离手臂长度的读者.对于标称臂长28英寸,视角约为0.0213度."

5> Daniel Rikow..:

它适用于必须根据字体大小进行缩放的所有内容.

它在通过缩放字体大小实现缩放的浏览器上特别有用.因此,如果您使用相应的em比例缩放所有元素的大小.


如今,所有现代浏览器都通过平均缩放所有绝对单位来实现缩放,而不是仅缩放字体大小.请注意,这个答案写于2009年,当时的情况比现在少.

6> Henrik Paul..:

因为em(http://en.wikipedia.org/wiki/Em_ ( typography))与当前使用的字体大小成正比.如果字体大小是16分,则一个em是16分.如果您的字体大小为16像素(注意:与点不同),则一个em为16像素.

这导致了两个(相关的)事情:

    如果您选择稍后在CSS中编辑字体大小,则可以轻松保持比例.

    许多浏览器都支持自定义字体大小,覆盖CSS.如果以像素为单位设计所有内容,则在这些情况下布局可能会中断.但是,如果您使用ems,这些覆盖应该可以缓解这些问题.



7> Muhammad Usm..:

例:

代码: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 {font-size:2em;} // 20px

...

身体

1

2

3

4

通过改变身体中的值,其余的自动变化是基础值的一种...

10×2 = 20 10×1.6 = 16等

您可以将基值设置为8px ...所以8×2 = 16 8×1.6 = 12.8 //可以通过浏览器舍入


最好添加一个说明效果的图像.

8> John Topley..:

一个非常实际的原因是IE 6不允许您使用px指定字体大小,而如果您使用相对单位(如em或百分比)则会这样做.不允许用户调整字体大小对于可访问性非常不利.虽然它在下降,但仍然有很多IE 6用户在那里.


@MichaelMay因此为什么答案和其他评论是在2009年写的......哈哈

9> Scott Evernd..:

使用px精确放置图形元素.使用em进行测量,必须在文本元素周围进行定位和间距,如行高等.px是像素精确的,em可以随着使用的字体动态变化

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有