三分鐘閱讀:給本身3分鐘的時間,拾起本身遺漏的知識點,第3期css
對話框小尾巴,估計你們在實際開發中應該常常遇到過,省事點的就是叫設計小姐姐給切個帶小尾巴的背景圖,那不省事的呢?html
在css3出來以前,若經過css來實現小尾巴效果,可能使用最多的是經過以下的hack方式:css3
<div class="tooltip">
<p>我是快樂的小尾巴的爸爸</p>
<span class="triangle"></span>
</div>
複製代碼
.tooltip {
position: relative;
background-color: silver;
width: 200px;
height: 50px;
border-radius: 0.25em;
display: flex;
justify-content: center;
align-items: center;
border:1px solid red;
}
.triangle {
display: block;
height: 0px;
width: 0px;
border: 10px solid transparent;
border-top-color: silver;
background:red;
position: absolute;
bottom: -20px;
left: calc(50% - 10px);
}
複製代碼
效果以下:瀏覽器
不設置triangle
寬高,設置border
10像素的透明邊框,而後設置top
方向邊框顏色和父元素一致就可完成這樣的效果,同理,變換小尾巴箭頭方向只須要在top,bottom,left,right方向上單獨設置不一樣的邊框顏色便可。sass
這種方式是挺奇妙的,但存在如下幾個問題:flex
tooltip
設置邊框顏色,小尾巴顏色就法設置了,由於小尾巴自己就是經過邊框魔法實現的被咬了一口的樣式,殘缺的美~網站
針對以上問題,如今有了一種特別好的方式,就是經過css3新增的clip-path屬性來實現ui
clip-path屬性能夠建立一個只有元素的部分區域能夠顯示的剪切區域,區域內的部分顯示,區域外的隱藏spa
css代碼以下:設計
.triangle {
display: block;
height: 20px;
width: 20px;
background-color: inherit;
border: inherit;
position: absolute;
bottom: -10px;
left: calc(50% - 10px);
// ---關鍵代碼 start---
clip-path: polygon(0% 0%, 100% 100%, 0% 100%);
transform: rotate(-45deg);
// ---end---
border-radius: 0 0 0 2px;
}
複製代碼
咱們能夠看到triangle
繼承了父元素tooltip
的邊框顏色以及背景色,同時咱們還設置了小尾巴2個像素的圓角。
其中polygon
多邊形的座標以下:
深綠色塊就是咱們要顯示的區域,而後逆時針翻轉45度就成了咱們想要的樣式。
多麼好的方式呀!
那瀏覽器兼容性如何呢?我查看了下Caniuse這個網站,除了老IE基本其它瀏覽器都支持,因此開心的用起來吧!
最後提供一個sass
的mixin,參數是上下左右四個方向。
@mixin triangleMixin ($direction) {
background-color: inherit;
border: inherit;
clip-path: polygon(0% 0%, 100% 100%, 0% 100%);
@if( $direction == left ) {
transform: rotate(45deg);
} @else if( $direction == right ) {
transform: rotate(-135deg);
} @else if( $direction == down ) {
transform: rotate(-45deg);
} @else {
transform: rotate(135deg);
}
}
複製代碼