本篇文章給大家介紹一下使用純CSS實現(xiàn)九宮格提示超出數(shù)量僵芹。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所助谐宙。
經(jīng)常在某些 app 中看到這樣的九宮格設(shè)計。當(dāng)縮略圖不足 9 張時界弧,正常排列凡蜻,當(dāng)超過 9 張時,會提示還剩多少張垢箕,如下:
如何使用純 CSS 實現(xiàn)這一效果呢划栓?一起來看看吧
一、九宮格布局
布局就很簡單了条获,一個很普通的九宮格布局忠荞,這里使用 grid
<ul class="list">
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
...
</ul>
這里正方形可以用aspect-ratio簡易實現(xiàn),對應(yīng)的 CSS 如下
.list{
position: relative;
display: grid;
width: 300px;
margin: auto;
grid-template-columns: repeat(3,1fr);
list-style: none;
padding: 0;
gap: 2px;
}
.item{
aspect-ratio: 1;/*寬高比1:1*/
}
效果如下
那么帅掘,如何實現(xiàn)在超過9張時自動提示剩余張數(shù)呢委煤?接著往下看
二、CSS 計數(shù)器
提到序列修档,自然會想到 CSS 計數(shù)器碧绞,現(xiàn)在我們加上計數(shù)器
.list{
/*...*/
counter-reset: count; /*初始化*/
}
然后在每一個 .item
顯示數(shù)字,可以用到偽元素::after
.item{
counter-increment: count;
}
.item::after{
content: counter(count);
/*其他樣式*/
display: grid;
height: 100%;
place-content: center;
font-size: 30px;
color: #fff;
}
這樣可以得到如下效果
數(shù)字是顯示出來了吱窝,不過現(xiàn)在還有兩個問題:
數(shù)量超過9個時讥邻,不會隱藏超過的圖片
這個數(shù)字不是超出圖片的數(shù)量,而是總數(shù)
三院峡、 隱藏超出的圖片
這個其實非常容易兴使,由于數(shù)量是固定的,只需要利用選擇器nth-child
配合~
就能實現(xiàn)
.item:nth-child(9)~.item{
/*選擇第9個以后的元素*/
visibility: hidden;
}
這個地方是通過 visibility: hidden
隱藏超過的圖片撕予,原因是該屬性不會影響計數(shù)器的計算鲫惶,如果使用display:none
則會跳過計數(shù)
四、 統(tǒng)計超過的數(shù)量
目前由于是從第1個開始計數(shù)实抡,所以最后統(tǒng)計的是整個列表的數(shù)量欠母,但是我們可以指定從第10個才開始計數(shù)欢策,會得到什么效果呢?為了方便演示赏淌,暫時把隱藏打開
.item{
/*counter-increment: count;*/
}
.item:nth-child(9)~.item{
/*從第10個開始計數(shù)*/
counter-increment: count;
}
.item:nth-child(9)~.item::after{
content: counter(count);
}
可以看到踩寇,從第10個開始計數(shù)后,最后一個數(shù)字就表示還剩余多少張
現(xiàn)在把最后一張放在右下角就行了(絕對定位)六水,最后一張可以用.item:nth-child(9)~.item:last-child
來選擇俺孙,表示第9張后面的最后一張圖片,實現(xiàn)如下
.item:nth-child(9)~.item{
position: absolute;
width: calc(100% / 3 - 1px);
counter-increment: count;
visibility: hidden;
right: 0;
bottom: 0;
}
.item:nth-child(9)~.item:last-child::after{
visibility: visible;
background-color: rgba(0,0,0,.2);
}
這樣就實現(xiàn)了純 CSS 自動提示剩余圖片的效果掷贾,演示如下
這里的 add 和 remove 是演示動態(tài)修改節(jié)點數(shù)量睛榄,與交互邏輯無關(guān)
完整代碼可訪問 list-counter (codepen.io)
五、其他初始化方式
在上一種實現(xiàn)方式中想帅,我們是手動指定從第 10 個元素開始計數(shù)的
.item:nth-child(9)~.item{
/*從第10個開始計數(shù)*/
counter-increment: count;
}
其實场靴,還有一種方式也值得一試,那就是直接指定計數(shù)器的初始值港准,默認(rèn)為0旨剥,現(xiàn)在改為 -9 就可以了,實現(xiàn)如下
.list{
/*...*/
counter-reset: count -9; /*初始化為-9*/
}
不一樣的初始化思路浅缸,剩下的就和之前一樣的邏輯了轨帜,完整代碼可訪問 list-counter-reset (codepen.io)
六、總結(jié)和說明
這個案例到這里就結(jié)束了衩椒,一個低成本的 CSS 小技巧蚌父,雖然不多,但是非常實用烟具,尤其是選擇器的運(yùn)用梢什,說不定將來哪次就會用上了。CSS 計數(shù)器可以說是非常靈活和強(qiáng)大了朝聋,仔細(xì)挖掘應(yīng)該還能實現(xiàn)更多實用的效果,這里總結(jié)一下:
九宮格布局如果不考慮兼容性優(yōu)先使用 grid 布局
自適應(yīng)正方形可以使用 aspect-ratio 實現(xiàn)
遇到和序列有關(guān)的布局囤躁,優(yōu)先考慮 CSS 計數(shù)器
靈活運(yùn)用 CSS 選擇器冀痕,nth-child(n)和 ~ 可以組合選擇第 n 個以后的元素
可以指定從第 n 個元素開始計數(shù)
可以指定計數(shù)器的初始值
CSS 計數(shù)器沒有兼容性問題,可以放心使用
本文轉(zhuǎn)載自:https://www.php.cn/css-tutorial-479690.html
更多編程相關(guān)知識狸演,請訪問:編程入門Q陨摺!