2015-02-08 68 views
1

我環顧四周尋找這方面的信息,但由於我不確定這個過程的技術名稱,我似乎無法找到答案。CSS選擇器如何實際工作?

讓我們說我有這樣的:

.some_class {} 
.some_class .sub_div {} 

<div class="some_class"> 
    <div class="intermediate_div"> 
    <div class="sub_div"> 

從我的理解,選擇.some_class .sub_div應適用於DIV 'sub_div'。但它似乎並非如此,因爲我總是必須回去並將其更改爲'.some_class .intermediate_div .sub_div'。

這是正確的還是我錯過了什麼?

我的印象是,.some_class .sub_div應該應用於.some_class元素中的任何.sub_div實例。

+0

什麼是不工作?用HTML和CSS顯示一個* actual *的例子,並清楚地說明a)期望的和b)我們如何看到它不起作用。請不要使用荒謬的標題;大家都知道,CSS選擇器實際上工作,你只是有一些*特定的問題與CSS。 – 2015-02-08 11:07:23

回答

2

.some_class .sub_div可以毫無混淆地工作。但你實際上正確.some_class .intermediate_div .sub_div會工作,但.some_class .sub_div不會因爲css的特殊性。下面

尋找一個例子:

div.intermediate_div .sub_div { 
    color: red; 
} 
.some_class .sub_div { 
    color: blue; 
} 

你會想到什麼顏色藍色應用?號紅顏色應用,因爲div.intermediate_div .sub_nav較高的特異性比.some_class .sub_div,因此在這種情況下,你可能會奇怪地看到,

.some_class .intermediate_div .sub_div{ 
    color: blue; 
} 

作品。因爲它比以前的選擇器更具特色。

查看更多關於css特異性here和我的previous answer

+0

感謝您的回答。我瞭解選擇器的特殊性。這就是爲什麼我很困惑爲什麼.some_class .sub_div不適用於.sub_div,當.some_class和.sub_div – 2015-02-08 01:22:30

+0

+1之間存在1個或多個分類元素時,但可能需要添加鏈接或給出簡要說明的特異性以及它在技術上如何工作(包括元素和id選擇器的權重),而不僅僅是這種特定情況。 – prodigitalson 2015-02-08 01:24:54

+1

您可以在我以前的答案[這裏]看看css特異性(http://stackoverflow.com/questions/27203293/does-the-css-direct-decendant-not-have-any-value-in-selectivity/27203341 #27203341) – 2015-02-08 01:25:38

1

CSS將對每個元素應用最具體的規則。 在兩個同樣具體的規則的情況下,它將應用最後定義的規則。

看看this fiddle,它使用下面的HTML:

<div class="some_class"> 
    Some class 
    <div class="intermediate_div"> 
     Intermediate 
     <div class="sub_div">Sub Div</div> 
    </div> 
</div> 

這個CSS:

.some_class { 
    color: red; 
} 
.intermediate_div { 
    background-color: blue; 
} 
.intermediate_div .sub_div { 
    background-color: orange; 
} 
.some_class .sub_div { 
    background-color: green; 
} 

所有的文字是紅色的,因爲some_class是紅色的,而裏面的一切div繼承了這種風格。

intermediate_div有一個藍色的背景,它會被sub_div繼承。但sub_div有兩個更具體的規則定義。

這兩個具有兩個類選擇器的規則同樣具體。兩者都比藍色背景更具體,因爲它們基於兩個類而不是一個選擇。橙色背景被忽略,因爲當它們具有相同的特定性時,將使用最後定義的規則。

當你使用一個元素ID,這是比一個類更具體,因爲ids是(應該是)唯一的。因此,在this modified fiddle中,您可以看到sub_div從#div1獲取樣式,即使該規則是首先定義的,並且只有一個選擇器。它仍然優先於稍後定義的規則,並且具有兩個選擇器的規則,因爲它使用唯一的ID。

+0

聽起來好像你在說如果我有.some_class。 sub_div {background-color:red;},那麼類.sub_div中.some_class中任何位置的div都會有紅色背景。但是當我試圖用這種方式來構造它時,這不是我所發現的。當我以這種方式構建它時,.sub_div沒有紅色背景,除非我將.sub_intermediate添加到選擇器。 – 2015-02-08 01:36:19

+0

是的,如果我理解的正確,那就是你應該得到的 - 檢查這個小提琴:http://jsfiddle.net/ddomwycm/如果你沒有得到相同的結果,你能發佈一個例子,它不能按預期工作? – 2015-02-08 01:43:02

+0

哇!不幸的是,我沒有任何例子,因爲它早就是我發現的東西,並且從那時起就一直建立這些過長的選擇器。我現在只是問這個問題,因爲我現在更多地使用了css選擇器,並且更好地理解它們,但無法理解爲什麼這不起作用。現在你已經證明它應該可以工作,我會在我的下一個項目中再次嘗試。謝謝。 – 2015-02-08 01:47:26