用css控制一個DIV畫圖標。

在實際開發中,咱們會用到一些小圖形,圖標。大多數狀況下都是用圖片來實現的,同時對圖片進行處理使圖片大小盡量的縮小。可是圖片在怎麼處理也是按KB來算的。可是要是用CSS畫,只要用不多的空間就能完成一樣的效果了,並且還方便後期的維護。咱們今天畫四個圖形,一個三角形,一個直角三角形兩種方法畫多邊框正方形同心圓分享圖標css

三角形html

首先,咱們先畫一個三角形前端

代碼以下: 1 <div id="duo1"></div> 對 就是用一個DIV來畫。前端工程師

咱們能夠把這幅圖補腦一下spa

這是否是就有點眼熟了呢?沒看出來不要緊,在看這張。code

左邊的你們應該很熟悉了,就是一個有邊框的盒子,而右邊的就是把盒子的寬度和高度設置爲0px。htm

而後咱們把邊框的左,上,右設置爲白色。代碼以下blog

 1 <head>
 2 <style>
 3 div[id="duo1"]{
 4 width:0px; height:0px; 
 5 border-top:50px solid white; 
 6 border-left:50px solid white; 
 7 border-bottom:50px solid #000; 
 8 border-right:50px solid white;}
 9 </style>
10 </head>
11 <body>
12 <div id="duo1"></div>
13 </body>

直角三角形圖片

那麼直角三角形呢?其實方法是同樣的。顯示左下兩部分邊框,開發

//css樣式代碼
div[id="zjsjx"]{
width:0px; height:0px; 
border-top:50px solid white; 
border-left:50px solid blue; 
border-bottom:50px solid blue; 
border-right:50px solid white;}

//HTML代碼
<div id="zjsjx"></div>

 正方形

那有兩個邊正方形怎麼用一個div畫呢?

這個時候就要用到一個屬性 描邊屬性outline或者叫輪廓線屬性。

1 div[id="dcbk"]{
2 width:50px; height:50px; 
3 outline:10px solid blue;
4  border:10px solid yellow;}

可是,outline屬性有有關問題 好比要設置這個DIV爲圓角,那麼這個屬性就會有問題,如圖:

能夠看出 outline屬性不會隨着div的圓角變化而變化。那怎麼辦呢?別急 咱們還有第二種方法來實現。

正方形方法二

第二種方法咱們要用到一個屬性box-shadow屬性。

box-shadow語法:box-shadow: h-shadow v-shadow blur spread color inset;

box-shadow: 水平陰影的位置(左偏移)  垂直陰影的位置(下偏移) 模糊距離(模糊度) 陰影的尺寸  顏色  將外部陰影 (outset) 改成內部陰影;

固然咱們這裏不須要設置那麼多值。

若是水平陰影的位置  垂直陰影的位置都設置爲O即左,下不偏移,而後再設置尺寸不就是至關於邊框了嗎?

 

