《三分鐘閱讀》CSS對話方塊小尾巴的覆盤之旅

對話方塊小尾巴,估計大家在實際開發中應該經常遇到過,省事點的就是叫設計小姐姐給切個帶小尾巴的背景圖,那不省事的呢?
邊框的魔法
在css3出來之前,若通過css來實現小尾巴效果,可能使用最多的是通過如下的hack方式:
<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方向上單獨設定不同的邊框顏色即可。
這種方式是挺奇妙的,但存在以下幾個問題:
tooltip

被咬了一口的樣式,殘缺的美~
clip-path
針對以上問題,現在有了一種特別好的方式,就是通過css3新增的clip-path屬性來實現
clip-path屬性可以建立一個只有元素的部分割槽域可以顯示的剪下區域,區域內的部分顯示,區域外的隱藏
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); } } 複製程式碼