realazy


在IE中使用first-child

使用web standards做网页,经常需要定义某个父元素下的第一个子(child)元素或最后一个元素,以便将其与其他元素区分开来,有利于实现某些特殊需求。最浅显的例子是,导航项目间的竖线,我们往往通过border或者background来实现。特殊需求是,第一项左边无竖线或最后一项右边无竖线。

那么区分第一项好呢,还是最后一项好?答案是明显的,逼不得已,不要用区别最后一项。按照一般的编程方法,控制第一项要比控制最后一项容易得多

区分第一项的还有一个好处是,CSS有一个:first-child的伪元素(pseudo element)可以让我们轻而易举的选择第一个子元素。

遗憾的是,当前全球占有率最高的浏览器,IE6,并不支持这个伪元素。我们可以手工给第一个元素加上class然后再定义它。但这不是一个万无一失的办法,尤其对于页面规模达到一定数量大型网站,很容易挂一漏万。那么,让JavaScript来帮我们完成这件工作如何?

查看http://realazy.org/lab/first-child-js/

在IE中,为每个属于first-child的li加上first-child的class,则CSS则可以这样书写了::first-child, .first-child { some rules here...}(有没有发现这样写很帅,一个是冒号,两点;一个是点号,一点 :) ),十分便于维护和管理。

p.s.希望哪位高手能够写出通用的first-child来,我这里的例子只针对li,能力有限 XD …

11 Responses to “在IE中使用first-child”

  1. nic Says:

    谢谢安哥,正是我需要的文章,不过css的伪元素还都有哪些呢?

  2. old9 Says:

    可以参考dean edwards的”IE7″ js库
    http://dean.edwards.name/IE7/
    不光firsrt-child,它支持几乎所有css3的伪类,另外还扩展了很多其他功能,比如透明png的支持。
    可叹的是这个库在IE7发布前就早早发布了,结果IE7居然自己还没有能完全实现这个库的功能。一些js就能实现的东西,IE7偏偏不去实现,真是想不通微软的工程师怎么想的。

  3. mike Says:

    有更新了。。-

  4. lexrus Says:

    不用这么麻烦, IE 有 expression:
    li{
    lexrus:expression(this.style.color=this.parentNode.firstChild==this?’red’:”);
    }

  5. 杨康 Says:

    哈,确实喜欢看你这里的东西. 真的不错.

    看到我的链接在你这里,更开心.谢谢你!!

  6. bugsharp Says:

    喜欢你写的东西,
    也喜欢你这个人,
    哈哈,不要误会,偶也是男人。
    我是想找些有关网页标准的资料,找到了http://www.omemo.net/neo/,
    然后又找到了http://realazy.org/blog/。
    有空会常来的。

  7. 子乌 Says:

    呵呵,小龟的方式不错,不过似乎存在一个问题:

    当页面中的li达到一定数量的时候,使用expression造成的影响似乎非常可观,当然,如果限定了某几个class的li才有这个expression的话影响倒是不大~

  8. realazy Says:

    那个,经过学习,我发现了更好的东西,jQuery更能应付这些IE不支持的东西。目前正努力熟悉这个让CSS Coder无比亲切的light JavaScript Framework, 我会有后续报道的 :)

  9. Sparanoid Says:

    请问 ff 为什么不兼容这个 js?

  10. realazy Says:

    Sparanoid, FF不需要这个js啊,CSS中直接使用 :first-chlid 伪类就能工作了。另外,我在这个js里判断了浏览器,所以 FF 不感冒,呵呵。具体查看源码。

  11. 让IE6支持first-child和last-child伪类选择符 - 打渔樵夫 Says:

    [...] Realazy 是用 JS 来判断,加上选择符判断后,单为 IE6 [...]

Leave a Reply


realazy (懒到死) is proudly powered by WordPress | Entries (RSS) and Comments (RSS)