div+css實現帶三角箭頭提示框

來源:互聯網
上載者:User

帶三角箭頭的提示框,就是下面所示:

  

這是一個提示框

通常我們都用圖片來實現上面那個小三角,因為這樣方便快速,但是如果圖片處理得不好,會看起來有雜邊,從而影響視覺,所以換一種思路來解決。

首先來研究一下CSS是如何?三角形的。

假定有一個盒子(div),給定寬高分別為100像素,再給定邊框50像素,那麼它看起來會是下面這個樣子(為了更直觀,給了邊框四種不同的顏色):

 

 

接下來,把盒子的高度設為0:

 

再把寬度也設為0:

 

這樣雛形就已經出來了,由於IE6的bug(高度為0的div會有一定預設的高度,我的電腦上測量結果為19像素),需要做一些小調整,給div加一個overflow:hidden,IE6就能正確解析了。

接下來的工作就是去掉其餘的三個邊框。以向上箭頭為例,假如我想讓箭頭朝上,那麼就需要將左、上、右三條邊框的顏色給去掉。一個常規的方法是將這三條邊框的顏色設為透明,即transparent屬性。

border-color:transparent transparent #056F61

設定以後可以看到如下效果:

 

這樣CSS製作的三角形就完成了。到這裡看起來工作好像差不多可以結束的樣子,還需要測試一下瀏覽器的相容性,經過測試,主流瀏覽器都支援,但是開啟IE6,結果悲催了,居然是這個樣子(T-T) :

 

排查一下哪個地方出了問題,才發現原來IE6不支援transparent屬性,如之奈何?前面已經做了這麼多工作,總不能倒在IE6下吧。

於是上網查了一下IE6支援transparent的方法,結果是需要使用濾鏡。不過這個方案肯定不行,要使用濾鏡的話,還不如直接用圖片。之後再研究了一下,

發現如果將其餘三條邊的屬性由solid改為dotted或者dashed就可以了:

/*border-style:solid*/border-style:dotted dotted solid;border-width:50px;border-color:transparent transparent #056f61; 

這樣看起來IE6就“支援”transparent屬性了。為什麼會這樣呢?這個問題我還沒搞明白。經過測試發現,如果將盒子的邊框類型設定為dashed,在IE6下會有一個奇特的行為:

當盒子的寬高為100像素,邊框的寬度為34像素且類型為dashed時,邊框就會消失,設為33像素時又顯示了,而且這個比例是一定的。

這也許就解釋了為什麼將邊框類型改為dashed時IE6顯示“正常”了。

當邊框類型為dotted時,IE6顯示如下:

將盒子的寬高設為0時黑點消失,此時IE6也顯示“正常”了。

雖然IE6的解析可能有問題,但是總算“解決”了其不支援transparent的bug。

接下來的工作就很簡單了,如法炮製一個三角形,背景和提示框一致,將其疊加到之前的三角形上,只留一像素的邊,再將其定位到提示框上。

可以根據需求製作左右和下邊的三角。

以上是個人的一些心得體會,如果有不對的地方還請各位指正。

源碼: 帶三角箭頭的提示框

------------------------------

轉載請註明出處。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.