CSS字体单位

1、前言

在CSS样式中,当文本缩放的时候使用font-size属性是最难以理解的方面之一。在CSS中,你有4种不一样的选择,可以让你设置文本在浏览器中的展现。那么这4种单位哪种更适合呢?这个问题引起了各类各样不一样的争论和评价。想要找到一个比较权威的回答可能比较困难,由于这个问题比较难回答。css

PS: 半年前只翻译啦一半,半夜打开一看原文忽然就想把剩下的翻译啦~里面有一些本身的观点描述,若是有错误请您留言给我,必定修正。html

2、合适的单位

**"Ems"(em): ** "em"是被用于网页文件媒介的可缩放的单位(即相对单位)。1em就等于当前字体的大小,举个例子来说,若是文档中字体的大小为12pt,那么1em = 12pt。Ems拥有可以缩放的特色,因此2em = 24pt,0.5em = 6pt(你也可使用原文中的.5em,可是我以为0.5em的可读性更好)等等。web

**Pixels(px): ** 像素是被用于屏幕媒介(在计算机屏幕上读取)的固定大小的单位(即绝对单位)。1像素表示电脑屏幕中的1个点(这是你的屏幕可以识别的最小单位)。在设计网页的时候,不少web设计者采用像素,由于它可以很精确的在浏览器中渲染网页。可是,使用像素做为单位,当近视的用户(或者视力很差的用户)放大正在浏览的网页或者在移动端缩小网页到合适的尺寸,都会呈现一些问题。chrome

**Points(pt): ** Points是一直以来被用于打印媒介(打印在纸上等等)。1pt = 1/72英寸。Points和Pixels比较像,它们都是固定大小和不能缩放的单位。浏览器

**Percent(%): ** 百分比单位和"em"单位很像,可是存在着细微的不一样。首先也是最重要的不一样,就是在font-size = 100%(好比:12pt = 100%)的时候。当使用百分比单位,你的文本彻底能在移动端正常访问。学习

3、它们有什么不一样呢?

当你在实际效果中看它们,可以很容易理解它们之间的不一样点。通常来说,1em = 12pt = 16px = 100%。让咱们看看将基本字体大小(body中字体大小)从100%增长到120%以后,它们有什么不一样。 测试代码:(这里使用设置div中字体大小来作测试,代码位于文章末尾:例子1-1)测试

3. chrome v30中的效果

字体比较

(因为这里不涉及字体设计的讲解,设置了内边距等样式便于比较,可是不影响差别的判断)字体

正如你所看到的,em和percent单位当基础font-size增长的时候,对应的字体大小也相对增长;可是px和pt单位却没有反应。对文本设置绝对大小很容易,但对于你的用户要缩小(或者放大)文本,用于在一些设备或者机器中正常显示的时候就不是很好。因此,在网页字体中,使用em和percent单位是更好的解决方案。ui

4. em与百分比的比较

咱们发现pt和px字体单位不是适应Web文档必须选择的单位(其实从做者的语气中并无表现出使用px单位很差的意思),咱们还有em和百分比做为字体的单位。从理论上来讲,em和百分比单位都是相同的(指的都是相对单位),可是在实际的使用中,他们会有细微的不一样之处,这些不一样之处对于咱们在选择字体单位的时候是比较重要的。翻译

从例子1-1中,咱们能够看出,咱们用了“font-size: 100%“来做为咱们的基本单位(做用在body标签上)。若是你改变上面代码中基本单位的font-size: 100%为font-size: 1em(body { font-size: 1em; }),你可能不容易发现改变先后的不一样之处。让咱们看看改变成em单位后,在改变浏览器文本大小的设置后在一些浏览器上的效果。(文章中做者只说了存在于某些浏览器中,我就测试了一下chrome和ie6/7/8/9/10,发现只有ie6会出现做者描述的不清晰和不一致的效果),效果以下图所示:(测试代码位于文章末尾:例子1-2)

最小的状况下

最大的状况下

在IE6中的设置地方以下,设置中,字体大小为中的时候渲染效果比较好。

设置方式

当浏览器字体大小设置为“中”的时候,em和百分比之间几乎没有差别。可是当字体大小改变为其余值得时候差别就比较明显。当“最小”的状况下:em渲染的字体比百分比的更小;当“最大”的状况下:差别至关的明显,em渲染的字体比百分比的更大。虽然部分人认为em单位缩放的方式是他们真正想要的,可是在实际的应用中,em文本的缩放是超出预期的,在某些用户设备中,“最小”字体大小的状况下会致使字体模糊难以阅读的状况(其实有点违背网页可读性一条吧)。

