失踪的人回来了,终于想起来我还有公众号。 新的一年,我给自己立了一个Flag,坚持更新。 原创,基于CSScss底部阴影,不要错过。
开门见山,对于一些可滚动的元素来说,存在这样一种非常常见的情况。 通常,滚动时,会在垂直于滚动条的左侧添加一个阴影,以指示当前有元素正在滚动,从而使滚动条的可见区域更厚,如下所示:
可以看到,在滚动过程中,会出现阴影:
对于滚动过程中外栏静止并吸附到边框的问题,CSS通常可以使用position:sticky来解决。
但对于只在滚动过程中出现的阴影(滚动容器中的内容没有对齐就会出现阴影,内容对齐阴影就会消失),前面的方法仍然需要使用JS来完成。
那么,有没有一种可以用纯CSS实现的解决方案呢? 呵呵呵呵,是的。 有一个特别适合场合的技巧css底部阴影,下面让我们一步步揭晓。
神奇的背景附件
要使用纯CSS来实现上面的滚动阴影,要用到的核心元素是background-attachment。
在之前的一篇文章《CSS实现视差效果》中,详细介绍了background-attachment。 借助background-attachment:fixed,很容易实现网站的滚动视差或者类似图片点击的水印效果,类似这样:
当然,我们今天的主角不是background-attachment:fixed,而是background-attachment:srcoll。
背景附件:srcoll
首先,介绍背景附件。 如果指定了background-image,则background-attachment确定背景是固定在图层中还是随包含它的块一起滚动。
简单来说,它决定了背景图案在可滚动容器中如何移动。 通过两个简单的demo,了解background-attachment: srcoll和background-attachment: local。
background-attachment:本地,这个和我们日常使用一致,可滚动容器的背景图案随容器滚动:
background-attachment: 滚动,这是明天的主角,它表明背景相对于元素本身是固定的,而不是随其内容一起滚动:
如果你还没有弄清楚它们之间的区别,可以戳下面的DEMO自己体验一下:
CodePen 演示 -- bg-attachment 演示
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% 50px, 100% 10px;
background-repeat: no-repeat;
background-attachment: local, scroll;
}
使用 Linear-gradient(rgba(0, 0, 0, .5), 透明 100%) 线性渐变模拟黑色阴影:
好的,你完成了。 对于以上所有demo,您可以点击这里查看:
CodePen 演示 -- 纯 CSS 滚动阴影
如文章开头所示,该方法也可以直接在表格中使用:
CodePen 演示 -- 纯 CSS 表格滚动阴影
一些问题级联顺序
当然,上面的过程中,还有一个问题,就是因为使用了背景模拟的阴影,所以最终的疗效实际上是在阴影中(背景之上),但实际的疗效是差别不大。 如果您能接受这一点,那么这个解决方案就完全可用。
兼容性
当然还有一个问题就是后台附件的兼容性。 让我们看看我可以使用:
我可以使用下面的评论表明大多数兼容性问题似乎是由background-attachment:fixed引起的,这对本文的功效影响不大。
终于
本文方法非原创。 第一次听说是从这篇文章:探索CSS属性*-gradient的实用价值,并对其实际应用做了一些研究。
好了,本文就到此结束了。
更多精彩CSS技术文章汇总在我的Github——iCSS中,持续更新。 欢迎点击星星订阅合集。
如果还有疑问或者建议,可以多沟通。 原创文章写作水平有限,知识匮乏。 如果文章中有任何不准确的地方,请告诉我。
参考
[1]
CSS实现视差效果:
[2]
CodePen 演示 -- bg-attachment 演示:
[3]
CodePen 演示 -- 纯 CSS 滚动阴影:
[4]
CodePen 演示 -- 纯 CSS 表格滚动阴影:
[5]
我可以用吗:
[6]
探索CSS属性*-gradient的实用价值:
[7]
Github——iCSS:
交流讨论
欢迎关注公众号“前端试用”。 公众号通常会分享一些有用或有趣的东西,发现代码之美。 注重深度和最佳实践,希望打造一个高品质的公众号。
公众号后台回复“小莲”,加我为陌陌,我带你飞。
如果你觉得这篇文章还不错,就来【分享、点赞、观看】三遍,让更多人听到吧~