CSS進階篇--CSS3實現氣泡效果

風雨後見彩虹發表於2014-04-23

首先定義一個

<p class="speech"></p>

先給外層的容器新增樣式:

 p.speech{
    position: relative;
    width: 200px;
    height: 100px;
    text-align: center;
    line-height: 100px;
    background-color: #fff;
    border: 8px solid #666;
    -webkit-border-radius: 30px;
    -moz-border-radius: 30px;
    border-radius: 30px;
    -webkit-box-shadow: 2px 2px 4px #888;
    -moz-box-shadow: 2px 2px 4px #888;
    box-shadow: 2px 2px 4px #888;
    }

沒有什麼特別複雜的,主要的核心就在postion:relative,用來定位對話浮層的。我們還需要一些Mozilla和webkit的屬性來完成圓角和陰影,IE8以下的瀏覽器看不到這些屬性,只是顯示一個框,不影響總體的效果。
請輸入圖片描述

我們現在需要建立對話浮層下面的那個三角形的指向標誌了。不使用圖片,我們使用CSS邊框來完成這個效果。看看下面這個用不同顏色邊框完成的效果。

請輸入圖片描述

我們把高度和寬度減少到0px,然後給邊框使用不同的大小,看看效果:

請輸入圖片描述

為了最後能做成指示標誌的樣子,我們把上邊距和左邊距設定為solid,下邊距和右邊距設定為透明:

請輸入圖片描述

但是我們把這個放哪呢?還好,我們可以使用CSS的偽類:before和:after來生成,所以:

p.speech:before{
content: ' ';
position: absolute;
width: 0;
height: 0;
left: 30px;
top: 100px;
border: 25px solid;
border-color: #666 transparent transparent #666;
}

現在三角形的標識就定位在我們的氣泡下面了。另外,不要費事去考慮這個元素的陰影,他會定位在透明邊界的旁邊,而不是看到的圖形的旁邊。

請輸入圖片描述

我們還需要移除三角形的一部分。我們可以在裡面放置一個白色的小三角形來達到這個效果。

p.speech:after{
content: ' ';
position: absolute;
width: 0;
height: 0;
left: 38px;
top: 100px;
border: 15px solid;
border-color: #fff transparent transparent #fff;
}

我們的不使用圖片的對話氣泡就完成了:

請輸入圖片描述

另外,我們還可以使用:before和:after偽類來做很多其他的事情,比如,一個思考氣泡也可以通過這樣辦法完成:

首先也是建一個

<p class="thought">I think...</p>

css程式碼:

p.thought{
position: relative;
width: 130px;
height: 100px;
text-align: center;
line-height: 100px;
background-color: #fff;
border: 8px solid #666;
-webkit-border-radius: 58px;
-moz-border-radius: 58px;
border-radius: 58px;
-webkit-box-shadow: 2px 2px 4px #888;
-moz-box-shadow: 2px 2px 4px #888;
box-shadow: 2px 2px 4px #888;
}


p.thought:before, p.thought:after{
content: '';
position: absolute;
left: 10px;
top: 70px;
width: 40px;
height: 40px;
background-color: #fff;
border: 8px solid #666;
-webkit-border-radius: 28px;
-moz-border-radius: 28px;
border-radius: 28px;
z-index:5;
}

p.thought:after{
position: absolute;
width: 20px;
height: 20px;
left: 5px;
top: 100px;
-webkit-border-radius: 18px;
-moz-border-radius: 18px;
border-radius: 18px;
z-index:6;
}

最新實現效果:

請輸入圖片描述

相關文章