提到僞類,在個人印象中最經常使用的不過是:hover、:active、:link、:visited,還有css3裏的經常使用僞類選擇器:last-child、:first-child、nth-child(n)等等,說實在其餘的我發現"然並卵"。css
百度一下:after和:before會發現有不少關於研究它們用法的文章,形形色色各式各樣,說明這兩個僞元素在實際工做中仍是很實用的,再結合css3的動畫,它們能爲頁面添加不少意想不到的效果!html
從學習僞類,不當心又延伸到了僞類元素(eg.咱們常見的::before和:hover之間爲何缺乏了一個冒號呢?),那什麼又叫僞類元素?僞類和僞類元素有什麼區別?下面就跟着我一塊兒來學習一下吧O(∩_∩)O~有說的不對的地方歡迎批評指正!~css3
w3c上對僞類和爲元素的定義分別爲, bootstrap
css3爲了明確僞類和僞元素的區別,已經明確了單冒號(:)用於CSS3僞類,雙冒號(::)用於CSS3僞元素segmentfault
span:hover //僞類
span::before //僞元素
可是,爲了保證兼容性,如今僞元素廣泛仍是使用單引號。下面我將用單引號的形式給你們作介紹~瀏覽器
常見的僞類(pseudo-classes)和僞元素(pseudo-elements)ide
僞元素的兼容性學習
定義動畫
:before 選擇器在被選元素的內容前面插入內容。 ui
:after 選擇器在被選元素的內容後面插入內容。
使用
使用 content 屬性來指定要插入的內容。
content有幾個比較有用的值:
a:after { content: "↗"; }
a:after { content:"(" attr(href) ")"; }
h1::before { content: url(logo.png); }
h2:before { counter-increment: chapter; content: "Chapter " counter(chapter) ". " }
----------------------------------- 一個粗糙的栗子 ---------------------------------------
爲了寫出讓本身看得懂也能讓別人看的懂的博客,下面咱們來舉一個(粗糙的)栗子~
詳細代碼以下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> blockquote{ background-color: #ccc; color: #fff; height: 100px; width: 400px; text-align: center; line-height: 100px; } blockquote:hover:before{ content: '啊啊啊啊哦'; color: red; } blockquote:hover:after{ content: '啊啊啊啊哦誒'; color: green; } </style> </head> <body> <blockquote>我是一個blockquote</blockquote> </body> </html>
鼠標沒有移動到blockqoute上的時候是醬紫的,
鼠標移動到blockqoute上的時候是醬紫的,
這樣就實現了 「 僞元素:before和:after將特殊的效果添加到blockqoute上的效果 」,固然這個很糙的栗子只是體現了它的基本用法而已,下面咱們來了解一下它的一些有意思的用法吧~
好吧,第一個用法確實沒什麼意思╮(╯_╰)╭,可是很實用有木有~(~ ̄▽ ̄)~
網上在介紹清浮動中最狂拽炫酷吊炸天的清浮動方法 : ) ,只要把.clearfix加在浮動父級就能夠了
.clearfix{zoom:1;}
.clearfix:after {clear:both;content:'.';display:block;width: 0;height: 0;visibility:hidden;}
給浮動父級添加clearfix後
這樣利用僞元素:before和浮動,就能創造出兩個沒有內容的佔位塊,實現文字環繞圖片的效果了~~效果蠻不錯的有木有
.box .left{ //左邊的文字塊 float: left; } .box .left:before{ content: ''; height: 245px; width: 153px; float: right; } .box .right{ //右邊的文字塊 float: right; } .box .right:before{ content: ''; height: 245px; width: 153px; float: left; }
這些圖標都是能夠利用僞元素作出來的喲!~不用再引用麻煩的bootstrap圖標了,還得引入他們的一堆文件惹,真麻煩~ ( ̄~ ̄) ~真矯情
DEMO(實用小圖標的源css代碼都在這裏面喲!)
還有3D的ribbons,不用圖片也能夠呢!只要只兼容IE8+就能夠用啦,Everybody loves ribbons,so do I. 時常以爲CSS真心是藝術~
DEMO(ribbon源碼)
怎樣做爲列表序號呢?我先舉個栗子~
像這樣的1,2,3的序號通常你們是怎樣作的呢?用span?用圖片?是否是用了span後還要進行定位?是否是很麻煩呢?
如今咱們能夠用僞元素來作列表序號,並且列表的一項刪除了之後,其餘的列表序號會自動改變,成爲一個有順序的列表~484很方便!
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> *{ margin: 0; padding: 0; } ul{ width:1000px; margin: 0 auto; counter-reset:li; } li{ list-style: none; } ul>li{ background-color: #ccc; margin-top: 10px; } ul>li:before{ content: counter(li); counter-increment:li; background-color: #333; padding: 0 5px; color: #fff; margin-right: 10px; } </style> </head> <body> <ul> <li>List item one</li> <li>The second item on the list</li> <li>Number three is a bit longer, with some lorem ipsum for good measure. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</li> <li>And here is number four.</li> <li>The fifth item on the list</li> <li>The sixth item on the list</li> </ul> </body> </html>
不過這裏須要一個用到content的一個屬性,那就是counter()。對於couter又是一個知識點,後期能夠進行深刻了解,這裏找到了一個相關的有用博文,請戳~
做爲文字提示~在這裏我就不贅述啦
這些導航真的很炫酷,除了不少css3的效果外,不少效果都用到了:before和:after僞元素~有空的時候必定要一個個作作試試看!
對於僞元素的應用上還有不少值得人去探尋的東西,我提到的估計也不過是冰山一角,小小的僞元素居然能實現那麼多的功能~看來須要學的還有不少
參考資料:http://segmentfault.com/a/1190000000484493
http://www.w3cplus.com/css3/pseudo-element-roundup.html