CSS实现滚动阴影效果的小技巧(分享)

本篇文章给大家介绍一下使用纯css实现滚动阴影效果的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

CSS实现滚动阴影效果的小技巧(分享)

【推荐教程:CSS视频教程 】

开门见山,有这样一种非常常见的情况,对于一些可滚动的元素而言。通常在滚动的时候会给垂直于滚动的一侧添加一个阴影,用于表明当前有元素被滚动给该滚出了可视区域,类似这样:

CSS实现滚动阴影效果的小技巧(分享)

立即学习“前端免费学习笔记(深入)”;

可以看到,在滚动的过程中,会出现一条阴影:

CSS实现滚动阴影效果的小技巧(分享)

对于两侧的列在滚动的过程中,静止不动,吸附在边界的问题,通常 CSS 使用 position: sticky 即可解决。

但是对于滚动过程中才出现的阴影(滚动容器内的内容没有贴边,则阴影出现,贴边,则阴影消失),之前的做法一直都是需要借助 JS 完成的。

那么,有没有纯 CSS 能够实现的方案呢?嘿嘿嘿,有。有一种非常讨巧的障眼法,下面就让我们来一步一步揭开它的面纱。

神奇的 background-attachment

要使用纯 CSS 实现上述滚动阴影,最核心的要使用到的元素就是 background-attachment

在较早的一篇文章里 — CSS 实现视差效果,详细了介绍了 background-attachment,借助了 background-attachment: fixed 可以简单的实现网站的滚动视差或者是类似图片点击的水纹效果,类似这样:

CSS实现滚动阴影效果的小技巧(分享)

当然,今天我们的主角不是 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,这个就是和我们日常使用中的用法是一致的,可滚动容器的背景图案随着容器进行滚动:

CSS实现滚动阴影效果的小技巧(分享)

background-attachment: scroll,这个是今天的主角,它表明背景相对于元素本身固定, 而不是随着它的内容滚动:

CSS实现滚动阴影效果的小技巧(分享)

如果你还没弄明白他们的区别,可以戳下面的 DEMO 自己感受一下:

Demo地址:https://codepen.io/Chokcoco/pen/xJJorg

srcoll 与 local 同时使用,实现障眼法

到这里,可能很多同学还是懵的,我们到底要做什么呢?这个和本文的滚动阴影有什么关联呢?

别急,滚动阴影的难点在于,初始没有滚动的时候是没有阴影展现的,只有当开始滚动,阴影才会出现。

所以这里,我们借助 background-attachment: srcoll 和 background-attachment: local 两个属性,在滚动初始的时候,利用两层背景叠加在一起隐藏阴影背景,真正滚动的时候,将叠加的部分移走,只漏出阴影部分即可。

嗯?什么意思。我们用给滚动容器,加上两个渐变效果,分别运用上 background-attachment: srcoll 和 background-attachment: local,再叠加起来,像是这样:

  • ...
  • ...
  • ...
// 情形一:.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;}

实际效果就是这样,一个背景是随容器滚动,一个背景是随容器固定。随容器滚动的背景充当初始的遮罩层:

CSS实现滚动阴影效果的小技巧(分享)

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%) 线性渐变模拟了一层灰色阴影:

CSS实现滚动阴影效果的小技巧(分享)

OK,大功告成。上述所有 DEMO,可以戳这里看看:

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

如文章开头所示,这技巧也是可以直接运用在 table 里面:

CSS实现滚动阴影效果的小技巧(分享)

Demo地址:https://codepen.io/Chokcoco/pen/abmqMJQ

一些问题

层叠顺序

当然,在上述的过程中,其实一直有个问题,就是由于是使用背景 background 模拟的阴影,其实最终的效果,内容是在阴影(背景之上的),但是实际效果其实没有很大的差别,如果能忍受这一点,这个方案是完全可用的。

兼容性

嗯,当然还有一个问题是就是 background-attachment 的兼容问题。让我们看看 CAN I USE:

CSS实现滚动阴影效果的小技巧(分享)

Can i use 下面的注释表明,大部分兼容问题其实是出在 background-attachment: fixed,对于本文的效果影响不大。

