CSS'ex'单位的价值是多少?


87

(不要与流行的.Net单元测试库Xunit混淆。)

今天,我无聊地开始检查Gmail DOM(是的,我很无聊)。

一切看起来都很简单,直到我注意到某些元素的宽度有趣的规范为止。杰出的Googlites使用稀有的“ ex”单位指定了多个表格列。

width: 22ex;

起初我很困惑(“什么是'ex'?”),然后又回到了我的头上:我似乎还记得几年前刚开始学习CSS时的一些事情。根据CSS3规范

[ ex单位]等于第一个可用字体的x高度。之所以称它为x高度,是因为它通常等于小写字母“ x”的高度。但是,即使不包含“ x”的字体也定义了“ ex”。

好,好。但是我从未真正看到过它的使用(我自己很少使用它)。我经常使用ems,并赞赏它们的价值,但是为什么要使用“ ex”呢?与em相比,标准的测量似乎少了很多,有用的也少得多。

我发现讨论该主题的几个页面之一是Stephen Poley的http://www.xs4all.nl/~sbpoley/webmatters/emex.html。斯蒂芬提出了很好的观点,但是,他的讨论对我而言尚无定论。

所以我的问题是:“ ex”单元对网页设计有何价值?

(可以将这个问题标记为主观问题,但我将把这个决定留给比我自己更有经验的SO员工。)

Answers:


124

当您要根据文本的小写字母的高度调整大小时,此功能很有用。例如,想象一下在这样的设计上工作:

替代文字


在设计的印刷尺寸上,字母的高度与其余元素具有重要的空间关系。上面的源图像中的线旨在帮助指出文本的x高度,但它们还显示了围绕该文本进行设计时的准则。

正如乔纳森(Jonathan)在评论中指出的那样,ex只是em(width)的高度版本。


29
只是添加,它的高度等同于使用'em'单位作为宽度
Jonathan Fingland 09年

3
@Joel对于给定的字体,m的宽度和x的高度之间的比率是多少?即使它是固定的,也可能很难计算,因为每种字体的m和x之间都有不同且任意的比率。因此,在设计应该相对于类型的元素时,不必自己确定比例,而是可以依靠x高度来保持比例。
Rex M

2
另一个相当深奥的观点是,根据Mozilla Gecko的说法,使用exes缩放项目比使用ems更加精确。em的默认“非样式”大小为10.06667px,而ex的默认大小为6px。这意味着在缩放ems时,与缩放exes相比,Firefox必须更频繁地舍入部分像素。
benrifkah 2011年

1
尽管通常不正确,但可以想象2ex的大小与1em大致相同(尽管大写字母的高度通常小于1em)。CSS规范甚至声明“无法或不切实际地确定x高度的地方,必须假定值为0.5em。”
natevw

20
@JonathanFingland @RexM不像在印刷版式,在CSS中,em单元测量宽度-其测量高度的字体。1 em是计算得出的font-size,并font-size指定“所需字形的高度”。因此,无论emex测量高度。(ch不过,确实会测量宽度。)
罗里·奥肯

19

为了回答这个问题,上标和下标是一种用法。例:

sup {
    font-size: 75%;
    height: 0;
    line-height: 0;
    position: relative;
    vertical-align: baseline;
    bottom: 1ex;
}

1
不过,我认为这并不能真正解释什么是“ ex”。
duskwuff -inactive-

11
问题是“'ex'单元对网页设计有何价值?”。不是“什么是单位”?乔尔在定义原始问题上做得非常出色。我正在提供一个实用的示例,说明如何使用它定位上标。
jbs 2014年

1
一个很好的实际例子,可以直接回答问题。做得好。
罗勒·布尔克

2

这里要考虑的另一件事是,当用户增大或减小其字体大小时,页面如何缩放(也许使用ctrl +鼠标滚轮(Windows))。

我用过.. padding-left:2 em; 右填充:2 em;

和ex,底部为padding:2 ex;padding-top:2个ex;

因此,对垂直缩放属性使用垂直度量单位,对水平缩放属性使用水平度量单位。


5
em和ex都是垂直单位,因为它们分别定义为大写字母“ M”和小写字母“ x”的高度。它们都可以用于垂直和水平长度。
JacquesB 2015年

除此之外,ch还有一个水平单元,用于测量零数字(“ 0”)的宽度。
Matt F.

1

如果您真正要问的是,在CSS规范拥有它的价值与拥有em单位的价值完全相同。

它使您可以将字体设置为相对大小。

您不知道我的基本字体大小是多少。因此,网页设计的一种好的策略是设置相对的字体大小,而不是绝对的字体大小。相当于“两倍于正常尺寸”或“比正常尺寸小一点”,而不是固定尺寸(如“十个像素”)。


我同意这一点。但是,em规范不足以实现这一点并且更加可靠吗?
乔尔

@JoelPotter是的,但适用于宽度;对于高度,ex似乎是等效的。
ANeves认为SE是邪恶的

5
@ANeves不正确。在CSS中,em是字体的高度(大约),而不是width。在印刷字体中,em的概念来自大写字母的宽度M。但是CSS完善了em。参见维基百科
罗勒·布尔克

2
如果需要宽度,请使用ch另一个答案中提到的单位。
罗勒·布尔克

1

注意,诸如“单/双行间距”之类的术语实际上表示由em测得的两条相邻线之间的偏移量。因此,“双行间距”表示每行的高度为2 em

因此,如果要指定与“线”成比例的垂直距离,请使用em。仅在需要小写字母的实际高度时才使用ex,我敢说这是一种罕见的实例。

更新:Web标准允许浏览器使用0.5em作为字体或从字体派生。

但是,无法可靠地将任何“ x高度”信息嵌入字体(OpenType或webfont)中。

因此,前一种可能性使前单位成为多余,而后者则缺乏任何可靠的手段来实现。两者皆有可能的事实使它甚至更不可靠。

因此,我主张缺乏前单位的价值。


这个问题专门要求其价值,而不是其含义。
Matt F.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.