2013-07-05 228 views
2

我有一個關於CSS選擇器如何在父和子之間工作的問題,以及哪一個會優先於另一個。父選擇器優先於CSS中的子選擇器嗎?

<div class="red"> 
    <div class="blue"> 
    <div class="green"> 
    </div> 
    </div> 
</div> 

如果再有

.red .green{ 
    border: 1px solid red; 
    } 

    .blue .green{ 
    border: 1px solid blue; 
    } 

哪一個會生效?要重寫一個CSS樣式,它是否必須與您要覆蓋的樣式一樣具有特定的選擇器?

+0

難道你不是指'.red .green'和'.blue .green'嗎?否則,您將第一種樣式應用於'.red'和'.green',將第二種樣式應用於'.blue'和'.green'。 – Dom

+0

對不起,是的,這就是我的意思! – user2128225

+0

你也可能會發現[我對這個問題的回答](http://stackoverflow.com/questions/3311629/why-is-the-selector-of-lesser-specificity-than-anything/3311930#3311930)(和對該答案的評論很長)啓發。 – ScottS

回答

5

您應該閱讀specificity

要回答您的直接問題,所有選擇器都具有相同的特性,所以在.green的情況下,最後一個規則優先:您的邊框將爲藍色。

+0

即使您在提供我的答案後更改了問題的參數,它仍然適用。 –

+0

感謝您的鏈接,我會看看! – user2128225

+0

覆蓋CSS樣式是否具有相同級別的選擇器? 或者它只是基於CSS的順序? – user2128225

0

父選擇器包含那些未分配值的標記中的所有內容。所以在你的情況下,第二,你想在那裏添加文字或圖像,它會遵循該類。第三個也會這樣做。認爲它像一個數學方程式和括號:

5×4×(3×3)= 180

你會做括號第一然後其他因素。

0

如果您僅使用上升/下降選擇器,則元素的位置對選擇器特異性沒有影響。需要注意的是

.red, .green 
.blue, .green 

選擇元素分開,因爲逗號。也就是說,<div class=red><div class=green>都是都選擇了,並且無論是否是另一個的後代,都會發生這種情況。我認爲你的意思是刪除逗號。

在這種情況下,規則聲明的順序將隨後面的優先級更高的規則生效。那就是.blue, .green.red, .green具有更高的優先級,即使僅僅因爲它稍後被聲明而具有相同的特性。