2012-08-17 63 views
7

我最近遇到這種情況,但無法找到'爲什麼'? 任何人都可以解釋嗎?「CSS 256類覆蓋一個ID」背後的規則是什麼?

見下面這個例子:http://codepen.io/chriscoyier/pen/lzjqh

+2

如果你能找到鏈接,你當然可以找到解釋......它現在在網絡上的字面意思。 – BoltClock 2012-08-17 09:16:05

+0

[CSS特異性中的點數]可能的重複(http://stackoverflow.com/questions/2809024/points-in-css-specificity) – 2012-08-17 09:18:55

+1

@My Head Hurts:不是真的......這就解釋了爲什麼點解釋有缺陷但它沒有解決這裏顯示的錯誤。 – BoltClock 2012-08-17 09:21:45

回答

11

出現這種情況是由於瀏覽器的限制,並且在規範或如何瀏覽器不是一個錯誤執行它。

spec說:

  • 計數在選擇器ID選擇器的數目(= A)
  • 計數類選擇器的數目:

    一個選擇的特異性的計算方法如下,屬性選擇器和選擇器中的僞類(= b)

  • 計算選擇器中類型選擇器和僞元素的數量(= c)
  • 忽略通用選擇否定僞類內

選擇器進行計數像任何其他,但否定本身不能算作一個僞類。

串接三個數字的A-B-C(在具有大基數的數字系統)給出的特異性。

瀏覽器必須特異性值存儲作爲用於計算的目的整數,並以某種方式256的值使得根據瀏覽器的溢出。這通常發生在8位無符號整數上,其最大值爲255;再添加一個會導致類級別的特定性以某種方式被「升級」爲一個ID級別的值,使其與級聯中的ID相等,從而將其重寫。

+0

我覺得這個答案總結得很好。我打算擴展它,但看到評論中鏈接的問題。如果需要解釋規範和瀏覽器中的實現細節之間的差異,我可能會提出我的答案。 – BoltClock 2012-08-17 09:55:42

+0

提出了爲什麼特異性不被限制在9n的問題。任何人都會在一個選擇器中擁有超過9個類,屬性或僞類嗎?被限制在9時,特定分數將只能以十進制存儲,而無限數量的分類不會超出單個ID,例如90' <'100'。 – 2014-12-09 16:07:47

+1

@James Donnelly:事實上,選擇器4確實聲明實現應該限制特定值並且不允許它們溢出。 – BoltClock 2014-12-09 16:09:31