純CSS實現(xiàn)朋友圈評論按鈕

如果使用前端技術(shù)來實現(xiàn)微信朋友圈頁面的話,其中朋友圈的評論按鈕相信很多人會選擇使用切圖來實現(xiàn),但使用純CSS實現(xiàn)也不難。

使用純CSS實現(xiàn),則需要使用偽類、定位以及CSS3中的一些新屬性。

首先,先構(gòu)建評論按鈕的HTML布局:

<div class="reply-btn-container">
    <span class="reply-btn"></span>
</div>

然后便是CSS樣式,首先我們設(shè)置包裹span標簽的容器的屬性,假設(shè)它是一個100×100的盒子,其樣式如下:

.reply-btn-container {
    width: 100px;
    height: 100px;
    margin: 0 auto;
    text-align: right;
}

我們知道,讓塊級元素水平居中可以設(shè)置margin:0 auto;,行內(nèi)元素水平居中可以設(shè)置text-align: center;。

在這里,設(shè)置margin:0 auto;主要是為了讓盒子在頁面中居中,方便查看,在實際頁面中需要根據(jù)情況來設(shè)置。

而這里的text-align: right;是為了讓span標簽在盒子內(nèi)靠右,畢竟評論按鈕一般位于頁面的右側(cè)。

接下來便是span標簽的樣式:

.reply-btn {
    width: 48px;
    height: 36px;
    background-color: currentColor;
    color: #8c99c1;
    display: inline-block;
    position: relative;
    vertical-align: middle;
}

在span標簽的樣式中,由于它是一個行內(nèi)元素,無法獨占一行,所以不能直接設(shè)置寬高,但是這個按鈕必須是要呈現(xiàn)為一個有寬高的矩形,因此,我們設(shè)置它的display屬性為inline-block,這樣雖然它仍然不獨占一行,但可以設(shè)置寬高。

這里還用到了position屬性的relative,也就是相對定位。這里來解釋下position的幾個值有何不同:

relative:相對定位,也就是相對于其正常位置(自己)進行定位,比如此處設(shè)置left:20px,就是相對自己當(dāng)前的位置向左偏移20px。相對定位是不會脫離標準文檔流的,只是視覺上發(fā)生了偏移,還會保持原來的占位。

absolute:絕對定位,是相對于自己最近的那個父元素進行定位(父元素必須設(shè)置相對定位或絕對定位),如若找不到符合條件的父元素,那么將相對于body進行定位。絕對定位是脫離標準文檔流的,父元素容器將得不到絕對定位了的子元素的高度。而且不管是塊級元素還是行內(nèi)元素,絕對定位之后,display屬性為block。

flixd:固定定位,是相對瀏覽器窗口的定位,并且脫離標準文檔流。

這里使用relative是為了讓之后的偽類元素使用absolute。

background-color: currentColor;這個屬性中的currentColor值,currentColor表示“當(dāng)前的標簽所繼承的文字顏色”,換種方式表示就是:currentColor = color的值。

vertical-align: middle;該屬性設(shè)置元素的垂直對齊方式,此處middle為設(shè)置元素在父元素的中部。

此時,按鈕矩形已經(jīng)設(shè)置完畢,接下來,便是按鈕左邊的三角形和內(nèi)部的兩個小圓點了,我們通過CSS偽類來實現(xiàn),主要是before和after。

before 和 after 顧名思義 其就是附著在元素前后的 偽元素,說他是偽元素的意思就是,元素不是在DOM中生成的,而是在瀏覽器渲染引擎渲染CSS的時候畫上去的,所以你在瀏覽器查看元素上是看不到偽元素的HTML結(jié)果的。

CSS樣式如下:

.reply-btn::before {
    content: "";
    width: 0;
    height: 0;
    border: 3px solid currentColor;
    border-color: transparent currentColor transparent currentColor;
    border-width: 4px 6px 4px 0;
    position: absolute;
    top: 14px;
    left: -6px;
}

.reply-btn::after {
    content: "";
    width: 6px;
    height: 6px;
    background: #fff;
    position: absolute;
    top: 13px;
    left: 10px;
    border-radius: 25%;
    box-shadow: 22px 0 0 #fff;
    transform: translate(0, 50%);
}

其中transform屬性是向元素應(yīng)用 2D 或 3D 轉(zhuǎn)換。該屬性允許我們對元素進行旋轉(zhuǎn)、縮放、移動或傾斜。
在評論按鈕中的另一個小圓點,是設(shè)置第一個小圓點的box-shadow屬性,也就是陰影來實現(xiàn)的。

最后呈現(xiàn)效果如圖所示:

回復(fù)按鈕
?著作權(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)容

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