margin:10px5px20px;
这些缩写完全是根据给出值的数目和顺序决定的。总结起来,一个值=所有各侧;两个值=上下一种,两侧另一种;三个值=上侧一种,左右同一种,下侧一种;当然还有四个值=按照顺时针。好了,现在不那么难记住了吧?
边界(border)的一些区别
同样的钟面简记模型也可以用于border简记属性和padding。border-width,border- color,border-style,与padding也采用和margin一样的方式工作。然而处理border属性 时却有点不同。border属性是同时给盒子的各侧设置border-width,border-style,及border- color属性的。
如果所有四侧的样式都一样,那当然不会有什么问题。可万一他们不同呢?我们还得回去用那些老式的border-top,border-right们?没错,是可以。但幸好我们还有更有效率一点的方法。
考虑我们这个盒子的各个边界有同样的style和color,但宽度不同的情况,最有效的方法是,先像往常一样用 border简记法来定义好border-width,border-style,和border-color;然后再设置一次 border-width属性,覆盖上面设置的宽度:
border:10pxsolidred;
border-width:10px5px3px0;
如果所有的边界属性(width、style和color)都各侧不同,那上面的方法恐怕就没什么用了,但通常不会遇到这么怪异的情况。如果变化 的属性仅仅是border-style或者border-color的话,上述的方法改改就可以像border-width的情 况那样用了。
下面我们看看在另一种情形下书写高效的CSS会带来什么改变。
多重声明
考虑我们有6个采用绝对定位的div(比如Dreamweaver里的层),且它们的其他属性都一样,只不过在页面中的位置不同。因为它们的位置不同,自然应该有不同的ID或者是class,但剩下的属性还是一样的。
一个(所见即所得的)布局编辑器恐怕给每个ID都各自写一套属性,包括字体的规则、文本的规则、位置的定义等等。可一遍遍地给这些div重复完全一样的规则未免笨了点,不是么?那这样就可以把这些规则减到最短了:
#first{left:0;}
#second{left:100px;}
#third{left:200px;}
#fourth{left:300px;}
#fifth{left:400px;}
#sixth{left:500px;}
#first,#second,#third,#fourth,#fifth,#sixth{
position:absolute;
top:0;
width:75px;
font-size:.9em;
font-weight:bold;
text-align:center;
line-height:1.4em;
background-color:silver;
color:navy;
padding:5px;
border:1pxsolidnavy;
}
列出所有类似的这些div的ID,用,和一个空格分隔,下面的规则块会被应用到所有这些ID上。显然这样的规则如果给每个ID都重复一遍,代码就膨胀得多了。这恐怕是最常用也最有效的缩短样式表方法了。
注意:注意最后一个ID选择符并没有跟着一个逗号。(若多了逗号)有些浏览器中可能还能看到那些div,另一些就有可能把这样的样式表视为错误而不显示任何一个div了。
默认值
许多CSS属性都有它们的默认值,如果这个属性没被定义取代,它们就将应用于HTML元素上。比如说每个补白属性中, padding-top,padding-right,padding-bottom,和padding-left的初始值都 是0。因此如果某个元素不需要任何的补白,自然就可以不设置补白的那些属性了。
注意:那些简记属性——比如我们先前讨论过的——里面,或者其本身都没有什么默认的值。毕竟简记属性其实只是独立属性的一种重现而已, 所以如果硬说它们有默认值的话,采用的也是独立属性的那些默认值。尽管CSS规范的PropertyIndex一节中规定的许多默认值都是 none或0,浏览器们却往往给不同的属性设置一些不同的默认值。
例:Opera浏览器给body元素设置了8px的补白。h1-h6标题和段落,默认都有非零的边白。列表和列表子项中用到的默认边白和补白,每个浏览器都有所不同。