5. 做者观点

从理论上讲,em单位是在web字体大小领域中即将到来的标准(在我这时候翻译已经比较流行啦),可是在实际应用中,对于用户来讲,百分比单位可以提供更多统一的和可被接受的字体渲染。当浏览器设置发生改变,百分比单位的伸缩是按照一种可靠比率的方式缩放、放大的,这样可以提高网页的可读性,更符合设计师的设计初衷。

得出结论:赢家是“百分比”。(你们不忙喷哈,后面做者更新了如今流行的网页字体设置方式)

6. 做者在2011年1月的补充

当我写这篇文章几年后,我想总结一下你们的讨论和辩论。通常来讲,我在开始写网页的时候,会设置body标签的字体大小为: font-size: 62.5%;这样body标签就是百分比的单位,而后再网页接下来使用em单位。只要body使用的百分比单位设置,你接下就能够任意的选择em和百分比单位了,这样作的话会保留百分比单位对于网页字体渲染的好处。这这几年里,这样的写法已经成为一种标准。

px如今被认为是可以被接受的字体大小单位(使用它作单位,用户可使用浏览器的“放大”功能来读取较小的文字) ,不过这样作会出一些问题,当在具备很是高密度屏幕的移动设备中(好比一些Android和iPhone设备上拥有每英寸200~300像素以上,让网页中11px和12px的字体不太拥有良好的阅读体验! ) 。所以,我将继续使用百分比做为在Web文档中的基本字体大小。

7. 附录

例子1-1:各类单位在浏览器中的表现测试代码。

(1)HTML代码:

<div id="test1">
    <p>font-size: 100%</p>
    <p class="p1">em: The quick brown fox.</p>
    <p class="p2">pt: The quick brown fox.</p>
    <p class="p3">px: The quick brown fox.</p>
    <p class="p4">percent: The quick brown fox.</p>
</div>
<div id="test2">
    <p>font-size: 120%</p>
    <p class="p11">em: The quick brown fox.</p>
    <p class="p12">pt: The quick brown fox.</p>
    <p class="p13">px: The quick brown fox.</p>
    <p class="p14">percent: The quick brown fox.</p>
</div>

(2)CSS代码:

/* base style */
body {
    font-size: 100%;
}
#test1, #test2 {
    float: left;
    border: 1px solid #ccc;
    padding: 10px;
}
/* container style */
#test1 {
    font-size: 100%;
}
#test2 {
    margin-left: 50px;
    font-size: 120%;
}
/* text underline */
p {
    border-bottom: 1px solid #aaa;
}
/* main style */
/* font-size: 100% */
#test1 .p1 {
    font-size: 1em;
}
#test1 .p2 {
    font-size: 12pt;
}
#test1 .p3 {
    font-size: 16px;
}
#test1 .p4 {
    font-size: 100%;
}
/* font-size: 120% */
#test2 .p11 {
    font-size: 1em;
}
#test2 .p12 {
    font-size: 12pt;
}
#test2 .p13 {
    font-size: 16px;
}
#test2 .p14 {
    font-size: 100%;
}

例子1-2:em与百分比测试中的代码,放在文章最后,以便你们可以更顺畅的阅读下来。

(1)HTML代码:

<div id="test1">
    <p>font-size: 1em</p>
    <p class="p">1em: The quick brown fox.</p>
</div>
<div id="test2">
    <p>font-size: 100%</p>
    <p class="p">100%: The quick brown fox.</p>
</div>

(2)CSS代码:

/* base style */
body {
    font-size: 1em;
}
#test1, #test2 {
    float: left;
    border: 1px solid #ccc;
    padding: 10px;
}
/* container style */
#test1 {
}
#test2 {
    margin-left: 50px;
}
/* text underline */
p {
    border-bottom: 1px solid #aaa;
}
/* main style */
#test1 .p {
    font-size: 1em;
}
#test2 .p {
    font-size: 100%;
}

做者文章的评论也比较精彩,可以学习到更多 ^0^

英文原文做者:http://kyleschaeffer.com/development/css-font-size-em-vs-px-vs-pt-vs/

相关文章
相关标签/搜索