CSS怎么实现吸附效果
这篇文章主要讲解了“CSS怎么实现吸附效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS怎么实现吸附效果”吧!
原理在 jQuery 时代就有很多吸附效果插件了,现在常用的三大前端框架也有自身第三方的吸附效果组件。它们都有着共通的实现原理:监听scroll
事件,判断scrollTop
和目标元素
的位置范围,符合条件则将目标元素
的position
声明为fixed
,令目标元素
相对于浏览器窗口进行定位,让用户看上去就像钉在浏览器指定位置上。
javascript 实现吸附效果的代码在网上一搜一大堆,更何况笔者喜欢耍 CSS ,在此就不贴相关的JS代码
了。本文为各位同学推荐一个很少见很少用的 CSS 属性:position:sticky
。简单的「两行CSS核心代码」就能完成「十多行JS核心代码」的功能,何乐而不为呢。
简单回顾position
常用的值,怎样用就不说了,各位同学应该都熟透了。
继承
2「static」标准流
2「relative」相对定位
2「absolute」绝对定位
2「fixed」固定定位
2「sticky」粘性定位
3当值为sticky
时将元素变成粘性定位
。「粘性定位」是相对定位
和固定定位
的合体,元素在特定阈值
跨越前为相对定位,跨越后为固定定位。
主要是为了推广知识点,直接上代码,样式就不细磨了,将就看吧。
<divclass="ads-position"><ul><li>Top1</li><li>Top2</li><li>Normal</li><li>Bottom1</li><li>Bottom2</li></ul></div>
.ads-position{overflow:auto;position:relative;width:400px;height:280px;outline:1pxsolid#3c9;ul{padding:200px0;}li{position:sticky;height:40px;line-height:40px;text-align:center;color:#fff;&:nth-child(1){top:0;z-index:9;background-color:#f66;}&:nth-child(2){top:40px;z-index:9;background-color:#66f;}&:nth-child(3){background-color:#f90;}&:nth-child(4){bottom:0;z-index:9;background-color:#09f;}&:nth-child(5){bottom:40px;z-index:9;background-color:#3c9;}}}
最终效果如下。两行CSS核心代码分别是position:sticky
和top/bottom:npx
。上述Demo里5个节点都声明了position:sticky
,但由于top/bottom
赋值有所不同就产生了不同的吸附效果。
细心的同学可能发现这些元素在某些滚动时刻处于相对定位,在特定滚动时刻就处于固定定位
。
第1个<li>
:top
为0px
,滚动到容器顶部
就固定
第2个<li>
:top
为40px
,滚动到距离容器顶部40px
就固定
第3个<li>
:没有声明top/bottom
,就一直保持相对定位
第4个<li>
:bottom
为40px
,滚动到距离容器底部40px
就固定
第5个<li>
:bottom
为0px
,滚动到容器底部
就固定
当然,换成left
和right
也一样能实现横向的吸附效果
。
粘性定位
的参照物并不一定是position:fixed
。
当目标元素
的任意祖先元素
都未声明position:relative|absolute|fixed|sticky
,才与position:fixed
表现一致。
当离目标元素
最近的祖先元素
声明了position:relative|absolute|fixed|sticky
,目标元素
就相对该祖先元素
进行粘性定位
。
确认参照物跟position:absolute
一致。
兼容性勉强还行,近2年发版的浏览器都能支持,Safari
和Firefox
的兼容性还是挺赞的。有吸附效果
需求的同学建议一试,要兼容IExplorer
就算了。
感谢各位的阅读,以上就是“CSS怎么实现吸附效果”的内容了,经过本文的学习后,相信大家对CSS怎么实现吸附效果这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。