[CSS]利用偽元素實現一些特殊圖形


 

          

  給定的html代碼是: <div class='square'></div>

   

  

  平常實現我們常是通過添加小的icon來實現,不僅需要添加圖片資源,還需要改動html結構。

  CSS偽元素

  css中偽元素有四個,分別是:first-line,:first-letter,:before,:after。其中前兩個分別選擇的是目標元素內第一行文本和第一個字母,可以為其添加多余樣式。

  而最常用的就是:before和:after,這兩個偽元素與前兩個的用法不同,而用處也更大。

  :before,:after分別用於向當前元素前和后添加指定的content內容,具體事例用法如下:

  

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CSS輸出各種圖形</title>
<style type="text/css">
    p:before{
        content:"開始";
        color:#F00;
        font-size:12px;
    }
    p:after{
        content:"結束";
        color:#003;
        font-size:30px;
        border:1px solid #000;
        width:100px;
    }
</style>
</head>

<body>
        
    <p>偽元素 測試</p>
</body>
</html>

上面代碼的運行結果如圖:  

    可以認為:before和:after兩個偽元素是添加到當前p標簽前后的兩個元素,但是應該也會發現在p:after中寫的width:100px;並沒有奏效,這就說明了偽元素的顯示是inline的,而不是block。

    至於偽元素有幾個需要注意的地方:

    1.偽元素在元素內部的顯示為inline,因此想要用偽元素實現更多效果,比如上面的題目,就必須把偽元素當做block元素來用。

    2.偽元素列表屬性中content必不可少,即使內容為空,content也不能為空,否則會不顯示。

    3.偽元素content除了可以設置為文字之外,還可以設置為圖片,例如p:before{content:url(icon.gif);}

    4.偽元素目前已經得到IE8及以上瀏覽器,可以放心使用。

 

    用CSS做出來一個三角形或者別的形狀

    掌握了偽元素之后,就可以實現上面的題目了。很明顯,是通過偽元素做出了一個三角形。怎么做呢?

    用CSS代碼實現三角形很簡單,嘗試一下就可以寫出來:,html代碼為<div class="triangle"></div>, css代碼如下

    .trangle{width:0;height:0;border:40px solid; border-color:transparent transparent transparent #F00;}

    別的形狀也是大同小異,通過設置不同的border-radius和border-width來實現,但是兼容性有問題,IE9及以上才會正常(自然是border-radius的問題)。

    

    但是可以看出來元素已經是用border勾勒出來的了,但是題目中的三角形是帶有黑色邊框的,很明顯不能通過一個偽元素來搞定,那就兩個一起。

    通過設定偽元素的position:absolute和z-index屬性,構成偽元素的疊加,底層是黑色,上層是白色即可。

    原題目的CSS具體實現代碼如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CSS輸出各種圖形</title>
<style type="text/css">
 
.square{width:100px;height:100px;background-color:#FFF;position:relative;border:2px #000000 solid;}
.square:before{
content:"";
width:0px;
height:0px;
display:block;
position:absolute;
z-index:2;
top:25%;
right:-28px;
border:15px solid #FFF;
border-color:transparent transparent transparent #FFF;
}
.square:after{content:"";
width:0px;
height:0px;
display:block;
position:absolute;
z-index:1;
top:25%;
right:-30px;
border:15px solid #FFF;
border-color:transparent transparent transparent #000;
} 
</style>
</head>

<body>
        
<div class='square'></div>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM