最好的学习是抄袭。
网易的标准化做得好,自然样式表的构建也可以成为教材。为了构建自己的样式表,从解读网易样式表开始。
网易的样式表是全部内嵌的,这点比较费解,完全牺牲了样式表的共用优势。可能是页面设计牵涉的部门众多,唯恐牵一发动全身造成页面显示问题。
样式表的第一段,把一些常用的标签去掉了默认属性,免得以后涉及这些标签的时候造成费解的默认样式问题。看上去比较合理:
/* CSS Document */
body { text-align: center; font-family:”宋体”, arial;margin:0; padding:0; background: #FFF; font-size:12px; color:#000;}
div,form,img,ul,ol,li,dl,dt,dd {margin: 0; padding: 0; border: 0;}
h1,h2,h3,h4,h5,h6 { margin:0; padding:0;}
table,td,tr,th{font-size:12px;}
定义链接样式。以往这四项链接是HTML标签解决问题,如今这段CSS就是顶替原来的HTML功能。其中的参数需要根据自己的定义做调整,这个功能段落还是满合理的:
a:link {color: #1f3a87; text-decoration:none;}
a:visited {color: #83006f;text-decoration:none;}
a:hover {color: #bc2931; text-decoration:underline;}
a:active {color: #bc2931;}
网易对标签使用了大量的多重定义方式,这有点象WORD里的方式。比如16像素的红色粗体字,就是先赋予字体16像素的大小属性,再赋予他粗细的样式属性,最后给他颜色属性。网易分别定义了自己的规则:
/* 颜色属性 [定义规则,小写c加颜色名称] */
.cRed,a.cRed:link,a.cRed:visited{ color:Red; }
.cBlue,a.cBlue:link,a.cBlue:visited{color:#1f3a87;}
.cDRed,a.cDRed:link,a.cDRed:visited{ color:#bc2931;}
.cGray,a.cGray:link,a.cGray:visited{ color: #4F544D;}
.cDGray,a.cDGray:link,a.cDGray:visited{ color: #666;}
.cWhite,a.cWhite:link,a.cWhite:visited{ color:#fff;}
.cBlack,a.cBlack:link,a.cBlack:visited{color:#000;}
a.cBlack:hover{color:#bc2931;}
.cYellow,a.cYellow:link,a.cYellow:visited{color:#ff0;}
.cGreen,a.cGreen:link,a.cGreen:visited{color:#008000;}
/* 字体属性 [定义规则,小写f加属性名称] */
.fB {font-weight: bold;}
.fI {font-style: italic;}
/* 字体大小*/
.f12px{ font-size:12px;}
.f14px{ font-size:14px;}
/* 其他属性 */
.left{ float: left;}
.right{ float: right;}
.clear{ clear: both; font-size:1px; width:1px; height:0; visibility: hidden; }
.hidden {display: none;}
.unLine ,.unLine a{text-decoration: none;}
.noBorder{border:none; }
可以说排版属性基本上都全了。这种组织方式可以不用去定义很多排版用的专用类,作为编辑人员来说也比较好阅读,思路不错。不过,我怎么觉得又好像回到HTML标签的时代了呢?到时候源代码列中必然充斥大量的CLASS。作为大站,这种方式可能是保持协同性的考虑。毕竟如果真的按语义来做“瘦身”的页面,对于网易这种门户来说太难了。再想想,这些标签其实有满大的发挥空间,比如红色在全局定义的时候是大红色,与别的标签组合嵌套后可以继承红色,并加上加粗属性,同时又不影响其他标签。
接下来,网易给类取名字的方式可以借鉴一下:先为要处理的大区域取一个类名,再在类名下套子类,一层层套下去。可读性确实不错。可惜在DW8下,样式的排列依然是一个问题。如果要看上去井然有序,必然要切换到代码模式下调整。按照网易这个思路,依然是类套类的方式,可读性问题确实解决得很好:
/* 左边内容 */
.leftContent{ clear:both;}
.leftContent .menu{ clear:both;height:22px;}
.leftContent .menu ul{}
.leftContent .menu li{ float:left; height:22px; list-style-type:none;cursor:pointer;}
.leftContent .menu li h6{font-size:12px;padding:6px 0 2px 11px; font-weight:normal; float:left;}
.leftContent .menu li h5{font-size:12px;padding:6px 0 0; font-weight:normal; }
了解了这些大方法,其他的就不用拘泥了,否则什么也干不了。
第一件事情就是定义站头。按照惯例,用id,名字叫“head”。英文单词不记得几个,这个倒是很顺手。其实名字严格来说没什么具体的含义,只是英文单词不认得几个,勉强就叫这个名字了。
把DW生成的外边距改成了简写的样式。发现,如果没有数值的话,不用填写单位;否则就一定要加单位,比如PX,否则IE认,FOX不认,认为是错误标签,直接无视。
<strong>修正以前对简写的一个误区</strong>:原来以为简写只能对称,比如0 2 0 2,简写成0 2;通过看网易代码发现,0 2px 9px 2px这种我认为要写全的格式,可以简写成0 2px 9px,即:如果左右相等,则可胡略最后一个数字。如果上下相等呢?……这个……逻辑上似乎无法简写。
<strong>修正以前对“绝对定位”的一个错误看法</strong>:从DW2开始我一直认为绝对定位是基于BODY为参照点,而BODY随很多因素变化,所以绝对定位没有实用价值。但是从《CSS禅意花园》上看,绝对定位被大量使用,因为他是基于“包含块”工作的,比”相对定位“更符合我们对相对定位的期待。但是今天准备用绝对定位来解决一个兼容性问题的时候才发现,它根本不认它的“爹元素”。于是把2001出的《CSS权威指南》翻出来看,在352页的一个不起眼的段落终于找到了答案。原来“包含块”并不就是上级元素,“包含块”本身必须要有“定位”属性,不管是相对还是绝对。根据这个特点,可以任意的定义包含块,只要将那个元素设置成“相对定位”属性就行了,这样不显山露水的就成为了具备定位属性的“包含块”,可以行使为“绝对定位”这个孩子导航的重任了。尽信书不如无书,作为实践性很强的科目,“看”书是没用的。