寫偽元素的時候,發現有的時候是:after,有的時候是::after。這兩者有什么區別呢??
1. 單冒號和雙冒號的區別
CSS3之后才有雙冒號::,表示偽元素
- 用於對偽類(Pseudo-class)和偽元素(Pseudo-element)進行區分。
- 即偽類只能用單冒號。
- 偽元素在CSS3中,推薦使用雙冒號::
2. 偽元素和偽類的區別
偽元素是選中了某個元素的符合邏輯的某個實際卻不存在的部分,本質上是創建了一個有內容的虛擬容器;
用法 selector:pseudo-element {property:value;}
- first-letter設置首字母的樣式,first-line設置首行的樣式
- before在元素之前添加內容
- after在元素之后插入內容
偽類則是像真正的類一樣發揮着類的作用
用法 selector : pseudo-class {property: value}
常見偽類
:link
未被訪問的鏈接:visited
已被訪問的鏈接:hover
鼠標懸停:active
被激活的元素:focus
有鍵盤輸入焦點- css定義中,:hover必須位於:link和:visited之后才有效,
- :active 必須被置於:hover 之后,才有效
:lang
——:lang(no)指定lang屬性為no或no-的元素 - :lang 的處理與 |= 選擇器相同。
:first-child
父元素的第一個子元素(在IE中必須聲明DOCTYPE)
CSS3新增了許多偽類
- 第n個特定類型元素(xxxtype)
:first-of-type
,:last-of-type
,:nth-of-type(n)
,:only-of-type
,:nth-last-of-type(n)
- 特定類型元素的首個/尾個/第幾個/唯一一個/倒數第幾個
- 類似first-child的選擇第n個元素的偽類
:last-child,:nth-child(n),:only-child,:nth-last-child(n)
- :root根元素(HTML中根元素始終是HTML元素)
- :empty沒有子元素的元素(包括文本節點)
- :target當前活動的目標元素
- url后帶有錨名稱#指向文檔內某元素,該被指向元素為目標元素
- :enable, :valid, :read-only,:checked,:required
......
注意
- 可以同時使用多個偽類,而只能同時使用一個偽元素;
- CSS3中偽元素的語法是兩個冒號