CSS給選中元素增加倒三角形
阿新 • • 發佈:2020-07-25
需求如下:
給選中的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:"",不能少,否則不生效。