如同對僞元素的名稱同樣,:before 是用來給指定的元素的內容前面插入新的內容。舉例說明:css
.before:before{content:'you before'; color:red;} <div class="before"> me</div>
在這裏咱們給僞元素 :before 添加了屬性 content,並賦值爲 you before。咱們來看效果://在指定元素的內容 me 前添加了新內容 you before
css3
咱們不難發現這裏經過僞元素 :before 添加的新內容區域默認的 display 屬性值爲 inline,那麼咱們可不能夠修改新內容區域的屬性,答案是確定的。你能夠像修改其餘元素同樣修改它的樣式,咱們來將它的 display 屬性值來改成block。segmentfault
.before:before{content:'you before'; display:block; color:red;} <div class="before"> me</div>
如今咱們再來看下效果://由僞元素 :before 生成新內容區域果真變爲了塊元素
ruby
對於僞元素 :before 和 :after 而言,屬性 content 是必須設置的,咱們知道屬性的值能夠爲字符串,也能夠有其它形式,好比指向一張圖片的 URL:函數
content: url( "img/icon.png" )
配合僞類使用
僞元素 :before 還能夠配合僞類使用,這裏舉常常與 :before 配合使用的僞類 :hover 爲例:url
.before:hover:before{content:'you before'; color:red;} <div class="before"> me</div>
配合取值函數 attr() 使用
還有一種較爲常見的用法,即配合取值函數 attr() 一塊兒使用,如:spa
a::before{content: attr(title)}
<a href="http://www.segmentfault.com" title="專業面向開發者的中文技術問答社區"></a>
這個達到的效果跟下面同樣:3d
<a href="http://www.segmentfault.com">專業面向開發者的中文技術問答社區</a>
僞元素 :after 與 僞元素 :before 類型相同,只不過它指定的屬性 content 值爲出如今指定元素內容的後面,說明省。code
僞類:做用對象是整個元素
xml
例如:
a:link {color:#111} a:hover {color:#222} div:first-child {color:#333} div:nth-child(3) {color:#444}
儘管這些條件不是基於DOM的,但結果每個都是做用於一個完整的元素,好比整個連接,段落,div等等。
僞元素:做用於元素的一部分
例如:
p::first-line {color:#555} p::first-letter {color:#666} a::before {content : "hello world";}
僞元素做用於元素的一部分:一個段落的第一行 或者 第一個字母。
總結:
僞元素其實至關於僞造了一個元素,例如before,first-letter達到的效果就是僞造了一個元素,而後添加了其相應的效果而已;
而僞類沒有僞造元素,例如first-child只是給子元素添加樣式而已。
僞元素和僞類之因此這麼容易混淆,是由於他們的效果相似並且寫法相仿,但實際上 css3 爲了區分二者,已經明確規定了僞類用一個冒號來表示,而僞元素則用兩個冒號來表示。
但由於兼容性的問題,因此如今大部分仍是統一的單冒號,可是拋開兼容性的問題,咱們在書寫時應該儘量養成好習慣,區分二者。