[CSS] 用偽元素:after實現(xiàn)分割線和氣泡

學(xué)習(xí)前端網(wǎng)頁開發(fā)并將其應(yīng)用于工作中已經(jīng)兩個月了,發(fā)現(xiàn)前端包括的內(nèi)容真的是無比豐富,知識量巨大……漫漫長路遠,尚需艱苦努力。作為一只前端開發(fā)的菜鳥,寫不了特別深刻的關(guān)于前端技術(shù)性文章,只是想將工作中遇到比較有意思的內(nèi)容收集整理一下,理解一下,分享一下,希望對自己有所幫助,如果也能給讀者帶來一些幫助和啟發(fā),將不甚榮幸……閑話少說,進入正題。

在網(wǎng)頁設(shè)計中顯示分割線可以使用元素的border單邊顯示即可,但是這種方法會增大元素的長度或者寬度,在元素需要精細計算以便達到布局效果的情況下,添加border往往會打亂布局。比如下面的html代碼,想實現(xiàn)兩個horizontal-cell的div水平排列,并且各占父節(jié)點的50%的寬度,并且中間要添加分割線。

<div class="content">
    <div class="horizontal-cell" >分割線</div>
    <div class="horizontal-cell separator">顯示分割線</div>
</div>

如果我們只是簡單在separator類的樣式的中添加border-left 屬性,雖然也添加了分割線,但是會影響兩個horizontal-cell類的div布局將會從橫向變成縱向,打亂了布局。為解決這個問題,可以使用偽元素:after,css代碼如下:

/*兩個元素各占50%的寬度在水平方向顯示,添加分割線*/
.horizontal-cell{
    float: left;    
    width: 50%;    
    background: light green;
}
.separator{   
    position: relative;
}
.separator:after{    
   position: absolute;    
   top:0.1em;    
   height: calc(100% - 0.2em);    
   left:0;    
   content: '';    
   width:0;    
   border-left: solid  darkblue 1px;
}
分割線效果圖.png

.separator:after 偽元素會浮在horizontal-cell類的元素之上,不會擠用橫向的空間,.separator:after中用border-left屬性來實現(xiàn)豎直分割線的顯示。我們也可以用同樣的方法實現(xiàn)水平的分割線。

用類似的方法我們也可以在垂直排列的內(nèi)部文字需要對齊的列表上打標(biāo)記。html代碼和相應(yīng)的css代碼如下:

<div class="content">
    <div class="cell0 " >不帶mark 的 cell0</div>
    <div class="cell0 mark" >帶mark 的 cell0(使用:after偽元素方法)</div>
    <div class="cell0 left-border" >帶mark 的 cell0(不使用:after偽元素方法,直接用css屬性border)</div>
</div>
/*前置色塊標(biāo)記*/
.cell0{    
      padding-left: 1.2em;    
      background: lightgrey;    
      text-align: left;
}
.mark {    
      position: relative;
}
.mark:after{    
      position: absolute;    
      top:0;    
      height: 100%;    
      left:0;    
      content: '';    
      width:0;    
      border-left: solid  #5dd7bf 0.6em;
}
.left-border{    
      border-left: solid  #5dd7bf 0.6em;
}

效果圖如下:


加標(biāo)記效果圖.png

效果圖中第三行的樣式?jīng)]有使用:after,與第二行對比可以看出,雖然也加了標(biāo)記,但是卻沒有與第一行中的文本進行對齊。

:after除了實現(xiàn)分割線、標(biāo)記色塊,還有一個非常有用的應(yīng)用就是實現(xiàn)類似手機對話框的氣泡,可以看如下代碼:

