純CSS代碼實現(xiàn)各類氣球泡泡對話框效果
一、關(guān)于純CSS實現(xiàn)氣泡對話框
首先,來張大圖:
上邊這張黃黃的,大大的,圓圓的,有個小尾巴,文字內(nèi)容有些YY的圖片,就是使用純CSS實現(xiàn)的氣泡對話框效果,一點圖片都沒有哦。看到這里,你是不是跟我一樣,有些驚嘆CSS的潛力呢。關(guān)于這張圖片,暫時先放到一邊,下面我要講一些與主旨相關(guān)的比較重要的,同時又很實用的一些技術(shù)。
我們首先看下面這一張圖片(截自人人網(wǎng)):
可能顏色有點淡,在左上角有個90度的尖角,于是整個形成了一個氣泡對話框?,F(xiàn)在考考你,如果你來實現(xiàn)這個效果,你會怎么做?//zxx:假設(shè)你已經(jīng)思考了一會兒????? 我想,如果您沒有看本文標題,可能就想到的是做個90度等腰三角形小圖片;就算您知道可以用CSS實現(xiàn)上面的效果,但是您知道是什么方法嗎?當然,是絕對兼容的方法。您有主意嗎?
好,我們先來看看人人網(wǎng)是怎么實現(xiàn)的,我們用bug(//zxx:指firebug,我喜歡親切的稱之為“bug”)看一看,原來也是使用的圖片,600*6像素的圖片,見下圖:
查看此圖片點此鏈接:http://xnimg.cn/imgpro/box/box_arrow.png
這可是活生生的多了一次圖片請求啊,而且是個獨立的小圖片,關(guān)鍵是在訪問量驚人的首頁上。優(yōu)秀與平庸的差異在哪里呢?前者追求極致,后者追隨大流。
這里的圖片完全沒有必要,使用CSS可以實現(xiàn)近乎一樣的效果,并且方法不止一種,我目前知道的有兩種方法可以實現(xiàn)上面人人網(wǎng)的氣泡對話框效果。我將這兩個方法自己定義為“邊框法”與“字符法”。
二、“字符法”與“邊框法”
1. 字符法
關(guān)于“字符法”,其實在我的“告別圖片—使用字符實現(xiàn)兼容性的圓角尖角效果beta版”一文中已經(jīng)比較詳盡的提及過。
這里再簡單講述下,世界上的語言多種多樣,字符的種類也是千差萬別,形狀也是千奇百怪,所以,有些字符就可以當作圖形來使用,以模擬一些web表現(xiàn)效果。例如,上面的人人網(wǎng)對話框尖角就可以使用棱形字符(◆)來實現(xiàn),看到這個形狀上面的90度的尖角了嗎,我們可以讓其溢出div顯示,不就有了尖角效果了嗎!定位可以使用margin負值或是absolute絕對定位。
在我的網(wǎng)站上就應(yīng)用了這個方法,您可以在網(wǎng)站的“提問與交流”頁面看到類似下圖所示的內(nèi)容:
具體使用:“字符法”實現(xiàn)氣泡對話框demo
里面顯示了CSS與HTML代碼。
2. 邊框法
關(guān)于“邊框法”,這說起來話就長了。不急,慢慢來。
我們首先來看下面一段樣式代碼:
當某個div應(yīng)用了上面這個樣式后,結(jié)果會如何?見下圖(截自Firefox3.5,IE瀏覽器有細節(jié)上的差異):
仔細觀察邊框色的交界處,四個角落有4個45°的斜邊,將整個邊框分成了四個等腰梯形。
現(xiàn)在,設(shè)想一下,如果我們現(xiàn)在只保留一個一個上邊框,其余邊框均transparent透明(或與背景色同色),那么是不是就只顯示一個上面紅色的邊框了,我們測試下,與上面類似的代碼,只是修改下其余三個邊框的顏色。
結(jié)果如下圖(截自Firefox3.5):
可見顯示結(jié)果正如我們預(yù)想的。現(xiàn)在,再次開動腦筋,試想下,如果上面樣式中的寬度和高度都是0,也就是width:10px; height:10px;變成了width:0; height:0;。對了,那么顯示的將不會是個等腰梯形了,而是個等腰直角三角形。做個簡單測試就知道答案了,如下的代碼:
結(jié)果如下(依舊截圖自Firefox3.5):![]()
此時,我們驚奇的發(fā)現(xiàn),使用border屬性居然產(chǎn)生了一個等腰直角三角形,而這個等腰直角三角形用做氣泡對話框的尖角再合適不過了。所以,上面的人人網(wǎng)對話框的尖角就可以用border實現(xiàn)了,只要讓下邊框有顏色,其他透明(或與外背景同色)就好了。
關(guān)于“邊框法”實現(xiàn)的效果:“邊框法”實現(xiàn)氣泡對話框demo,或參見下圖。
還沒完,我們現(xiàn)在再開動我們智慧的大腦,設(shè)想下,如果各個邊框的寬度不一致,又會產(chǎn)生怎樣的結(jié)果呢?我們把測試代碼再修改一下,讓其邊框?qū)挾炔灰恢拢缦拢?/p>
得到的結(jié)果如下圖:
可以發(fā)現(xiàn),尖角被拉高了,也就是相鄰邊框?qū)挾鹊谋壤龝绊憜蝹€邊框形狀的高與低的比例,這不難理解。
現(xiàn)在,我們再開動一下我們的腦筋,如果我們讓相鄰兩個邊框顯示顏色會怎么樣呢?測試一下吧,如下代碼:
結(jié)果如下圖:
這不就不多說什么了,大伙兒都看到,上個相鄰邊框尖角實現(xiàn)的氣泡對話框效果吧。
三、“邊框法”的高級應(yīng)用
說是高級應(yīng)用,準確講應(yīng)該是“復(fù)雜應(yīng)用”。就是說用兩個標簽(或無標簽 – 使用:before與:after偽類)形成的兩個不同的邊框進行組合顯示實現(xiàn)的一些效果。
看下面兩個圖,本單元就是要實現(xiàn)下面兩種效果:

