在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 …
July 6th, 2006 at 11:47
谢谢安哥,正是我需要的文章,不过css的伪元素还都有哪些呢?
July 6th, 2006 at 21:45
可以参考dean edwards的”IE7″ js库
http://dean.edwards.name/IE7/
不光firsrt-child,它支持几乎所有css3的伪类,另外还扩展了很多其他功能,比如透明png的支持。
可叹的是这个库在IE7发布前就早早发布了,结果IE7居然自己还没有能完全实现这个库的功能。一些js就能实现的东西,IE7偏偏不去实现,真是想不通微软的工程师怎么想的。
July 7th, 2006 at 14:05
有更新了。。-
July 10th, 2006 at 00:38
不用这么麻烦, IE 有 expression:
li{
lexrus:expression(this.style.color=this.parentNode.firstChild==this?’red’:”);
}
July 11th, 2006 at 00:36
哈,确实喜欢看你这里的东西. 真的不错.
看到我的链接在你这里,更开心.谢谢你!!
July 12th, 2006 at 10:55
喜欢你写的东西,
也喜欢你这个人,
哈哈,不要误会,偶也是男人。
我是想找些有关网页标准的资料,找到了http://www.omemo.net/neo/,
然后又找到了http://realazy.org/blog/。
有空会常来的。
July 30th, 2006 at 01:16
呵呵,小龟的方式不错,不过似乎存在一个问题:
当页面中的li达到一定数量的时候,使用expression造成的影响似乎非常可观,当然,如果限定了某几个class的li才有这个expression的话影响倒是不大~
July 30th, 2006 at 01:47
那个,经过学习,我发现了更好的东西,jQuery更能应付这些IE不支持的东西。目前正努力熟悉这个让CSS Coder无比亲切的light JavaScript Framework, 我会有后续报道的
November 21st, 2006 at 21:41
请问 ff 为什么不兼容这个 js?
November 21st, 2006 at 21:46
Sparanoid, FF不需要这个js啊,CSS中直接使用
:first-chlid伪类就能工作了。另外,我在这个js里判断了浏览器,所以 FF 不感冒,呵呵。具体查看源码。November 22nd, 2009 at 16:17
[...] Realazy 是用 JS 来判断,加上选择符判断后,单为 IE6 [...]