1. 程式人生 > 實用技巧 >CSS給選中元素增加倒三角形

CSS給選中元素增加倒三角形

需求如下:

給選中的item新增一個select樣式,並且生成一個下三角形

一、三角形的實現原理

寬度width為0;height為0;根據三角形的朝向設定上下左右的border,只能設定其中的三個邊框,不用給朝向的那一邊設定border。

(1)有一條橫豎邊(上下左右)的設定為border-方向:長度 solid white,這個畫的就是底部的直線。其他邊使用border-方向:長度 solid transparent。

(2)有兩個橫豎邊(上下左右)的設定,若斜邊是在三角形的右邊,這時候設定top或bottom的直線,和右邊的斜線。若斜邊是在三角形的左邊,這時候設定top或bottom的直線,和左邊的斜線。

2.1 Triangle Up


#triangle-up {
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 100px solid red;
}

2.2 Triangle Down

#triangle-down {
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-top: 100px solid red;
}

2.3 Triangle Left

#triangle-left {
    width: 0;
    height: 0;
    border-top: 50px solid transparent;
    border-right: 100px solid red;
    border-bottom: 50px solid transparent;
}

2.4 Triangle Right

#triangle-right {
    width: 0;
    height: 0;
    border-top: 50px solid transparent;
    border-left: 100px solid red;
    border-bottom: 50px solid transparent;
}

2.5 Triangle Top Left

#triangle-topleft {
    width: 0;
    height: 0;
    border-top: 100px solid red;
    border-right: 100px solid transparent;
}

2.6Triangle Top Right

#triangle-topright {
    width: 0;
    height: 0;
    border-top: 100px solid red;
    border-left: 100px solid transparent;
 
}

2.7 Triangle Bottom Left

#triangle-bottomleft {
    width: 0;
    height: 0;
    border-bottom: 100px solid red;
    border-right: 100px solid transparent;
}

2.8 Triangle Bottom Right

#triangle-bottomright {
    width: 0;
    height: 0;
    border-bottom: 100px solid red;
    border-left: 100px solid transparent;
}

二、通過 :after選擇器進行美化

現在我們知道了三角形的實現原理,接下來就是將這個三角形固定到選中元素的底部,我們可以利用 :after選擇器。

對於:before 和 :after 選擇器,大家並不陌生,但是很少有人會主動去用它們。先解釋下它們的定義和用法:

:before 選擇器在被選元素的內容前面插入內容,:after 選擇器在被選元素的內容後面插入內容,都會使用 content 屬性來指定要插入的內容。

所以我們就可以這麼來實現了:

               .select {
                    background: #fff;
                    position: relative;
                }
                .select:after{
                    content: "";
                    width: 0;
                    height: 0;
                    border-left: 10px solid transparent;
                    border-right: 10px solid transparent;
                    border-top: 10px solid #fff;
                    position: absolute;
                    bottom: -10px;
                    left: 40px;
                }

select是被選元素的樣式,通過:after 將三角形插入到被選元素的後面。一定要注意的是content:"",不能少,否則不生效。