您现在的位置是:网站首页> 编程资料编程资料
使用纯 CSS 实现滚动阴影效果纯css3实现横向无限滚动的示例代码CSS3制作圆形滚动进度条动画的示例css实现隐藏滚动条并可以滚动内容的实例代码CSS3实现3D小球滚动撞击遮挡板特效源码Css3实现无缝滚动防抖css文字阴影渐渐模糊效果的实现css3悬停按钮-CSS3鼠标悬停按钮阴影缩放特效代码
2021-09-03
1199人已围观
简介 这篇文章主要介绍了使用纯 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 自己感受一下:
CodePen Demo -- bg-attachment Demo
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; }实际效果就是这样,一个背景是随容器滚动,一个背景是随容器固定。随容器滚动的背景充当初始的遮罩层:

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,可以戳这里看看:
CodePen Demo -- Pure CSS Scroll shadow
如文章开头所示,这技巧也是可以直接运用在table里面:

CodePen Demo -- Pure CSS Table scroll shadow
一些问题层叠顺序
当然,在上述的过程中,其实一直有个问题,就是由于是使用背景background模拟的阴影,其实最终的效果,内容是在阴影(背景之上的),但是实际效果其实没有很大的差别,如果能忍受这一点,这个方案是完全可用的。
兼容性
嗯,当然还有一个问题是就是background-attachment的兼容问题。让我们看看CAN I USE:

Can i use 下面的注释表明,大部分兼容问题其实是出在background-attachment: fixed,对于本文的效果影响不大。
最后
本文技巧非原创,第一次看到来自这篇文章:探索CSS属性*-gradient的实用价值,对其能否在实际中运用再做了一些探究。
到此这篇关于使用纯 CSS 实现滚动阴影效果的文章就介绍到这了,更多相关CSS 实现滚动阴影内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- 探索CSS属性*-gradient的实用价值CSS Transition通过改变Height实现展开收起元素从QQtabBar看css命名规范BEM的详细介绍css实现两栏布局,左侧固定宽,右侧自适应的多种方法CSS 实现Chrome标签栏的技巧CSS实现两列布局的N种方法CSS实现隐藏搜索框功能(动画正反向序列)CSS3中Animation实现简单的手指点击动画的示例详解CSS中的特指度和层叠问题详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)关于CSS浮动与取消浮动的问题
- 使用CSS3制作版头动画效果CSS实现漂亮的时钟动画效果的实例代码css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果CSS 奇思妙想边框动画效果的实现CSS 动态高度过渡动画效果的实现CSS3分享图标按钮动画特效代码CSS3通过var()和calc()函数实现动画特效
- CSS3实现红包抖动效果css3 transform过渡抖动问题解决css3动画效果抖动解决方法CSS 控制Html页面高度导致抖动问题的原因CSS3新浪微博模板商店鼠标悬停图片抖动特效css3让div随鼠标移动而抖动起来CSS 控制因Html页面高度导致抖动的问题解决方法
- css 利用 position + margin 实现固定盒子横向纵向居中的方法CSS 同级元素position:fixed和margin-top共同使用的问题使用CSS实现盒子水平垂直居中的方法(8种)CSS盒子居中的常用的几种方法(小结)
- html5+css3之制作header实例与更新html5+css3之CSS中的布局与Header的实现css为什么要放在head标签中
- CSS3中animation实现流光按钮效果CSS3动画之利用requestAnimationFrame触发重新播放功能
- html5+CSS3的编码规范html5+CSS3的编码规范前端编码规范(4)—— CSS 和 Sass (SCSS) 开发规范Web前端开发规范2017(HTML/JavaScript/CSS)web前端开发规范文档(2014年版本)响应式Web之流式网格系统 在网页标题栏上和收藏夹显示网站logo的实现方法Visual Foxpro 6.0 中文版安装向导(图解)网站日志200 0 64状态码的分析(协议子状态)W3C是什么意思 W3C标准简介有关网站网页设计中的那些事儿分享
- CSS 鼠标悬浮在图片上添加遮罩层效果的实现使用CSS content的attr实现鼠标悬浮提示(tooltip)效果CSS实现鼠标悬浮无限向下级展示的实例代码CSS鼠标悬浮DIV后显示DIV外的按钮解决方法CSS3制作了一个动画导航效果(鼠标悬浮会放大)css实现缕空遮罩层的示例代码css3遮罩层镂空效果的多种实现方法CSS实现带遮罩层可关闭的弹窗效果CSS实现鼠标移至图片上显示遮罩层效果
- 浅谈原生页面兼容IE9问题的解决方案一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10CSS背景色渐变写法兼容ie6至ie9借助HTML分别禁用IE8, IE9的兼容视图模式的小技巧css div实现的遮罩层完美兼容IE6-IE9 FireFox
- css3中flex布局宽度不生效的解决css3弹性盒子flex实现三栏布局的实现使用flex布局轻松实现页面布局的示例代码flex是什么及flex布局语法教程详解使用Flex布局实现头部固定内容区域滚动的方法详解flex布局下图片变形的解决方法Flex布局让子项保持自身高度的实现css3 flex布局实现平均分配元素的示例代码flex布局实现上下固定中间滑动的布局方式CSS3新增布局之: flex详解flex布局实现每行固定数量+自适应布局
