純CSS制作空心三角形和實心三角形及其實現原理


       純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智障)。

   

    


免責聲明!

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



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