“风讯4.05”实战第十三天:样式应用注意事项两则

当指定A标记为块并用背景替换文字时,常常要设定块大小(比如常见的“更多”)。在IE下这个时候容易出现问题:当A中的字比块大时,块将被撑大。FOX下没这个问题。解决方法:单独为A设置溢出隐藏,或者将A的字体设置得够小,小到不足以撑破块。

修正一个重要误解:网上流传的不换行自动加省略号的样式代码存在重大缺陷。那段代码中使用了标签来防止换行。这个标签是微软专用标签,不是HTML的标准标签。其实在样式中设定“不换行”也是一样的。原来我以为设置了溢出,IE就自动会加省略号。事实不是这样,他使用了一个MS专用样式“text-overflow:ellipsis”。只要这个标签有宽度,设置了溢出隐藏,再加上这个溢出的样式设定,就能产生省略号效果了。

一个测试了N久发现的IE/FOX兼容问题:在带时间的新闻列表中一般用

  • 包含完成左右对齐。实际效果中IE总是要多出四个像素的行间距离,只有设置了左浮动,两者效果才能统一。为这个问题忙活了3-4个小时。

    做到目前的地步,回想一下起初在手外网站应用标准的困难和女子医院的排版失误,其根结都在不懂得使用“清除”,一味的浮动,结果造成了FOX下的严重排版故障。 “清除”非常非常重要,不懂它,就不懂CSS排版。仔细想想,这个经验似乎也是《CSS禅意花园》中看来的。

  • “风讯4.05”实战第十二天:图片导航经验一则

    图片导航一般由LI组成,保持内联模式不边,然后让A成为块显示,将链接文字缩进设定为负数,并指定A快大小、边距,然后用图片作为背景,形成图片导航效果。
    在这个过程中要特别注意几点:

    1、fox下A块中缩进的文字会显示出来,需要设定“溢出隐藏”。这个隐藏应该加在li的身上。如果加在A的身上也没有问题,但是在DW下会导致显示混乱。

    2、LI不需要设置成块属性,本身是内联属性,块属性的重任已经交给A标签了。

    “风讯4.05”实战第十一天:再度纠缠于样式表

    又碰到一个兼容性问题。IE下,当块向左移动时,左边距按两倍计算。解决方法是把块设置成内联属性。我看网易的解决方法是用父元素的内边距来空位,而不使用浮动块的外边距。

    当两个DIV块嵌套时,如果父套无内容,则fox中上边距重叠。在BI咨询了一下,似乎本该如此。我奇怪的是既然边距重叠,为神什么左边距不重叠呢?搞了个CSS2中文文档看,据说里面有答案,不过近期是没可能去详读了。

    IE和fox在版面处理上总是存在差异,好在这次发现的差异基本都是1像素级的,能带就带过去了。倒是DW和两浏览器的差异值得注意了。在处理表单物件的时候,DW总不能根据样式表的设定正常显示,这个差别比IE和FOX的差别大得多得多,甚至影响了版面效果,我不得不以溢出隐藏的方式对待它,否则后面的排版无法进行下去。

    深刻领会到“定位”的重要。 以前我对他的成见太严重,不是《css禅意花园》的引导,可能只有通过阅读大量源码才能领会它是如此普遍而正确,并且非常好用。这几十块钱花得值。

    得出一个教训:测试样式表时不要用外联方式。直接内嵌做测试,可以减少很多不必要的麻烦,避免一些调试的问题。或者,把DW的预览设置成临时文件预览,也可以避免调试的不确定性给工作带来的麻烦。

    第一次比较完整的贯彻标准概念。感觉是以前把标准看得太“干净”了。实际工作中并不是每个内容都能在HTML中找到语义的,如果彻底迁就语义,那么现有的设计方式都需要更新,彻底忘记以前用的方法,胡略掉客户对你的要求。这不现实。通过查看分析网易的做法,确实觉得他的折中方案不错,大型门户也只有这么干了。否则HTML是干净了,但是CSS将变得一塌糊涂,再加上HACK,那简直就是密码文件。光鲜其外败絮其中就是指这种状态了。如果HTML的标准能让搜索引擎迅速提升PAGE值也还罢了,关键是能否达到这种效果目前看来都是一厢情愿。再说了,真正的客户谁管这些。

    “风讯4.05”实战第十天:构建静态模板,解读网易样式表

    最好的学习是抄袭。

    网易的标准化做得好,自然样式表的构建也可以成为教材。为了构建自己的样式表,从解读网易样式表开始。

    网易的样式表是全部内嵌的,这点比较费解,完全牺牲了样式表的共用优势。可能是页面设计牵涉的部门众多,唯恐牵一发动全身造成页面显示问题。

    样式表的第一段,把一些常用的标签去掉了默认属性,免得以后涉及这些标签的时候造成费解的默认样式问题。看上去比较合理:

    /* 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页的一个不起眼的段落终于找到了答案。原来“包含块”并不就是上级元素,“包含块”本身必须要有“定位”属性,不管是相对还是绝对。根据这个特点,可以任意的定义包含块,只要将那个元素设置成“相对定位”属性就行了,这样不显山露水的就成为了具备定位属性的“包含块”,可以行使为“绝对定位”这个孩子导航的重任了。尽信书不如无书,作为实践性很强的科目,“看”书是没用的。

    “风讯4.05”实战第九天:开始模板之旅

    系统和内容大约地搞定,进入最重要的表面工夫:模板。目前来说完全照标准还有难度,所以采取以标准为目标,先期杂和TABLE的方式,以最快速度上线。

    风讯405提供的整合模板版本非常垃圾,甚至新闻列表的每一行都是一个TABLE,不知道是不是因为他的在线编辑器的原因,造成样式无法单独使用TR标签。感觉风讯的编辑器对于标准执行非常严格,而且智能化程度太高。比如段落开始的地方如果有半角空格就会被自动清除,而全角空格则不然。

    风讯在发布的时候会在文件中加入一个JS调用标签和一个注释。JS是一个注明的JS类,对于重新制作模板的用户来说,这个前台的类应该用不着,需要去除。注释里有风讯的版权标志,也可以清除,避免“君子”太容易识别出网站所用的CMS系统。如果要清除的话,整站中有两个文件需要修改:

    1、\Admin\PublicSite\Public_Function.asp 的最后一段。
    2、\FS_InterFace\MF_LoadLabel.asp 的最后一段。

    将其中引号包含起来的值换成空格。