優先

2016-04-03 74 views
1

我看到:優先

他們都好像說的是,對於相同的選擇發生多次,最後一個勝。但是,這不是我所遇到的。因此,考慮到 「Aqua.css」 有:

body {color:aqua;} 

和 「Red.css」 有:

body {color:red;} 

然後使用以下:

<link rel="stylesheet" type="text/css" href="Aqua.css" title="Aqua"/> 
<link rel="stylesheet" type="text/css" href="Red.css" title="Red"/> 
<style type="text/css"> 
body {color: lime;} 
body {color: yellow;} 
</style> 

最後一個,黃色,正如其他答案所說的那樣。如果我改變,但是:

<style type="text/css"> 
body {color: lime;} 
body {color: yellow;} 
</style> 
<link rel="stylesheet" type="text/css" href="Aqua.css" title="Aqua"/> 
<link rel="stylesheet" type="text/css" href="Red.css" title="Red"/> 

然後使用Aqua,而不是最後一個,紅色。見Precedence of CSS rules Sample 2。體色是水族但Aqua.css是Red.css之前。所有我找到的答案說,車身顏色將是紅色。

每當我有多個鏈接到CSS樣式表和它們之間唯一的區別是什麼顏色(元素或類或其他),則使用第一樣式表,而不是最後,但似乎不是我讀過的每一樣東西都應該發生。我曾嘗試Edge,Chrome和IE;我注意到他們之間沒有相關的區別。

所以,我有以下兩個問題:

  • 我是正確,我看到的行爲(第一個鏈接標籤被用來代替過去的)是從其他的答案有什麼不同?
  • 如果是這樣的話,爲什麼?

我很抱歉如果我應該發佈了其他線程之一的答案,但我認爲創建一個新問題更爲清晰。

的原因,我問的是,我想創建一個動態的系統樣式這麼理解的優先級是更重要的,它是不那麼有效,只是試一下,看比在正常情況下,是什麼在起作用。我將試圖解釋規範,但到已經在其他的答案的程度,我想了解什麼已經在其他線程這裏提供。

+1

我相信答案是,不能保證哪個樣式表將首先被加載,並且以什麼順序設置主體屬性。這就是爲什麼你不應該這樣做。 – Rob

+3

@Rob,「不能保證哪個樣式表會先加載」,加載順序與它無關。 *只要所有樣式表都加載了*,DOM排序就會嚴格定義將應用哪些樣式。沒有涉及模糊邏輯或猜測。 – zzzzBov

+0

@zzzzBov我不太確定,我想回憶一下我前段時間閱讀過的關於不能保證首先應用什麼的文章。如果您有兩個外部樣式表,其中包含與此問題中相同元素的相同CSS屬性,並且第二個樣式表在第一個樣式表應用之前完成下載?如果我可以肯定地回憶,我會做出這個答案,但我現在沒有時間去嘗試找到它。我所想的可能不適用於此,但這是可以研究的。 – Rob

回答

4

聲明:我以前的答案和思路是完全錯誤的,所以我刪除了它,並將其作爲替代品發佈,以免與前面任何討論混淆。

當您給<link>元素title屬性時,您將其定義爲備用樣式表集。

<link rel="stylesheet" type="text/css" href="Aqua.css" title="Aqua"/> 
                 ^^^^^^^^^^^^ 
<link rel="stylesheet" type="text/css" href="Red.css" title="Red"/> 
                 ^^^^^^^^^^^ 

樣式的優先級是一個紅色的鯡魚。Red.css樣式根本不會被應用,因爲該樣式表集當前未處於活動狀態。

Per the spec

此外,title屬性有這個元素的特殊語義:鏈接的標題;替代樣式表集名稱。

另外值得一讀:"CSS: alternative style sheets"

的文件並不需要有一個單一的樣式表。您可以給它一個默認樣式和任意數量的替代品供讀者選擇。例如,該頁面可以替代所有的W3C Core Style,以及Web上其他地方的兩個樣式表(作者:David Baron)。

讀者如何選擇替代品取決於瀏覽器。並不是所有的瀏覽器都提供了一個菜單,但很多都可以。例如,在Opera,Internet Explorer和Firefox中,您可以在「查看」菜單下找到樣式。從2012年起,Chrome需要擴展程序(例如Decklin Foster的Style Chooser)。

應該定義替代樣式表時使用rel="alternative stylesheet",但是這似乎是在瀏覽器的預期行爲的情況。刪除title屬性和<link>元素返回到規範中定義的標準行爲。

+0

謝謝。你的錯誤被原諒了,錯誤發生了。請理解它是多麼的令人沮喪,才能知道發生了什麼,而其他人忽視了我所看到的。我希望你明白我的意思。另外,CSS似乎不必要的複雜。我不明白你在這裏說的大部分內容(我會繼續學習),但重要的是標題是「問題」。現在我知道title屬性比一些人意識到的更重要,我希望這也能幫助其他人。 – user34660