div id="navigation" ... /div
div id="main_content" ... /div
div id="side_bar" ... /div
div id="footer" ... /div
/body
#navigation {font-size:1}
#main_content {font-size:1.2}
#side_bar {font-size:1}
#footer {font-size:0.9}
所以这将使文档的导航条和侧边栏的文本显示为10px,主要内容是 12px 以及脚注为 9px。现在这儿还遗留这几个需要被列出的异常现象(即使是使用像素,你也不得不考虑这个)。在 Mozilla 系浏览器中,在我们前面所述的 #main_content 内,所有的标题元素中的 div 将显示 12px,无论他们在 H1 或者 H6 中,然而就像预料中的一样,其他的浏览器将标题显示成其他的尺寸。将 text-size 应用到所有的标题中,将带来强壮的跨浏览器性,比如:
H1 {font-size:2} /* displayed at 24px */
H2 {font-size:1.5} /* displayed at 18px */
H3 {font-size:1.25} /* displayed at 15px */
H4 {font-size:1} /* displayed at 12px */
在表单和表格中一个类似的工作还要去做,强制表单控件和单元格继承正确的尺寸(主要是为了 IE/Win):
INPUT, SELECT, TH, TD {font-size:1}
因此最终 tweak and the bit folks (译者:不知道怎么翻译,估计是钻研这方的爱好者,类似于极客 Geek)似乎发现了戈多的小窍门:处理嵌套元素。我们已经在标题元素上于这方面有所涉及,但是从现在开始,让我们更仔细的的看看实际上发生了什么。首先我们将我们的 BODY 的文本尺寸改为10px; 相当于默认大小的 62.6%
16 x 0.625 = 10
然后我们说我们主要的内容应该按照12px来显示。如果我们什么都不做, #main_content div (译者:id为 main_content 的 div 元素)就会显示成10px,因为它会从 body 元素继承字体大小。也就是说当我们使用 ems 的时候,我们总是将文本的尺寸同其父元素关联起来。
子元素像素值 / 父元素像素值 = 子元素 s
12 / 10 = 1.2
下面我们希望我们的标题一为 24px。 h1 的父就是 #main_content div,我们知道它是 12px。 为了让标题为 12px,我们需要将其加倍,所以 s 就是:
24/12 = 2
接着,这里有个小窍门,像这样应用规则:
#main_content LI {font-size:0.8333}
这条样式规则表示所有的 #main_content 下的列表项目将显示成 10px。我们是通过同样直接的数学公式得出这个值的:
10 / 12 = 0.8333
但是如果列表嵌套又会怎么样呢?列表会越来越小。为什么?因为我们的规则明确的指出在 #main_content div 元素中的任何的列表项目都是它的父元素的 0.8333 倍。所以我们需要另外一条规则来防止这种继承的缩小
LI LI {font-size:1}
(译者:这里,最好是 #main_content LI LI {font-size:1},以限定这条规则只能作用在 #main_content 下)
这就是说任何在其他列表项目内的列表项目应该保持同其父列表项目相同的尺寸。在开发期间,我通常采用一个完整的子选择器的集合来防止混乱的发生。
LI LI, LI P, TD P, BLOCKQUOTE P {font-size:1}
就是这样。当通过 s 控制文本大小的时候有一条原则要记住:文本的尺寸要和其父亲关联,并且使用简单的计算来做到这一点:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)子元素像素值 / 父元素像素值 = 子元素 s
一些有用的工具
Pixy 的 是个神话般显示文本尺寸层级(或者其他的CSS属性)的书签。Mozilla’s Inspector Inspector (Mozilla Dom 查看器)是一更强大的工具,他允许你查看附加在任何元素的 CSS 规则以及叠层优先级,因此你能知道为什么你的文本没有照着你的预想改变尺寸。
(译者:这里,我强烈推荐 Firebug, IE8 内置的 Dom 查看器也还不错)
最后,什么是 s
典型的说,一个 (发音为 emm) 是个垂直间距的印刷单位,是个浮动的(相对的)度量。一个 em 是一个文本尺寸的距离。 在10像素的字体里,一个 em 就是10像素。在18像素的字体里,它就是 18像素。因此, 在任何文本尺寸下,1em 的边距都会是成比例的(译者:都会是一个字)。