学点高效地进行CSS编码的技巧吧,让你把样式表马上裁减到最小为止。自然,你可能看不到什么惊人的改变,但对于大站来说,微小的字节减少也很重要。
效率有什么用?
CSS被吹捧的好处之一就是它能减小页面大小,由此缩短下载时间,不仅仅是首页的载入,还包括样式表被缓存以后,后续页面的载入也被加快了的那部分时间。这没错,但首页载入时间的缩短几乎看不出来,这是因为CSS代码往往过于冗长了。
好吧,现在一切都不同了。
有很多地方可以减少代码的长度,包括简记属性(shorthandproperties),多重声明 (multipledeclarations),默认值(defaultvalues),继承(inheritance),和空白 (whitespace)。
简记属性
Zeroingpagemargins提到了一组这样的简记属性,但对于此还有更多的。
通常简记属性包括:
font(控制"font-size","font-weight","line-height",等等)
background(控制元素的背景,放置位置,重复次数,等等)
list-style(设置列表元素前边那个“原点”的属性)
margin(定义box各侧的边缘空白(margin)宽度)
border(定义box边界(border)的属性——有很多和边界有关的简记属性)
padding(定义box各侧的补白(padding)宽度)
上述项目是链接至W3CCSS2规范的相关章节的。
例如,font属性是用于同时设置font-style,font-variant,font-weight,font-size, line-height,和font-family的简记属性。当然,它们并非全都必须写在简记属性中。一旦在简记属性中忽略了其中某个,那些缺 失的属性都将被设置为它们的初始值,就像W3C规范中fontproperty一节提到的那样。若需要控制很多和字体相关的属性,使用 这个简记属性就可以省下样式表中的大量字节了。
background和list-style属性也是如此。现在还剩下关于CSS盒(box)模型四边的那些属性和一点没法归类的杂碎了。
盒侧边的简记属性
任何块级(blocklevel)元素(像div,表格,列表,段落等)的四边都有边白(margin),边界 (border),和补白(padding),都可以分别设置不同的宽度。对于边界(border)来说,还能给每边分配不同的border -style和border-color。若要一条条地显式地指明所有这些属性,代码就会变得很冗长。使用简记规则的意义正在于此:彻底地减少 这样负担。
“钟面”
当需要指定这三类“盒侧”属性之一,而且各侧的情况又是一样的时候,使用简记属性最基本的功能就行了:
margin:5px;
border-width:5px;
padding:5px;
注意:要让边界显示出来,还必须设置border-style属性,否则单有border-width边界是显示不出来的。既可以直接通过border-style来设置它,也可以通过border属性。
然而很有可能某一侧需要一个不同的值,这时CSS的“钟面”特性就上台了。把此处的盒子想象为一个钟面,当指针指向12点时,表示 盒子的正上方,这就是简记属性中第一个值的含义;下一个是3点,这是盒子的右侧;接下来是6点,表示盒子的下方;最后呢是9点,盒子的左侧。
让我们看看这个例子吧。在页面中我们需要一个10px上边白,5px右边白,3px下边白,无左边白的盒子。则margin简记属性应该这么写:
margin:10px5px3px0;
在属性的声明中,几个值必须也只能用空格来分隔。而且只要那个值不是零,就必须给它指定单位。
为什么零宽度的边白就不需要指定单位了呢?因为零个任何单位(px,em,%,等等)的值也就等于任意其他单位的值。
改进的钟面
当某些值重复时,这些“盒侧”属性还能压榨得更短。前面提到过,若各侧都一样,可以只指定一个,让它应用到全部。而一旦顶部和底部的样式是一致的,左侧和右侧却是另一种,margin的代码可以这么写:
margin:10px5px;
这行代码把顶部和底部的边白设置为10px,两侧设为5px。最后一个技巧是这样的:若顶部和底部的不同,两侧的却是一样的,比如上边白10px,左右边白5px,下边白20px,我们可以这么写: