使用純 CSS 實(shí)現(xiàn)滾動陰影效果
開門見山,有這樣一種非常常見的情況,對于一些可滾動的元素而言。通常在滾動的時候會給垂直于滾動的一側(cè)添加一個陰影,用于表明當(dāng)前有元素被滾動給該滾出了可視區(qū)域,類似這樣:

可以看到,在滾動的過程中,會出現(xiàn)一條陰影:

對于兩側(cè)的列在滾動的過程中,靜止不動,吸附在邊界的問題,通常 CSS 使用position: sticky即可解決。
但是對于滾動過程中才出現(xiàn)的陰影(滾動容器內(nèi)的內(nèi)容沒有貼邊,則陰影出現(xiàn),貼邊,則陰影消失),之前的做法一直都是需要借助 JS 完成的。
那么,有沒有純 CSS 能夠?qū)崿F(xiàn)的方案呢?嘿嘿嘿,有。有一種非常討巧的障眼法,下面就讓我們來一步一步揭開它的面紗。
神奇的background-attachment
要使用純 CSS 實(shí)現(xiàn)上述滾動陰影,最核心的要使用到的元素就是background-attachment。
在較早的一篇文章里 --CSS 實(shí)現(xiàn)視差效果,詳細(xì)了介紹了background-attachment,借助了background-attachment: fixed可以簡單的實(shí)現(xiàn)網(wǎng)站的滾動視差或者是類似圖片點(diǎn)擊的水紋效果,類似這樣:

當(dāng)然,今天我們的主角不是background-attachment: fixed,而是background-attachment: srcoll。
background-attachment: srcoll
首先,介紹一下background-attachment,如果指定了background-image,那么background-attachment決定背景是在視口中固定的還是隨著包含它的區(qū)塊滾動的。
簡單而言,就是決定了在可滾動的容器中,背景圖案是如何進(jìn)行運(yùn)動的。通過兩個簡單的 Demo,弄懂background-attachment: srcoll和background-attachment: local。
background-attachment: local,這個就是和我們?nèi)粘J褂弥械挠梅ㄊ且恢碌?,可滾動容器的背景圖案隨著容器進(jìn)行滾動:

background-attachment: scroll,這個是今天的主角,它表明背景相對于元素本身固定, 而不是隨著它的內(nèi)容滾動:

如果你還沒弄明白他們的區(qū)別,可以戳下面的 DEMO 自己感受一下:
CodePen Demo -- bg-attachment Demo
srcoll與local同時使用,實(shí)現(xiàn)障眼法
到這里,可能很多同學(xué)還是懵的,我們到底要做什么呢?這個和本文的滾動陰影有什么關(guān)聯(lián)呢?
別急,滾動陰影的難點(diǎn)在于,初始沒有滾動的時候是沒有陰影展現(xiàn)的,只有當(dāng)開始滾動,陰影才會出現(xiàn)。
所以這里,我們借助background-attachment: srcoll和background-attachment: local兩個屬性,在滾動初始的時候,利用兩層背景疊加在一起隱藏陰影背景,真正滾動的時候,將疊加的部分移走,只漏出陰影部分即可。
嗯?什么意思。我們用給滾動容器,加上兩個漸變效果,分別運(yùn)用上background-attachment: srcoll和background-attachment: local,再疊加起來,像是這樣:
<!-- 可滾動容器 -->
<ul>
<li>...</li>
...
<li>...</li>
</ul>
// 情形一:
.g-one {
background: linear-gradient(#fff, #f00);
background-size: 100% 10px;
background-repeat: no-repeat;
background-attachment: local;
}
// 情形二:
.g-two {
background: radial-gradient(at 50% 0, #000, #0f0 70%);
background-size: 100% 10px;
background-repeat: no-repeat;
background-attachment: scroll;
}
// 情形三:
.g-combine {
background:
linear-gradient(#fff, #f00),
radial-gradient(at 50% 0%, #000, #0f0 70%);
background-size: 100% 10px, 100% 10px;
background-repeat: no-repeat;
background-attachment: local, scroll;
}
實(shí)際效果就是這樣,一個背景是隨容器滾動,一個背景是隨容器固定。隨容器滾動的背景充當(dāng)初始的遮罩層:

OK,可以看大,當(dāng)滾動的時候,最后一幅疊加的情況,其實(shí)就是我們需要的滾動的時候展示不同的顏色(陰影)的效果。我們調(diào)整一下兩個漸變的顏色,遮罩層(background-attachment: local)為白色,再把固定不動的陰影層(background-attachment: scroll),利用徑向漸變模擬為我們想要的陰影顏色。
CSS 代碼大概是這樣:
.g-final {
background:
linear-gradient(#fff, transparent 100%),
linear-gradient(rgba(0, 0, 0, .5), transparent 100%);
background-size: 100% 30px, 100% 10px;
background-repeat: no-repeat;
background-attachment: local, scroll;
}
利用linear-gradient(rgba(0, 0, 0, .5), transparent 100%)線性漸變模擬了一層灰色陰影:

OK,大功告成。上述所有 DEMO,可以戳這里看看:
CodePen Demo -- Pure CSS Scroll shadow
如文章開頭所示,這技巧也是可以直接運(yùn)用在table里面:

CodePen Demo -- Pure CSS Table scroll shadow
一些問題層疊順序
當(dāng)然,在上述的過程中,其實(shí)一直有個問題,就是由于是使用背景background模擬的陰影,其實(shí)最終的效果,內(nèi)容是在陰影(背景之上的),但是實(shí)際效果其實(shí)沒有很大的差別,如果能忍受這一點(diǎn),這個方案是完全可用的。
兼容性
嗯,當(dāng)然還有一個問題是就是background-attachment的兼容問題。讓我們看看CAN I USE:

Can i use 下面的注釋表明,大部分兼容問題其實(shí)是出在background-attachment: fixed,對于本文的效果影響不大。
最后
本文技巧非原創(chuàng),第一次看到來自這篇文章:探索CSS屬性*-gradient的實(shí)用價值,對其能否在實(shí)際中運(yùn)用再做了一些探究。
到此這篇關(guān)于使用純 CSS 實(shí)現(xiàn)滾動陰影效果的文章就介紹到這了,更多相關(guān)CSS 實(shí)現(xiàn)滾動陰影內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
- 這篇文章主要介紹了純css3實(shí)現(xiàn)橫向無限滾動的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)2020-11-06
這篇文章主要介紹了CSS3制作圓形滾動進(jìn)度條動畫的示例,幫助大家制作CSS3特效,美化自身網(wǎng)頁,感興趣的朋友可以了解下2020-11-05
css實(shí)現(xiàn)隱藏滾動條并可以滾動內(nèi)容的實(shí)例代碼
這篇文章主要介紹了css實(shí)現(xiàn)隱藏滾動條并可以滾動內(nèi)容的實(shí)例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-03
CSS3實(shí)現(xiàn)3D小球滾動撞擊遮擋板特效源碼
3D小球滾動撞擊遮擋板特效是一款基于css3繪制的3D立體的遮擋板,小球撞擊來回滾動特效,感興趣的朋友快來下載體驗(yàn)吧2020-09-21- 這篇文章主要介紹了Css3實(shí)現(xiàn)無縫滾動防抖的方法,幫助大家解決圖片抖動,感興趣的朋友可以了解下2020-09-14
- 這篇文章主要介紹了css文字陰影漸漸模糊效果的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-07

css3懸停按鈕-CSS3鼠標(biāo)懸停按鈕陰影縮放特效代碼
CSS3鼠標(biāo)懸停按鈕陰影縮放特效代碼是一款紅色簡潔的方形按鈕,鼠標(biāo)懸停按鈕突出放大陰影效果,非常漂亮。2020-11-18