<div class="bubble bubble-left">箭頭指向左邊的氣泡</div>
<div class="bubble bubble-right">箭頭指向右邊的氣泡</div>
<div class="bubble bubble-top">箭頭指向上邊的氣泡</div>
<div class="bubble bubble-bottom">箭頭指向下邊的氣泡</div>
/*氣泡相關(guān),可以用于顯示對話框等等*/
.bubble{    
    position: relative;    
    padding: 0.75em;    
    color: #ffffff;    
    font-size: 0.9em;    
    line-height: 1.3em;    
    text-align: left;    
    border-radius: 0.5em;    
    margin-left: 3.6em;    
    margin-top: 1.2em;    
    margin-bottom: 1.2em;    
    margin-right: 5.2em;    
    float: left;    
    background-color: #60d8ce;    
    height: 4em;
}
.bubble:after {    
    content: '';    
    position: absolute;    
    width: 0;    
    height: 0;    
    border: 15px solid rgba(0, 0, 0, 0);    
    border-left-width: 0;
}
.bubble-left:after {    
    border-right-color: #60d8ce;    
    top: 0%;    
    right: 100%;    
    margin-top: 0.9em;    
    border-left-width: 0.0em;    
    border-right-width: 0.6em;    
    border-bottom-width: 0.4em;    
    border-top-width: 0.4em;
}
.bubble-right:after {    
    border-left-color: #60d8ce;    
    top: 0%;    left: 100%;    
    margin-top: 0.9em;    
    border-right-width: 0.0em;    
    border-left-width: 0.6em;    
    border-bottom-width: 0.4em;    
    border-top-width: 0.4em;
}
.bubble-top:after {    
    border-bottom-color: #60d8ce;    
    left: 0%;    
    bottom: 100%;    
    margin-left: 1.9em;    
    border-top-width: 0.0em;    
    border-bottom-width: 0.6em;    
    border-left-width: 0.4em;    
    border-right-width: 0.4em;
}
.bubble-bottom:after {    
    border-top-color: #60d8ce;    
    left: 0%;    
    top: 100%;    
    margin-left: 1.9em;    
    border-bottom-width: 0.0em;    
    border-top-width: 0.6em;    
    border-left-width: 0.4em;    
    border-right-width: 0.4em;
}

氣泡箭頭部分的實現(xiàn)與之前例子中的分割線類似,都是用偽元素:after 的border的寬度和顏色透明與否來實現(xiàn)長方形或者三角形箭頭的形狀,然后通過left、right、top、bottom等等屬性調(diào)整:after偽元素與圓角對話框元素的相對位置,來實現(xiàn)氣泡的形狀。

氣泡效果圖.png

綜合來看,以上所提到偽元素:after來實現(xiàn)分割線和氣泡,方法是類似的,關(guān)鍵點是元素的CSS的position屬性要設(shè)置成relative,而與之相應(yīng)的:after偽元素(用來形成三角形或者矩形)的position屬性要設(shè)置成absolute,這樣:after偽元素才能夠調(diào)整與元素的相對位置,然后改變:after偽元素的展現(xiàn)的形狀,從而實現(xiàn)分割線、標(biāo)記和氣泡等效果。

由于是前端開發(fā)的菜鳥,以上關(guān)于偽元素:after的應(yīng)用只是提到了一點皮毛,只是做一點小小的歸納,希望隨著自己學(xué)習(xí)的深入,以后關(guān)于前端的技術(shù)文章能寫得更加深入。以上貼出來的代碼部分,已經(jīng)比較完整,復(fù)制粘貼到工程里,完全可以實現(xiàn)以上效果圖顯示的效果。完整源碼下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J的外補...
    _Yfling閱讀 14,206評論 1 92
  • 各種純css圖標(biāo) CSS3可以實現(xiàn)很多漂亮的圖形,我收集了32種圖形,在下面列出。直接用CSS3畫出這些圖形,要比...
    劍殘閱讀 10,005評論 0 8
  • 本文轉(zhuǎn)載自:眾成翻譯譯者:為之漫筆鏈接:http://www.zcfy.cc/article/239原文:http...
    極樂君閱讀 7,559評論 1 62
  • 1、屬性選擇器:id選擇器 # 通過id 來選擇類名選擇器 . 通過類名來選擇屬性選擇器 ...
    Yuann閱讀 1,771評論 0 7
  • 昨晚,借助藍夜的能量,夢中也正是從上往下看的一個視覺角度,幫我提高了一層思想緯度。 人,出生入死,早晚都是要回“家...
    UnaFung閱讀 246評論 0 1

友情鏈接更多精彩內(nèi)容