最后

本文技巧非原创,第一次看到来自这篇文章:探索CSS属性*-gradient的实用价值 ,对其能否在实际中运用再做了一些探究。

好了,本文到此结束。

更多编程相关知识,请访问:编程教学!!

以上就是CSS实现滚动阴影效果的小技巧(分享)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1617831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 06:01:01
下一篇 2025年12月24日 06:01:18

相关推荐

  • 看看CSS中的那些背景图片函数!

    本篇文章带大家了解一下css中的背景图片函数:url()、image()、image-set()、cross-fade()、element()。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 【推荐教程:CSS视频教程 】 url() url函数表示对某个资源的引用,可传入链接以及…

    2025年12月24日 好文分享
    000
  • css中如何改变字体大小

    在css中,可以使用font-size属性来改变字体大小,该属性可以设置字体大小,语法格式为“font-size:值;”。实际上font-size属性设置的是字体中字符框的高度,实际的字符字形可能比这些框高或矮(通常会矮)。 本教程操作环境:windows7系统、HTML5&&CSS…

    2025年12月24日
    000
  • CSS外部样式表有两种引用方法,分别是什么

    方法:1、在style标签中通过“@import”引用,语法“@import url(URL)”;2、通过link标签引用,语法“”。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 CSS外部样式表 如果 CSS 样式被放置在网页文档外部的文件…

    2025年12月24日
    000
  • 用css实现div里面的文字靠右

    在css中,可以通过给div元素添加“text-align: right;”样式来让div里面的文字靠右。text-align属性可以设置元素中的文本的水平对齐方式,当属性值设置为“right”时可以把文本排列到右边。 本教程操作环境:windows7系统、CSS3&&HTML5版、…

    2025年12月24日
    000
  • css中能加减乘除吗

    css中能加减乘除。在css中可以使用calc()函数来进行“加减乘除”四则运算,它允许使用“+”、“-”、“*”、“/”这四种运算符,可以混合使用%、px、em、rem等单位进行计算。 本教程操作环境:windows7系统、CSS3版、Dell G3电脑。 css中能加减乘除。 数学表达式calc…

    2025年12月24日
    000
  • ie9不能读取外部css样式怎么办

    ie9不能读取外部css样式的解决办法:1、确保所写的相对路径是可以直接访问到要引用的css文件;2、确保css的编码是utf-8,内部打开无乱码;3、把css全复制到页面中即可。 本文操作环境:windows7系统、HTML5&&CSS3版,DELL G3电脑。 ie9不能读取外部…

    2025年12月24日
    000
  • 外部调用css不显示怎么办

    外部调用css不显示的解决办法:首先打开chrome的F12调试器进行查看;然后用sublime编辑器修改本地css文件编码格式为“utf-16LE”;最后重新编写css代码即可。 本文操作环境:windows7系统、Sublime Text3&&css3版,DELL G3电脑。 外…

    2025年12月24日 好文分享
    000
  • 详解css z-index的权重问题

    本篇文章给大家分享一下css的z-index权重问题。到底怎么样才能让我们想要排在上面的元素能在上面,想在下面的元素就老老实实的在下面。 一、一起看下面实战中z-index的几种情况: 一个定义了定位,一个没定义定位,谁在上面? 一个父级盒子定位,一个不定位,不定位的子级设置定位,谁在上面? 一个父…

    2025年12月24日 好文分享
    000
  • CSS Modules是啥子东西?一起来了解一下!

    今年四月份的时候面试了一家公司, 技术面的时候被人家问到了CSS Module有了解过么,我说没有了解过, 他就继续问到,那你在平时开发的时候给组件和元素起类名要怎么办呢? 我说给元素和组件加指定前缀,这样就能够保证自己写的类名和其他同事写的类名不会起冲突。 然后就没然后了,,后续又问了我很多Rea…

    2025年12月24日
    000
  • CSS中如何使用@规则?用法介绍

    【推荐教程:css视频教程 】 at-rule是一个声明,为CSS提供执行或怎么表现的指令。每个声明以@开头,后紧跟一个可用的关键字,这个关键字充当一个标识符,用于表示CSS该做什么。这是一个通用的语法,尽管每个at-rule有其它语法变体。 常规规则 常规规则遵循下面的语法: 代码如下: 立即学习…

    2025年12月24日
    000
  • 怎么让CSS文件里图片居中

    让CSS文件里图片居中的方法:首先创建一个HTML示例文件;然后引入一张背景图片;最后通过css中的“background-position”属性实现图片居中即可。 本文操作环境:windows7系统、HTML5&&CSS3版,DELL G3电脑。 CSS让背景图片居中的方法 其实很…

    2025年12月24日
    000
  • css 怎么去掉按钮样式

    css去掉按钮样式的方法:首先打开查看按钮样式的css代码;然后通过“border: none;outline: none;”属性去除边框以及消除默认点击蓝色边框效果即可。 本文操作环境:windows7系统、css3版,DELL G3电脑。 浏览器为我们提供的按钮样式,只能说是够用,它不够美观,在…

    2025年12月24日 好文分享
    000
  • css复合样式怎么做

    css复合样式的写法是通过空格的方式实现的;复合写法有的是不需要关心顺序,例如“background、border”;有的是需要关心顺序,例如“font”。 本文操作环境:windows7系统、css3版,DELL G3电脑。 CSS复合样式 一个CSS属性只控制一种样式,叫做单一样式。 一个CSS…

    2025年12月24日
    000
  • css里的rgb怎么用

    css里rgb的使用方法:首先创建一个HTML代码示例文件;然后通过rgb语法“rgb(red, green, blue)”来生成各式各样的颜色即可。 本文操作环境:windows7系统、HTML5&&CSS3版,DELL G3电脑。 rgb是什么意思? RGB:一种色彩模式 ,是工…

    2025年12月24日 好文分享
    000
  • css选择器怎么选取第几个元素

    css选择器选取第几个元素的方法:1、使用“first-child”选择器选取属于其父元素的首个子元素;2、使用“last-child”选择列表中的最后一个标签;3、使用“nth-child(3)”选择第3个标签等等。 本文操作环境:windows7系统、HTML5&&CSS3版本、…

    2025年12月24日
    000
  • css 不规则边框怎么设置

    css不规则边框的设置方法:首先创建一个HTML示例文件;然后通过“border-image: url(border.png) 30 stretch;”属性设置不规则边框即可。 本文操作环境:windows7系统、HTML5&&CSS3版本、Dell G3电脑。 css如何设置不规则…

    2025年12月24日
    000
  • 如何复制网页css

    复制网页css的方法:首先找到想要复制的网站;然后按f12或者右击“检查”;接着查看查询层,并找到css样式表;最后全选样式表复制,并将css样式复制到新建的css文件中即可。 本文操作环境:windows7系统、HTML5&&CSS3版本、Dell G3电脑。 做网站的人想复制网站…

    2025年12月24日 好文分享
    000
  • css中什么是内联元素

    css中的内联元素也称为行内元素;内联元素包括布局中常用的标签如a、span、em、b、strong、i等;内联元素和它的兄弟元素之间一个挨着一个,并且都在同一行按从左至右的顺序显示,不单独占一行。 本文操作环境:windows7系统、css3版本、Dell G3电脑。 1、什么是内联元素? 内联元…

    2025年12月24日
    000
  • css如何让字体下沉

    css让字体下沉的方法:首先创建一个HTML示例文件;然后使用伪元素“::first-letter”选中一段文本的首字;接着使用“font-size”属性设置首字大小;最后通过float属性实现下沉效果即可。 本文操作环境:windows7系统、HTML5&&CSS3版本、Dell …

    2025年12月24日
    000
  • css设置表格某一行固定不动

    css设置表格某一行固定不动的方法:1、使用css定位th,并根据父级滚动条scrolltop的偏移量获取值,然后用js把偏移量赋值到th的定位top上;2、使用jq插件设置表格某一行固定不动。 本文操作环境:windows7系统、HTML5&&CSS3版本、Dell G3电脑。 c…

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信