Answers:
该:last-child
伪类仍然无法可靠地跨浏览器使用。特别是Internet Explorer <9和Safari <3.2绝对不支持它,尽管Internet Explorer 7和Safari 3.2 确实支持:first-child
。
最好的选择是last-child
为该项目显式添加一个(或类似的)类,然后应用li.last-child
。
:last-child
。
另一种可能对您有用的解决方案是逆转关系。因此,您将为所有列表项设置边框。然后,您将使用第一个孩子消除第一个项目的边框。所有浏览器均静态支持第一个孩子(这意味着无法通过其他代码动态添加第一个孩子,但第一个孩子是CSS2选择器,而在CSS3规范中添加了最后一个孩子)
注意:仅当列表中只有2个项目(例如您的示例)时,这才可以按预期方式工作。任何第3个项目及以上项目都将应用边框。
如果您认为可以使用Javascript,那么由于有了jQuery支持last-child
,因此可以使用jQuery的css方法,它的优点是它将支持几乎所有浏览器
示例代码:
$(function(){
$("#nav li:last-child").css("border-bottom","1px solid #b5b5b5")
})
您可以在此处找到更多信息:http : //api.jquery.com/css/#css2
$("#nav li:last-child").addClass('last-child')
以便可以将样式保留在样式表中。
div:last-child
和的类div.last-child
。看来它认为:last-child
语法无效,并且不会应用带有该伪选择器的任何类。
如果列表项的数量是固定的,则可以使用相邻的选择器,例如,如果只有三个<li>
元素,则可以选择最后一个<li>
:
#nav li+li+li {
border-bottom: 1px solid #b5b5b5;
}
li + #nav li
选择后面的li
内部。您的选择器应为。#nav
li
#nav li + li + li
如果您发现自己经常需要CSS3选择器,则可以始终在网站上使用selectivizr库:
这是一个JS脚本,为几乎不支持CSS3选择器的浏览器增加了对它的支持。
<head>
使用IE条件将其放入标签中:
<!--[if (gte IE 6)&(lte IE 8)]>
<script src="/js/selectivizr-min.js" type="text/javascript"></script>
<![endif]-->
作为使用类的替代方法,您可以使用详细列表,将子dt元素设置为一种样式,将子dd元素设置为另一种样式。您的示例将变为:
#refundReasonMenu #nav li:dd
{
border-bottom: 1px solid #b5b5b5;
}
的HTML:
<div id="refundReasonMenu">
<dl id="nav">
<dt><a id="abc" href="#">abcde</a></dt>
<dd><a id="def" href="#">xyz</a></dd>
</dl>
</div>
两种方法都不比另一种更好,这取决于个人喜好。
如果您浮动元素,则可以颠倒顺序
即float: right;
代替float: left;
然后使用此方法选择类的第一个孩子。
/* 1: Apply style to ALL instances */
#header .some-class {
padding-right: 0;
}
/* 2: Remove style from ALL instances except FIRST instance */
#header .some-class~.some-class {
padding-right: 20px;
}
实际上,这实际上是将类应用于LAST实例,因为现在的顺序相反。
这是一个适合您的工作示例:
<!doctype html>
<head><title>CSS Test</title>
<style type="text/css">
.some-class { margin: 0; padding: 0 20px; list-style-type: square; }
.lfloat { float: left; display: block; }
.rfloat { float: right; display: block; }
/* apply style to last instance only */
#header .some-class {
border: 1px solid red;
padding-right: 0;
}
#header .some-class~.some-class {
border: 0;
padding-right: 20px;
}
</style>
</head>
<body>
<div id="header">
<img src="some_image" title="Logo" class="lfloat no-border"/>
<ul class="some-class rfloat">
<li>List 1-1</li>
<li>List 1-2</li>
<li>List 1-3</li>
</ul>
<ul class="some-class rfloat">
<li>List 2-1</li>
<li>List 2-2</li>
<li>List 2-3</li>
</ul>
<ul class="some-class rfloat">
<li>List 3-1</li>
<li>List 3-2</li>
<li>List 3-3</li>
</ul>
<img src="some_other_img" title="Icon" class="rfloat no-border"/>
</div>
</body>
</html>
:last-child
。这不是说好奇。:first-child
是CSS2伪类,:last-child
是CSS3伪类。