css選擇器常見包括id(#id)、標簽(tag)、class(.class)、屬性[attr=attrval]等,還包括偽元素和偽類選擇器。正確的利用偽元素和偽類能夠讓我們的html結構更清晰合理,也能在一定程度上減少js對dom的操作!
定義
偽類包含兩種:狀態偽類和結構性偽類。
狀態偽類是基於元素當前狀態進行選擇的。在與用戶的交互過程中元素的狀態是動態變化的,因此該元素會根據其狀態呈現不同的樣式。當元素處於某狀態時會呈現該樣式,而進入另一狀態后,該樣式也會失去。常見的狀態偽類主要包括:
:link 應用於未被訪問過的鏈接;
:hover 應用於鼠標懸停到的元素;
:active 應用於被激活的元素;
:visited 應用於被訪問過的鏈接,與:link互斥。
:focus 應用於擁有鍵盤輸入焦點的元素。
結構性偽類是css3新增選擇器,利用dom樹進行元素過濾,通過文檔結構的互相關系來匹配元素,能夠減少class和id屬性的定義,使文檔結構更簡潔。常見的包括:
:first-child 選擇某個元素的第一個子元素;
:last-child 選擇某個元素的最后一個子元素;
:nth-child() 選擇某個元素的一個或多個特定的子元素;
:nth-last-child() 選擇某個元素的一個或多個特定的子元素,從這個元素的最后一個子元素開始算;
:nth-of-type() 選擇指定的元素;
:nth-last-of-type() 選擇指定的元素,從元素的最后一個開始計算;
:first-of-type 選擇一個上級元素下的第一個同類子元素;
:last-of-type 選擇一個上級元素的最后一個同類子元素;
:only-child 選擇的元素是它的父元素的唯一一個子元素;
:only-of-type 選擇一個元素是它的上級元素的唯一一個相同類型的子元素;
:empty 選擇的元素里面沒有任何內容。
偽元素是對元素中的特定內容進行操作,而不是描述狀態。它的操作層次比偽類更深一層,因此動態性比偽類低很多。實際上,偽元素就是選取某些元素前面或后面這種普通選擇器無法完成的工作。控制的內容和元素是相同的,但它本身是基於元素的抽象,並不存在於文檔結構中!常見的偽元素選擇器包括:
:first-letter 選擇元素文本的第一個字(母)。
:first-line 選擇元素文本的第一行。
:before 在元素內容的最前面添加新內容。
:after 在元素內容的最后面添加新內容。
注意事項
有時你會發現偽類元素使用了兩個冒號 (::) 而不是一個冒號 (:),這是 CSS3 規范中的一部分要求,目的是為了區分偽類和偽元素,大多數瀏覽器都支持這兩種表示方式。單冒號(:)用於 CSS3 偽類,雙冒號(::)用於 CSS3 偽元素。對於 CSS2 中已經有的偽元素,例如 :before,單冒號和雙冒號的寫法 ::before 作用是一樣的。
所以,如果你的網站只需要兼容 webkit、firefox、opera 等瀏覽器,建議對於偽元素采用雙冒號的寫法,如果不得不兼容 IE 瀏覽器,還是用 CSS2 的單冒號寫法比較安全。