純CSS制作空心三角形和實心三角形及其實現原理
在一次項目中需要使用到空心三角形,我瞬間懵逼了。查閱了一些資料加上自己的分析思考,終於是達到了效果,個人感覺制作三角形是使用頻率很高的,因此記錄下來,供以后查閱參考。達到了效果如圖:
DOM結構如圖: 
CSS代碼如下:
1 /* 給矩形一個1px實心顏色rgb為#E4E4E2的邊框 */ 2 .dynamicTime { 3 width: 125px; 4 height: 40px; 5 border: 1px solid #E4E4E2; 6 margin-left: 20px; 7 position: relative; 8 display: inline-block; 9 vertical-align: middle; 10 } 11 /* 上下透明,右邊框為10px */ 12 .dynamicTime:before { 13 content: ''; 14 position: absolute; 15 top: 10px; 16 left: -10px; 17 width: 0; 18 height: 0; 19 border-right: 10px solid #E4E4E2; 20 border-bottom: 10px solid transparent; 21 border-top: 10px solid transparent; 22 } 23 /* 上下透明,右邊框為9px且在:before偽元素三角形的基礎上,向右,下移動了1px */ 24 .dynamicTime:after { 25 content: ''; 26 position: absolute; 27 top: 11px; 28 left: -9px; 29 width: 0; 30 height: 0; 31 border-bottom: 9px solid transparent; 32 border-right: 9px solid #fff; 33 border-top: 9px solid transparent; 34 }
為便於寫出方向向上下左右的空心三角形,我分別寫出了各個方向的空心三角形,分析思考其中的實現原理。現總結如下:①空心三角原理:主要利用偽元素(:before,:after)實現, :before產生的是一個實心的#E4E4E2的三角形,而after產生的是實心的白色的三角形,將其覆蓋。因此三角形線的粗細是由覆蓋了多少決定的,即二者left,top的差值(特別注意:向左的空心三角形需要同時向右和下移,如上例子,向右的空心三角形需要同時向左和下移。向上的空心三角形只需要向下移就可以了,向下的空心三角形同理),border的四個方向的值大小只改變角度大小,不改變線的粗細。感興趣的可以自己參考我的總結,自己動手測試,感受會更加深刻。
那么實心的三角形怎么做呢? 其實實心三角形的CSS代碼,只需將相應方向的三角形樣式的after偽類刪除,即可得到實心三角形.如我需要向左的實心三角形:
1 .dynamicTime { 2 width: 125px; 3 height: 40px; 4 border: 1px solid #E4E4E2; 5 margin-left: 20px; 6 position: relative; 7 } 8 .dynamicTime:before { 9 content: ''; 10 position: absolute; 11 top: 10px; 12 left: -10px; 13 width: 0; 14 height: 0; 15 border-right: 10px solid #E4E4E2; 16 border-bottom: 10px solid transparent; 17 border-top: 10px solid transparent; 18 }
這樣就OK了, 是不是很簡單。哈哈哈哈。。。。。。。(心理活動:MD智障)。
