問:
我已經使用CSS定義了超連結的樣式,但是瀏覽時hover(滑鼠懸停)卻不起作用。為什麼會這樣呢?是瀏覽器的問題嗎?
答:
雖然你認為可能原因是瀏覽器問題,但是更多的可能是你樣式定義時順序錯誤。為了確保能看到不同狀態下的連接樣式,正確的樣式順序應該是:
" link - visited - hover - active "或" LVHA "(縮寫)。
核心內容:
每個選擇符selector都有一個「specificity」如果兩個selectors應用於同一個元素,具有較高specificity的選擇符將勝出,具有優先權。例如:
P.hithere {color: green;} /* specificity = 1,1 */
P {color: red;} /* specificity = 1 */
任何設定了類class=hithere的段落內容顯示為綠色而不是紅色。兩個selectors都設定了顏色,但是具有更高specificity的選擇符將勝出。
偽類如何影響specificity呢?它們有完全相同的加權值,下列樣式具有相同的specificity加權值:
A:link {color: blue;} /* specificity = 1,1 */
A:active {color: red;} /* specificity = 1,1 */
A:hover {color: magenta;} /* specificity = 1,1 */
A:visited {color: purple;} /* specificity = 1,1 * /
這些都是用於超連結的樣式設定。大部分情況下需要同時設定其中的幾個樣式,例如,一個未被訪問的超連結在滑鼠懸停和點擊時可設定「滑鼠懸停」和「滑鼠啟動「兩種狀態下的不同樣式,由於上述三個規則都可應用於超連結,並且全部選擇符具備相同的specificity,那麼根據規則,最後一個樣式「勝出」。所以" active "式樣永遠不會顯示出來,因為它總是被" hover "式樣覆蓋(即" hover "優先)。現在再來分析已經被訪問過的超連結滑鼠懸停是什麼效果,結果永遠是purple紫色的:( ,因為它的" visited "式樣總是優先於其它的狀態樣式規則(包括" active "和" hover") 而顯示。
這就是為什麼CSS1推薦樣式順序的原因:
A:link
A:visited
A:hover
A:active
實際上,開頭兩個樣式的順序可以調換,因為一個超連結不可能同時存在「未存取」和「已訪問」兩種狀態。 >CSS2現在允許偽類可以以「聯合成組」形式出現,例如:
A:visited:hover {color: maroon;} /* specificity = 2,1 */
A:link:hover { color: magenta;} /* specificity = 2,1 */
A:hover:active {color: cyan;} /* specificity = 2,1 */
They have the same specificity, but they apply to fundamentally different beasts, and so don't conflict. You can get hover-active combinations, for example.
如何理解本文當中所涉及到的「specificity」呢?字串,上面的一個例子:
P.hithere {color: green;} /* specificity = 11 */
P {color: red;} /* specificity = 1 */
這好像是一個基於十進制的簡單運算。 .hello {color: red;} /* specificity = 10 */
HTML BODY DIV UL LI OL LI UL LI OL LI UL LI OL LI (color: green;} /* specificity = 15 */
" 10 "其實是一個「1」後面接著「零」、不是"十",我們可以用十六進位描述前面的樣式規則的specificitiy,像下面:
.hello {color: red;} / * specificity = 10 */
HTML BODY DIV UL LI OL LI UL LI OL LI UL LI OL LI (color: green;} /* specificity = F */
唯一的問題是如果你想為第二個樣式規則增加兩個或更多的選擇符時,那時你可能會得到一個「17」的specificity、會再一次混淆。事實上specificity可能是無窮大的,所以為了避免更多的混亂,建議使用逗號來分隔specificity的值。
站長建議
:反覆練習specificity的加權值的計算,網站CSS的設定體現了你控制頁面的能力,在動態網站開發中,CSS的地位也是非常重要的,多看資料,多練習,多來腳本之家!如果你喜歡本站就代為宣傳吧!謝謝閱讀