This box will be fixed on your screen using Firefox, Opera9 or IE7.

向xhml 1.0 strict进军

99%的网页都是过时的,Jeffrey说的没错,最近仔细观察了一下,国外的从Yahoo到Adobe,国内的新浪到搜狐几乎没有一个能够通过W3C的页面。查看这些页面的源码你会发现处处都充斥着表格,表格中还有表格……不过令人欣喜的是MS也开始重构MSN.COM了,推出了一个Public beta,遵循XHTML 1.0 Strict规范,结构和表现进彻底分离,页面也变得清爽多了,尽管通过检验还是有十多个错误,但至少我们看到MS也在向WEB标准靠拢了。

Blog的出现给WEB世界带来了一股清风,比较出名的几个程序都能符合WEB标准,通常都能达到XHTML 1.0过渡版要求,WP也是其中一个。特别是完全遵守WEB标准的Firefox1.0的发布更是掀开了更加热烈的讨论,人们纷纷讨论某些知名网站怎么会在Firefox下支离破碎,惨不忍睹,这也必定会引起那些知名站点老板的注意,他们开始听取WEB专家的建议,对页面进行重构,国内至少听到网易要对一些版块的前台进行重构,估计下一步会得到更多大站的注意。当然,我们希望不管是大站还是个人小站,都能按照WEB规范来编写,那么WEB的世界就会更加干净和清爽。标准的好处就毋须再赘述了,无论对站点所有者还是浏览的普通用户,最起码能做到大量的节约,节约宝贵的费用和时间。

WordPress是XHTML 1.0 Transitional(过渡版)有效的,如果你有良好的习惯,那么完全可以升级到Strict(严格版)。相对于过渡版,严格版的要求当然是更加严格一些,移除了所有与表现相关的元素和属性,比如font、center等等这些元素,还有大量的一些元素下的表现属性,比如常见的img下的name、align、border等等属性在Strict版本中都是禁止的,你应该用CSS来定义这些属性。而且用CSS只会更方便和做到页面统一。所以我决定升级到XHTML 1.0 Strict去,更严格的要求一下页面。其实没有什么要修改的地方,一个是a标签中的target属性不再合法了,所以不管是什么链接(主要在友情链接中使用了这个属性),我都去掉了这个属性,你如果要在新窗口打开一个链接,请自行使用浏览器中的功能。再一个就是form中没有name属性了,去掉就完了,其他就没有什么了,随机校验了一下首页和最近的几个文章,都没有问题。但以前的部分文章可能会有点问题,暂时不可能去每一个文章都去W3C校验一番,只能是发现一个解决一个。所以Strict版本并不可怕,你也许也可以轻松升级。

