首頁 >web前端 >css教學 >CSS實現滾動陰影效果的小技巧(分享)

CSS實現滾動陰影效果的小技巧(分享)

青灯夜游
青灯夜游轉載
2021-02-22 10:02:282916瀏覽

本篇文章為大家介紹一下使用純CSS實現滾動陰影效果的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

CSS實現滾動陰影效果的小技巧(分享)

【推薦教學:CSS影片教學

開門見山,有這樣一個非常常見的情況,對於一些可捲動的元素而言。通常在滾動的時候會為垂直於滾動的一側添加一個陰影,用於表明當前有元素被滾動給該滾出了可視區域,類似這樣:

可以看到,在捲動的過程中,會出現一條陰影:

#對於兩邊的列在在滾動的過程中,靜止不動,吸附在邊界的問題,通常CSS 使用 position: sticky 即可解決。

但是對於滾動過程中才出現的陰影(滾動容器內的內容沒有貼邊,則陰影出現,貼邊,則陰影消失),之前的做法一直都是需要借助JS 完成的。

那麼,有沒有純 CSS 能夠實現的方案呢?嘿嘿嘿,有。有一種非常討巧的障眼法,下面就讓我們來一步一步揭開它的面紗。

神奇的 background-attachment

要使用純CSS 實作上述捲動陰影,最核心的要使用到的元素就是 background-attachment

在較早的一篇文章裡-- CSS 實現視差效果,詳細了介紹了 background-attachment,借助了 background-attachment: fixed 可以簡單的實作網站的滾動視差或是類似圖片點擊的水紋效果,類似這樣:

##當然,今天我們的主角不是 background-attachment: fixed,而是 background-attachment: srcoll

background-attachment: srcoll

首先,介紹 background- attachment,如果指定了 background-image ,那麼 background-attachment 決定背景是在視窗中固定的還是隨著包含它的區塊滾動的。

簡單而言,就是決定了在可捲動的容器中,背景圖案是如何進行運動的。透過兩個簡單的 Demo,弄清楚 background-attachment: srcoll 和 background-attachment: local

background-attachment: local,這個就是和我們日常使用中的用法是一致的,可滾動容器的背景圖案隨著容器進行滾動:

background-attachment: scroll,這個是今天的主角,它顯示背景相對於元素本身固定, 而不是隨著它的內容滾動:

如果你還沒弄清楚他們的區別,可以戳下面的DEMO 自己感受一下:

Demo網址:https://codepen.io/Chokcoco/pen/xJJorg#

srcoll 與 local 同時使用,實作障眼法

到這裡,可能很多同學還是懵的,我們到底要做什麼呢?這個和本文的滾動陰影有什麼關聯呢?

別急,滾動陰影的困難在於,初始沒有滾動的時候是沒有陰影展現的,只有當開始滾動,陰影才會出現。

所以這裡,我們藉助 background-attachment: srcoll 和 background-attachment: local 兩個屬性,在滾動初始的時候,利用兩層背景疊在一起隱藏陰影背景,真正滾動的時候,將疊加的部分移走,只漏出陰影部分即可。

嗯?什麼意思。我們用給滾動容器,加上兩個漸變效果,分別運用上 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;
}

實際效果就是這樣,一個背景是隨容器滾動,一個背景是隨容器固定。隨容器滾動的背景充當初始的遮罩層:

#OK,可以看大,當滾動的時候,最後一幅疊加的情況,其實就是我們需要的滾動的時候展示不同的顏色(陰影)的效果。我們調整兩個漸層的顏色,遮罩層(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,可以戳這裡看看:

Demo位址:https://codepen.io/Chokcoco/pen/QWKmjKd

#如文章開頭所示,這技巧也是可以直接運用在 table 裡面:

##Demo位址:https://codepen.io/Chokcoco/pen/abmqMJQ

一些問題

層疊順序

當然,在上述的過程中,其實一直有個問題,就是由於是使用背景 background 模擬的陰影,其實最終的效果,內容是在陰影(背景之上的),但是實際效果其實沒有很大的差別,如果能忍受這一點,這個方案是完全可用的。

相容性

#嗯,當然還有一個問題是 background-attachment的兼容問題。讓我們來看看 CAN I USE:

#Can i use 下面的註解表明,大部分相容問題其實是出在 background- attachment: fixed,對於本文的效果影響不大。

最後

本文技巧非原創,第一次看到來自這篇文章:探索CSS屬性* -gradient的實用價值 ,對其能否在實際中運用再做了一些探究。

好了,本文到此結束。

更多程式相關知識,請造訪:程式設計教學! !

以上是CSS實現滾動陰影效果的小技巧(分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除