2014-09-28 61 views
0

我剛纔看到這個在CSS文件:CSS:單ID選擇與ID選擇之後更多的東西

#nav { margin: 13px 0 0 0; } 

#nav ul li { margin: 0 20px 0 0; } 

不第二#nav屬性定義抵消第一#nav屬性定義?

(另外:我說的是正確的嗎?「屬性定義」?大括號內的東西通常被接受的術語是什麼?)。

+1

第一個選擇帶有id ='nav''的元素並對其進行樣式設置,而第二個元素在id ='nav''的元素內選擇'ul'下的'li'元素。 – Harry 2014-09-28 14:56:14

+0

這是[聲明塊](http://apps.workflower.fi/vocabs/css/en#declaration-block) – Quentin 2014-09-28 14:56:34

+0

不,第二個將只覆蓋id爲nav的元素中的li。 – 2014-09-28 14:56:35

回答

-1

第二個定義沒有「取消」的第一個;它會選擇nav後代的已命名元素,而不是選擇nav元素本身。

作爲ID爲nav的元素內的無序列表的後代的列表項目(li)將由第二規範進行樣式化。 (根據Quentin的評論編輯)ID爲nav的元素將使用第一個規範。 #nav中的元素可以從第一個規範繼承。對於某些屬性,但不是margin,繼承是自動的。 font-family屬性就是一個例子。 margin屬性只能通過明確的margin: inherit;規範繼承。

如果代碼是這樣的:

#nav { margin: 13px 0 0 0; font-family: Helvetica, Arial, sans-serif;} 
#nav ul li { margin: 0 20px 0 0; } 

然後列表項,並在nav其他一切都沒有自己的font-family規範將有一個sans-serif字體。

花括號內的東西是屬性和值。所以,margin是一個屬性,並且保證金規格是值。花括號的剩餘部分是選擇器。

+0

「它更具體」 - 雖然它更具體,但它與特異性無關,因爲它選擇了不同的元素。 – Quentin 2014-09-28 15:02:51

+0

「#nav中除了那些列表項目之外的任何內容都將使用第一個規範」 - 否。只有'#nav'本身將使用第一組規則。其中的其他元素可能會*繼承這些屬性的值。 – Quentin 2014-09-28 15:04:06

+0

@Quentin:你對繼承與直接應用是正確的。對於CSS中特異性的嚴格定義,你也是對的。 – 2014-09-28 15:08:48

3

不,它們適用於不同的元素,因爲它們具有不同的選擇器。

第一條規則適用於ID爲「nav」的元素。第二條規則適用於元素li,即元素ul的後代,該元素是id爲「nav」的元素的後代。

你可以閱讀CSS選擇在這裏:https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started/Selectors

+0

...和那些選擇器不能匹配相同的元素(至少不是有效的HTML)。 – Quentin 2014-09-28 14:55:52

0

1)號中的第二選擇僅適用於li這是ul後裔這又是#nav後代,而第一個只適用於#nav

2)你叫他們爲「風格」