20 Comments

  1. 猪团团 Comments @ 11:25:56 on 2004-12-29

    DARK:

    我也正在看xhtml, 不过我看的是1.1标准的.
    探讨一下,

    1 如果有超出两栏的UI,不使用table来精确定位, CSS该如何做到呢?
    我粗粗看完了CSS2的文档, CSS在float的时候只有left/right可以选, 如果我需要有几个层, 并排成左中右三栏, 或更多栏.
    我看到MSN的页是三栏的, 不知道他怎么搞的, 俺研究下…

    2 如果form不使用name属性, 那在DOM里的可读性企不是非常差?
    比方我需要用form[2]来表示页面中的第三个form, 并且如果有人在header里添了form,我的form就变成form[3]了. 不能用名字来索引似乎蛮麻烦的.

    另外, 补充一点.在符合XHTML标准的同时, 也需要符合CSS标准
    滥用CSS同样会导致用户在不同的浏览器里看到不一样的UI
    http://jigsaw.w3.org/css-validator/validator?uri=[Page URI]
    这里有W3C官方的CSS检验

  2. dark Comments @ 11:52:11 on 2004-12-29

    ui?还是ul?你是说界面?Div一般用CSS有n多方法来定位,float是用来控制空间浮动的。
    name废除了就用id更好,而且name无法应用于超链接中,这是最早Netscape的方法。
    你说我的CSS?应该现在检验是按照CSS2来的,但目前比如像Firefox支持部分CSS3的属性,我这儿应用了一个CSS3的属性选择符,所以会提示有几个错误,并非是滥用,你用Firefox来看我的页面就知道了,这个效果是非常好的,就是所有的外部链接会有一个额外的小图标来指示。这是在CSS2中无法做到的。

  3. 猪团团 Comments @ 12:32:12 on 2004-12-29

    :D
    UI = user interface.

    在IE的DOM模型中, 索引元素使用的是索引下标或者是name属性里的值
    但索引下标在页面里和元素出现的顺序有关. 这样同一段程序就会出现不确定性.
    打个比方吧, 我们要写WP的插件, 如果我们想控制WP里某一个form的行为, 我们只能用form[0]来引用这个form. 但如果我们又同时下载了一个theme, 这个theme在header里加了一个用于全文索引的form, 于是插件的作用就应用到了这个新的form[0]上了, 插件就和theme冲突了. 但如果用name的话就不会引起这些问题了.
    不幸的是, 即使是在1.0的过渡和框架标准中, 也都舍弃了name.
    所以我才想探讨一下如何不通过name也能正确地让程序工作在该工作的地方.
    最差的结果就是等IE的下一个板本出现.

    我说的CSS校验并非说你的BLOG页面.
    我是指你的动机, 号召大家把页面做成符合xhtml1.0的同时, 还应该让大家注意要符合css检证. 我们不应该顾此失彼不是吗. 呵呵 ^_^

    另外, 关于xhtml 1.1和1.0我已经得到答案了.
    我看了一下XHTML 1.0的http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd和1.1的DTD似乎基本一样. 只是术语上有些区别. 所以严格符合1.0的页面也会严格符合1.1的.
    不过看DTD累了点, 可惜的是1.0文档的中文化处在 (no longer available) 状态, 不然有中文文档理解起来要容易很多. 必竟中文化的术语在国内业界比较流行.

    id document-wide unique id
    class space separated list of classes
    style associated style info
    title advisory title/amplification

  4. 猪团团 Comments @ 12:33:24 on 2004-12-29

    啊, 最下面四行不是我想发的.
    刚才在我的剪帖板里, 可能是按了什么热键在提交前被帖到文章里去了.
    阅读的时候请乎略最后四行.

  5. dark Comments @ 13:19:41 on 2004-12-29

    ie不能识别id么?应该是一样的吧,而且id是唯一的,对浏览器的兼容更好呀。所以以后要用id来代替name,反而更方便。
    怎么顾此失彼了?呵呵,xhtml和css本来就是相辅相成的,可以说是孪生兄弟,一个控制结构,一个控制表现。WP声称是符合1.0过渡的,其实如果前台规范一点的话,符合Strict也没问题,问题主要是出现在有时写文章时,会滥用过时的HTML方法,当然浏览器能够识别,所以容易让人忽视这个问题。所以我的目的就是:一,改造一下你的Theme中不符合Strict的地方;二,写文章时要注意避免过时的一些东西。养成良好的习惯。
    xhtml1.1的DTD我也下载了,还没有细看,最近只是把1.0Strict看了,而且看到XHTML2.0的标准也出来了,变化很大,甚至废除了img这些元素,主要看下一代浏览器如何支持了,而且人们也不会很快适应,所以不会很快应用的。

  6. 猪团团 Comments @ 13:44:51 on 2004-12-29

    试试看就知道了. 在IE的DOM里, 用id来引用, 会出错, 找不到对象. 但在firefox和NS 4.6以上是可以用的.

    ^_^ 注意我的话里有个”还”字.
    从CSS标准的几个更新可以看出来, 新加的规则, 伪类, 伪元素,都是为了避免老规则应用得不好导致解释程序岐意. 说明CSS是会引起岐意的.
    比方你在#里定义了float:left, 又在class里定义了float:right, 这样的CSS就通不过检验, 但在ie里却能正确显示. IE会照顾后出现的声明.
    因为大家都不在html里定义表现了, 在CSS里定义的话, 写得不好的CSS 就有可能出现在IE里显示很好而在别的浏览器里看上去不一样的情况. 这就是我说的顾此失彼.

  7. dark Comments @ 16:00:31 on 2004-12-29

    id是唯一的,class是可以到处用的,所以你如果能纯熟运用的话,就不会出现既用id又使用class同时定义float:left的错误,这属于理解和使用上的失误,不能怪罪于css的。呵呵,我也是在不断学习中。
    同时谢谢你,我检验了一下CSS(平时很少校验CSS),发现几个字体居然没打逗号,汗 :oops: ,造成了几个错误和警告,这下全修正了,这下只有几个CSS3属性报错,其他没有错误和警告了。

  8. rainbowsoft Comments @ 20:46:11 on 2004-12-29

    xhml 1.0 strict是不是有点太过头了呢,我认为过渡模式已经可以了,再发展是不是連XHTML就要下课了,最好全用XML+XSLT。
    技术上实现并不难,只是目的上是为了什么呢,只是一个小小的LOGO吗?

  9. dark Comments @ 21:09:05 on 2004-12-29

    呵呵,事实上我并没有放W3C的Logo(不过可能是我自己比较BT,因为最近看一直标准方面的资料)。上面说了,其实Strict与Transitional区别并不是很大,移除的基本上是表现方面的元素和属性,比如像align在过渡版中是可以用的,但完全可以用css来控制,反而在维护的时候会更方便些。还有一个好处就是拉近不同浏览器产生的效果。严格说Strict并不BT,国外很多Blog都使用xhtml1.1了(1.1与1.0Strict的区别我还没看,所以先整到1.0Strict再说)。

  10. rainbowsoft Comments @ 05:31:50 on 2004-12-30

    如果有时间,我也会尝试下Strict,个人认为用Transitional已经走完了80步了。
    不介意的话,做个友情链接呵~贵站的链接已经做好了!

  11. 猪团团 Comments @ 11:02:59 on 2004-12-30

    符合严格的标准的目的在于让HTML源的可读性增强, 这个可读性不是对人的, 是对机器的.
    XHTML有存在的必要. 它保留了浏览器交互的惯有模式.
    XML+XSLT只是为了表达, 并不是为了交互. 在XSLT里, 还不是xhtml的语法嘛. 大汗.

    ========
    俺已经知道如何用CSS分更多的栏了. 基本有些象oop, 用div把div封装再封装.
    但了解不够呀. 还需要有个经验积累的过程.
    现在就又遇到了难题, 也许解决起来很容易.
    如何把12px高的文字定位在29px高的div的中间, 也就是垂直居中.
    直接用css的垂直居中无效, 因为css的垂直居中是以行高为单位的, 29px里有2行.

  12. dark Comments @ 12:46:06 on 2004-12-30

    to rainbowsoft:done! 有空多交流。thx
    猪猪:用padding,或者直接用padding-top,自己计算一下。

  13. 猪团团 Comments @ 17:18:10 on 2004-12-30

    汗… 如果一行字里有大有小呢? ^_^
    我已经搞定了, 碰巧看到了XHTML 1.1检查页里的tip of the day.

    另外, 检查页最下方还有一行字, 和我想表达的意思一样:
    If you use CSS in your document, you should also check it for validity using the W3C CSS Validation Service.

  14. dark Comments @ 18:51:11 on 2004-12-30

    什么嘛?padding就是用来指定容器内部补白的嘛,你又不给个实例,让人怎么说嘛? :sad:
    你是不是说我的CSS有问题?没有任何问题嘛,你觉得哪儿有问题还请指点出来。 :shock: 表吱吱唔唔的嘛。我这里随便说的,你不要有什么担心。

  15. rainbowsoft Comments @ 19:44:39 on 2004-12-30

    我的体会:对于CSS的应用非要千万次的试验,没有什么捷径,要想达到随心所欲的境地,只有自己不断的积累。
    padding,margin,border这三个东东最扰人,但用好了,什么浏览器都不怕。
    我们的目的都是一样的:都想把HTML做的更好。

  16. dark Comments @ 20:17:15 on 2004-12-30

    嗯,要写一个能够在IE下也效果一样的css(IE5.5和IE6区别很大)真的难多了,本来很多时候某些css可以定义得不那么复杂的(最近看到很多实例)。

  17. 猪团团 Comments @ 11:42:22 on 2005-01-03

    从CSS的实现上看, IE6和FireFox1区别都不少.
    从我的比较上看来, IE6兼容性好很多. firefox符合得比较严格.
    但FireFox也有一些缺漏是IE6实现了的.

    比方在一个DOM结构里,
    如果你定义了<body style="text-align:center">
    但里面的div不做任何设置的话,
    结果DIV在firefox里不会居中.
    需要设置 <div style="margin:auto"> 才能居中.
    在IE里这个错误是没有的.

  18. 猪团团 Comments @ 11:43:29 on 2005-01-03

    天, 我写的tag全部消失了…
    比方在一个DOM结构里,
    如果你定义了 [body style=”text-align:center”]
    但里面的div不做任何设置的话,
    结果DIV在firefox里不会居中.
    需要设置[div style=”margin:auto”]
    才能居中.
    在IE里这个错误是没有的.

  19. dark Comments @ 14:32:32 on 2005-01-03

    呵呵,这种情况下你要用实体符号来表达,不能直接写标签(最好再用CODE标签包起来)。text-align本意是文本流的对齐方式。在Firefox中div容器需要再设置margin左右为auto即可。这也扯不上说IE的兼容好。

  20. Daniel.Liu Comments @ 17:18:58 on 2006-06-22

    如何把12px高的文字定位在29px高的div的中间, 也就是垂直居中.
    可以通过行高来解决