1、效果(1)
CSS代碼如下:
.test{width:300px; padding:30px 20px; margin-left:60px; background:#beceeb; position:relative;}
.test span{width:0; height:0; font-size:0; overflow:hidden; position:absolute;}
.test span.bot{
border-width:20px;
border-style:solid;
border-color:#ffffff #beceeb #beceeb #ffffff;
left:-40px;
top:40px;
}
.test span.top{
border-width:10px 20px;
border-style:dashed solid solid dashed;
border-color:transparent #ffffff #ffffff transparent;
left:-40px;
top:60px;
}
HTML代碼如下:
2、效果(2)
CSS代碼如下:
.test{width:300px; padding:30px 20px; border:5px solid #beceeb; position:relative;}
.test span{width:0; height:0; font-size:0; overflow:hidden; position:absolute;}
.test span.bot{
border-width:20px;
border-style:solid dashed dashed;
border-color:#beceeb transparent transparent;
left:80px;
bottom:-40px;
}
.test span.top{
border-width:20px;
border-style:solid dashed dashed;
border-color:#ffffff transparent transparent;
left:80px;
bottom:-33px;
}
HTML代碼如下:
3、效果原理簡述
原理的關(guān)鍵字就是“覆蓋”,另外一個邊框形成的尖角覆蓋之前的一個,只要控制好覆蓋的位置,然后就形成了實際上的不規(guī)則尖角或是尖角邊框。您還可以發(fā)揮您的創(chuàng)造力,實現(xiàn)更多其它的效果。
四、關(guān)于“邊框法”的一些說明
關(guān)于“邊框法”,有一些知識必須要提一下。
1. IE6的奇偶bug
如果定位外框高度或是寬度為奇數(shù),則IE6下,絕對定位元素的低定位和右定位會有1像素的誤差。所以,盡量保證外框的高度或?qū)挾葹榕紨?shù)值。
2. IE6的空div莫名高度bug
IE6下,空div會有莫名的高度,也就是說height:0;不頂用,此時形成的尖角的實際占高于其他瀏覽器是有差異的??墒褂胒ont-size:0; + overflow:hidden;修復(fù)此問題。
3. IE6不支持實線邊框透明transparent屬性
IE6不支持實線邊框透明transparent屬性,當某邊框設(shè)置為transparent屬性,且有寬度的話,那么透明會以默認的黑色顯示的。解決方法有兩個,一是將需要隱藏的顏色設(shè)置為背景色,這樣與透明效果一樣,此法有局限性,在復(fù)雜“邊框法”應(yīng)用下是行不通的;二是可以使用dashed代替solid,可以實現(xiàn)IE6下邊框transparent透明。為什么能夠?qū)崿F(xiàn)透明?您可以參考默塵的這篇文章Dotted&Dashed終極分析及IE6透明邊框,我說點題外話,其對原因的解釋似乎說的通,但是,是不是如此,我是相當懷疑的,我尚未有時間驗證,這個可以標記一下。
五、利用CSS3實現(xiàn)氣泡樣式的對話框
之前我們所說的一切,是全兼容現(xiàn)在所有主流瀏覽器的。而這里的方法,只支持對CSS3支持良好的瀏覽器,例如Firefox3.5+,chrome以及Safari。本文一開頭的那張黃黃的大圖就是使用的CSS3實現(xiàn)的圓形以及圓弧狀的拐角尾巴。
效果的核心就是CSS3的圓角屬性:border-radius,例如開始的大尾巴圖片,就是使用border-radius實現(xiàn)的三個圓組成的,大圓形成主體內(nèi)容,兩個小一點的圓相互遮蓋,形成圓弧小尾巴,但這個不具體講,現(xiàn)在,以一個相對簡單點的例子做示例。
CSS代碼如下:
.test{
width:300px;
padding:80px 20px;
margin-left:100px;
background:#beceeb;
-webkit-border-top-left-radius:220px 120px;
-webkit-border-top-right-radius:220px 120px;
-webkit-border-bottom-right-radius:220px 120px;
-webkit-border-bottom-left-radius:220px 120px;
-moz-border-radius:220px / 120px;
border-radius:220px / 120px;
position:relative;
}
.test span{width:0; height:0; font-size:0; background:#beceeb; overflow:hidden; position:absolute;}
.test span.bot{
width:30px;
height:30px;
-moz-border-radius:30px;
-webkit-border-radius:30px;
border-radius:30px;
left:10px;
bottom:-20px;
}
.test span.top{
width:15px;
height:15px;
-moz-border-radius:15px;
-webkit-border-radius:15px;
border-radius:15px;
left:0px;
bottom:-40px;
}
HTML代碼如下:
最后的效果如下圖:
六、結(jié)語
還是那句話,資歷有限,錯誤難免,所以如果您發(fā)現(xiàn)文章中有表述不準確或是有相關(guān)問題需要交流可以通過評論或是去這里進行提問交流。
相關(guān)文章

CSS3打造的現(xiàn)代交互式登錄界面詳細實現(xiàn)過程
本文介紹CSS3和jQuery在登錄界面設(shè)計中的應(yīng)用,涵蓋動畫、選擇器、自定義字體及盒模型技術(shù),提升界面美觀與交互性,同時優(yōu)化性能和可訪問性,感興趣的朋友跟隨小編一起看看吧2025-06-20CSS普通流、浮動與定位網(wǎng)頁布局三大機制及最佳實踐
本文給大家講解CSS 的三種核心布局機制——普通流(Normal Flow)、浮動(Float)和定位(Positioning)對于創(chuàng)建靈活、響應(yīng)式的網(wǎng)頁至關(guān)重要,本文將深入探討這三種機制的工作原2025-06-19
css實現(xiàn)角標效果并帶有文章或圖標效果(完整代碼)
文章介紹如何用CSS實現(xiàn)角標效果,通過.active類結(jié)合::after和::before偽元素,利用定位、邊框和旋轉(zhuǎn)創(chuàng)建紅色邊框與白色三角形的提示標志,適用于按鈕或卡片元素的視覺增強設(shè)計2025-06-19CSS Anchor Positioning重新定義錨點定位的時代來臨(最新推薦)
CSS Anchor Positioning是一項仍在草案中的新特性,由 Chrome 125 開始提供原生支持需啟用實驗 flag,它允許你在 CSS 中通過錨點(anchor)來相對于任意 DOM 元素定位,本文2025-06-17CSS中的Static、Relative、Absolute、Fixed、Sticky的應(yīng)用與詳細對比
CSS 中的 position 屬性用于控制元素的定位方式,不同的定位方式會影響元素在頁面中的布局和層疊關(guān)系,以下是 static、relative、absolute、fixed、sticky 的詳細對比和應(yīng)用2025-06-17CSS place-items: center解析與用法詳解
place-items: center; 是一個強大的 CSS 簡寫屬性,用于同時控制 網(wǎng)格(Grid) 和 彈性盒(Flexbox) 布局中的對齊方式,本文給大家介紹CSS place-items: center; 詳解與用法2025-06-17
在日常開發(fā)中,我們經(jīng)常需要讓某個元素占據(jù)容器的剩余空間,本文將介紹5種不同的方法來實現(xiàn)這個需求,并分析各種方法的優(yōu)缺點,感興趣的朋友一起看看吧2025-06-17CSS中前端單位 px、vw、vh 等的區(qū)別與使用建議
CSS單位區(qū)別與使用場景總結(jié):px絕對、vw/vh響應(yīng)式,%繼承父尺寸,em/rem文字縮放,vmin/vmax適應(yīng)寬高變化,固定布局用px或%,響應(yīng)式布局用vw/vh/rem,文字用em或rem,本文給大家2025-06-16CSS 樣式表的四種應(yīng)用方式及css注釋的應(yīng)用小結(jié)
這篇文章主要介紹了CSS 樣式表的四種應(yīng)用方式及css注釋的應(yīng)用小結(jié),本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2025-05-21- 在CSS布局中,padding屬性是控制元素內(nèi)容與其邊框之間距離的關(guān)鍵工具,本文介紹CSS基礎(chǔ)中padding,通過本文的介紹,我們深入了解了padding的基本概念、簡寫方法以及它對元2025-05-16




