0

我在我的樣式表中有一個鏈接列表的CSS規則。首先是對<a>標籤一般規則,最後兩個是與故障接管了first-childlast-child僞類CSS特性IE8

/* weight: (1 class) + (3 elements) = 13 */ 
.topNavigation ul li a { 
color: #666; 
text-decoration: none; 
display: block; 
font-size: 28px; 
margin: 5px 20px; 
} 

/*for both rules: (1 class + [1 pseudo class or 1 class]) + (3 elements) = 23 */ 
.topNavigation ul li:first-child a, .topNavigation ul li.first-child a { 
margin-left: 0; 
} 
.topNavigation ul li:last-child a, .topNavigation ul li.last-child a { 
margin-right: 0; 
} 

HTML中的第一個和最後一個孩子的具體規則是這樣的:

<div class="topNavigation"> 
<ul> 
    <li class="first-child current"> 
     <a href="#">home</a> 
    </li> 
    <li> 
     <a href="#">services</a> 
    </li> 
    <li class="last-child"> 
     <a href="#">blog</a> 
    </li> 
</ul> 
</div> 

總體思路是鏈接包含在<li>中,並且距「<li>」的邊緣「保證金」。問題在於IE8不遵守特殊性,並仍在使用第一條規則(margin: 5px 20px;)中所述的邊距。我已經在IE7,IE9,Chrome和其他瀏覽器中測試過它,只有IE8沒有跟隨。

這個規則有什麼問題嗎?還是我監督一個IE8的錯誤?

+0

我使這個[的jsfiddle(http://jsfiddle.net/Galled/xzFuQ/),但我在所有瀏覽器中看到相同的行爲。你可以放置一張圖片或其他東西嗎? – Galled

+0

據我所知,在IE8及以下版本中不支持最後一個孩子,而所有IE版本都支持第一個孩子直到7.我看到您已經手動添加了「first-child」和「last-child」類到你的HTML。在這種情況下,你可以很容易地使用普通的類選擇器,而不是僞選擇器,它可以在所有瀏覽器中完美運行。 – Raghav

+0

@Srini:你的意思是「所有的IE版本都是從* 7開始的」:) – BoltClock

回答

2

您組合在本規則中的僞類和類​​選擇:

.topNavigation ul li:last-child a, .topNavigation ul li.last-child a { 
margin-right: 0; 
} 

由於IE < 9不瞭解:last-childit should disregard the entire rule(我不知道爲什麼你的作品在IE7,它應該在IE7和IE8中以相同的方式中斷),儘管它可以理解並應用.last-child的規則。因此,它可以回落的唯一保證金就是您的第一個保證金。

從技術上講,唯一的解決辦法是將其分成兩個規則,每個規則一個。

但我建議你只需要添加HTML類。既然你已經在做,爲了支持舊的瀏覽器,還不如把它,因爲所有的瀏覽器支持:

.topNavigation ul li.first-child a { 
margin-left: 0; 
} 
.topNavigation ul li.last-child a { 
margin-right: 0; 
} 
+0

這就是Bluprint CSS框架如何使用組合方法進行故障轉移。我會稍後測試你的方法並給出反饋。 http://blueprintcss.org/blueprint/src/forms.css – Joseph