偽類與偽元素的出現(xiàn)是為了描述一些現(xiàn)有CSS無法描述的東西,比如“段落的第一行”、“文章首字母”
偽類:用于操作一些已經在文檔樹中存在的元素
偽元素:用于創(chuàng)建一些不在文檔樹中的元素
常見的偽類:
(1)表示狀態(tài):
:link? ? 選擇未訪問的鏈接,
:visited?????選擇已訪問的鏈接,
:hover? ? 選擇鼠標指針移入的鏈接,
:active? ? 被激活的鏈接,即按下單擊鼠標左鍵后的鏈接,
:focus? ? 選擇獲取焦點的輸入字段
前四個是鏈接狀態(tài)的偽類,在設置的時候必須按照上面的順序來設置,記憶技巧是:
L(:link)OV(:visited)E?????H(:hover)A(:active)TE ——愛恨法則
(2)結構化偽類:(理解:first-child以及:first-of-type的區(qū)別就能很好的理解其他結構化偽類)
:not(selector)? ? 用于選擇所有selector之外的元素
:first-child? ? 用于匹配所有或指定父元素的第一個規(guī)定類型子元素,要注意,匹配成功的條件必須是第一個子元素,以及是規(guī)定類型,否則匹配失敗
:last-child? ? 略
:first-of-type? ? 匹配body或指定父元素的所有規(guī)定類型元素中出現(xiàn)的第一個元素
:last-of-type? ? 略
:nth-child(num)? ? :nth-child(1)跟:first-child的作用是一致的。括號內還可以引入公式或是關鍵字,比如odd,even以及an+b等類似的公式
:nth-last-child(num)? ? 和:nth-child(num)作用類似,但是數字是倒數的
:nth-of-type? ? :nth-of-type(1)跟:first-of-type的作用是一致的。括號內還可以引入公式或是關鍵字,比如odd,even以及an+b等類似的公式
:only-of-type????當元素是其父元素特定類型的子元素中唯一一個時,:only-child匹配該元素;
:only-child????當元素是其父元素中唯一一個子元素時,:only-child匹配該元素;
:target????當URL帶有錨名稱,指向文檔內某個具體的元素時,:target匹配該元素;
(3)表單相關偽類:
:checked? ? 匹配被選中的input元素,這個input元素包括radio和checkbox
:default? ? 匹配默認選中的元素
:disabled? ? 匹配禁用的表單元素
:empty? ? 匹配沒有子元素的元素。如果元素中含有文本節(jié)點、html元素或者一個空格,匹配失敗
:enabled? ? 匹配沒有禁用屬性的表單元素
:indeterminate? ? 匹配某組未被選中的單選框或復選框
:valid? ? 匹配條件驗證正確的表單元素
:invalid? ? 略
::optional????匹配是具有optional屬性的表單元素。當表單元素沒有設置為required時,即為optional屬性;
:required????匹配設置了required屬性的表單元素;
:read-write????匹配處于編輯狀態(tài)的元素。input,textarea和設置了contenteditable的HTML元素獲取焦點時即處于編輯狀態(tài);
:lang????匹配設置了特定語言的元素,設置特定語言可以通過為了HTML元素設置lang=””屬性,設置meta元素的charset=””屬性,或者是在http頭部上設置語言屬性;
常見的偽元素:
:before? ? 在元素前加入一個新元素,新元素內容由content屬性決定,可以是純文本,也可以用content:url()方式引入圖片,所有在該選擇器中的規(guī)則都是用來描述這個新元素的
:after? ? 略
:first-letter????選擇每個
元素的第一個字母
:first-line????選擇每個
元素的第一行
偽類與偽元素在W3C中的定義其實意思是一樣的,一個是給選擇器添加效果,一個是將效果添加給選擇器,換言之,其實他們就是為了讓選擇器有了更強大的描述能力。