1 div[id="dcbk2"]{ 
2 width:50px; height:50px;
3 border:10px solid yellow; 
4 box-shadow:0 0 0 10px blue; 

效果是同樣的,並且跟着圓角變

 

同心圓

一個圓咱們會畫,兩個同心圓咱們也能夠,那麼三個四個五個呢?

 

怎麼作呢?要是能夠定義多個邊框不就行了嗎?在上面,咱們是用box-shadow來作邊框效果的

一樣,咱們仍是用box-shadow屬性。可是其實box-shadow能夠同時定義多個陰影的,寫法以下

1 div[id="yuan"]{ width:50px; height:50px;
2 border:10px solid yellow; 
3  border-radius:100px;
4 box-shadow:0 0 0 10px black,
5     0 0 0 20px blue,
6     0 0 0 30px red;}        

中間用","隔開就行了,沒有數量限制。

 

分享圖標

最後咱們作一個分享的圖標

這個怎麼作呢?咱們能夠把他分開來看,能夠當作一個三角形,兩個邊框還有一個鷹嘴同樣的圖。

三角形和兩個邊框好作的,利用本文的第一部分講的就能做了。關鍵是鷹嘴怎麼作?

這樣補齊是否是就是一個左上角爲圓角的盒子了?

而後咱們再把左邊距的寬度縮小到0,是否是就是一個鷹嘴的圖形了?

下面是分享圖標的代碼:

 1 div[id="hez1"]{
 2 width:10px; height:30px;
 3 border-top:5px solid #000; 
 4 border-left:5px solid #000;
 5 border-right:5px solid white;
 6  position: absolute;}
 7 div[id="hez2"]{
 8 width:30px; height:5px;  border-top:5px solid white; 
 9 border-right:5px solid  #000;border-bottom:5px solid #000;
10 position: absolute;left:0px;top:15px;}
11 
12 div[id="yuanjiao"]{
13 width:20px; height:20px; 
14 border-radius:20px 0 0 0;
15 border-left:0px solid #000;
16 border-top:10px solid #000; 
17 position: absolute;
18 left:5px;top:-21px;
19 }
20  div[id="sanjiao"]{
21 width:0px; height:0px;
22 border-top:13px solid white; 
23 border-left:13px solid #000; 
24 border-bottom:13px solid white; 
25 border-right:0px solid white;
26 position: absolute;
27   left: 20px;
28   top: -18px;}
29 
30 <div id="hez1">
31 <div id="hez2">
32 <div id="yuanjiao">
33 <div id="sanjiao"></div>
34 </div></div></div>

等等!!!你覺得這樣就完了?太天真了!!!

把背景改成紅色看看!!!

這樣就會發現,以前無論是三角形仍是什麼咱們的邊框設置的都是白色,並且分享圖形放大了看會發現下面邊框的一角被三角形擋住了。

怎麼解決呢?很簡單。吧他透明就行了,

rgba(r,p,g,a);其中A是透明度的意思,A爲1 表明不透明,A爲0代碼100%透明。

rgba(255,255,255,0.0);如下是部分代碼。

1 div[id="sanjiao"]{width:0px; height:0px; 
2  border-top:13px solid rgba(255,255,255,0.0); 
3 border-left:13px solid #000; 
4 border-bottom:13px solid rgba(255,255,255,0.0); 
5 border-right:0px solid rgba(255,255,255,0.0);
6 position: absolute;
7   left: 20px;
8   top: -18px;}

 

你覺得這樣就完了嗎?不!還沒完。

作爲一個優秀的前端工程師,咱們要用最簡潔的代碼寫出最好的功能。

 1  div[id="one"]{width:10px; height:30px;  
 2 border-top:5px solid #000; 
 3 border-left:5px solid #000;
 4 border-right:5px solid rgba(255,255,255,0.0);
 5  position: absolute;}
 6 
 7  div[id="one"]:after{
 8 content:""; width:30px; height:5px; 
 9  border-top:5px solid rgba(255,255,255,0.0); 
10 border-right:5px solid  #000;
11 border-bottom:5px solid #000;
12 position: absolute;left:0px;top:15px;
13 }
14 
15 div[id="one"]:before{
16 content:""; width:20px; height:20px;
17  border-radius:20px 0 0 0; 
18 border-left:0px solid #000;
19 border-top:10px solid #000; 
20 position: absolute;
21 left:5px;top:-1px;
22 }
23 
24 div[id="sanjiao2"]{width:0px; height:0px; 
25 border-top:13px solid rgba(255,255,255,0.0); 
26 border-left:13px solid #000; 
27 border-bottom:13px solid rgba(255,255,255,0.0);
28  border-right:0px solid rgba(255,255,255,0.0);
29 position: absolute;
30   left: 25px;
31   top: -10px;}
32 
33 <div id="one"><div id="sanjiao2"></div></div>

咱們把上面的代碼簡化成只用兩個DIV就能作出相同的效果。

下面是所有代碼:

  1 <!DOCTYPE html>
  2 <HTML>
  3 <head>
  4 <style type="text/css">
  5 *{ margin:0px; padding:0px; border:0px; }
  6 body{ padding:20px;}
  7 div[id="duo1"]{width:0px; height:0px; border-top:50px solid rgba(255,255,255,0.0); 
  8             border-left:50px solid rgba(255,255,255,0.0); 
  9             border-bottom:50px solid #000; 
 10             border-right:50px solid rgba(255,255,255,0.0);}
 11             
 12 div[id="zjsjx"]{width:0px; height:0px; 
 13 border-top:50px solid rgba(255,255,255,0.0); 
 14 border-left:50px solid blue; 
 15 border-bottom:50px solid blue; 
 16 border-right:50px solid rgba(255,255,255,0.0);}
 17 
 18 div[id="dcbk"]{ width:50px; height:50px; outline:10px solid blue; border:10px solid yellow;}
 19 
 20 div[id="dcbk2"]{ width:50px; height:50px;
 21 border:10px solid yellow; 
 22 box-shadow:0 0 0 10px blue;}
 23 
 24 div[id="yuan"]{ width:50px; height:50px;
 25 border:10px solid yellow; margin:20px; 
 26 border-radius:100px;
 27 box-shadow:0 0 0 10px black,0 0 0 20px blue,
 28                             0 0 0 30px red;}
 29                             
 30   //分享圖標的css代碼
 31 div[id="hez1"]{width:10px; height:30px;  
 32 border-top:5px solid #000; 
 33 border-left:5px solid #000;
 34 border-right:5px solid rgba(255,255,255,0.0); 
 35 position: absolute;}
 36 
 37 div[id="hez2"]{width:30px; height:5px;  
 38 border-top:5px solid rgba(255,255,255,0.0); 
 39 border-right:5px solid  #000;
 40 border-bottom:5px solid #000;
 41 position: absolute;left:0px;top:15px;}
 42 
 43 div[id="yuanjiao"]{width:20px; height:10px; 
 44 border-radius:20px 0 0 0; 
 45 border-left:0px solid #000;
 46 border-top:10px solid #000; 
 47 position: absolute;
 48 left:5px;top:-21px;
 49 }
 50 
 51 div[id="sanjiao"]{width:0px; height:0px; 
 52  border-top:13px solid rgba(255,255,255,0.0); 
 53 border-left:13px solid #000; 
 54 border-bottom:13px solid rgba(255,255,255,0.0); 
 55 border-right:0px solid rgba(255,255,255,0.0);
 56 position: absolute;
 57   left: 20px;
 58   top: -18px;}
 59   
 60   
 61   
 62   //簡化後分享圖標的css代碼
 63  div[id="one"]{width:10px; height:30px;  
 64 border-top:5px solid #000; 
 65 border-left:5px solid #000;
 66 border-right:5px solid rgba(255,255,255,0.0);
 67  position: absolute;}
 68 
 69  div[id="one"]:after{
 70 content:""; width:30px; height:5px; 
 71  border-top:5px solid rgba(255,255,255,0.0); 
 72 border-right:5px solid  #000;
 73 border-bottom:5px solid #000;
 74 position: absolute;left:0px;top:15px;
 75 }
 76 
 77 div[id="one"]:before{
 78 content:""; width:20px; height:20px;
 79  border-radius:20px 0 0 0; 
 80 border-left:0px solid #000;
 81 border-top:10px solid #000; 
 82 position: absolute;
 83 left:5px;top:-1px;
 84 }
 85 
 86 div[id="sanjiao2"]{width:0px; height:0px; 
 87 border-top:13px solid rgba(255,255,255,0.0); 
 88 border-left:13px solid #000; 
 89 border-bottom:13px solid rgba(255,255,255,0.0);
 90  border-right:0px solid rgba(255,255,255,0.0);
 91 position: absolute;
 92   left: 25px;
 93   top: -10px;}
 94             
 95 </style>
 96 </head>
 97 <body>
 98 <div id="duo1"></div>
 99 <br>
100 <div id="zjsjx"></div>
101 <br>
102 <div id="dcbk"></div>
103 <br>
104 <div id="dcbk2"></div>
105 <br>
106 <div id="yuan"></div>
107 <br>
108 <!--
109 <div id="hez1">
110 <div id="hez2">
111 <div id="yuanjiao">
112 <div id="sanjiao"></div>
113 </div></div></div>
114 -->
115 
116   //簡化後分享圖標的HTML代碼
117 <div id="one"><div id="sanjiao2"></div></div>
118 </body>
119 </HTML>

 

若是有什麼疑問或者建議或者漏洞及錯誤歡迎指正,與我聯繫
==================================================================================================

本文爲冷小包原創,轉載請註明出處及做者。謝謝合做

                                                                       ——冷小包著

相關文章
相關標籤/搜索