前言

「吸附效果」就是网页滚到到某个位置,元素固定在该位置,后续不随网页滚动而滚动。吸附效果很常见,譬如吸顶效果吸底效果,经常用在跟随导航移动广告悬浮提示等场景中。

原理

jQuery时代就有很多吸附效果插件了,现在常用的三大前端框架也有自身第三方的吸附效果组件。它们都有着共通的实现原理:监听scroll事件,判断scrollTop目标元素的位置范围,符合条件则将目标元素position声明为fixed,令目标元素相对于浏览器窗口进行定位,让用户看上去就像钉在浏览器指定位置上。

JS实现吸附效果的代码在网上一搜一大堆,更何况笔者喜欢耍CSS,在此就不贴相关的JS代码了。本文为各位同学推荐一个很少见很少用的CSS属性:position:sticky。简单的「两行CSS核心代码」就能完成「十多行JS核心代码」的功能,何乐而不为呢。

实现

简单回顾position常用的值,怎样用就不说了,各位同学应该都熟透了。

取值 功能 版本
「inherit」 继承 2
「static」 标准流 2
「relative」 相对定位 2
「absolute」 绝对定位 2
「fixed」 固定定位 2
「sticky」 粘性定位 3

当值为sticky时将元素变成粘性定位「粘性定位」相对定位固定定位的合体,元素在特定阈值跨越前为相对定位,跨越后为固定定位。

主要是为了推广知识点,直接上代码,样式就不细磨了,将就看吧。

<div class="ads-position"><ul><li>Top 1</li><li>Top 2</li><li>Normal</li><li>Bottom 1</li><li>Bottom 2</li></ul>
</div>
.ads-position {overflow: auto;position: relative;width: 400px;height: 280px;outline: 1px solid #3c9;ul {padding: 200px 0;}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:stickytop/bottom:npx。上述Demo里5个节点都声明了position:sticky,但由于top/bottom赋值有所不同就产生了不同的吸附效果。

在线预览

细心的同学可能发现这些元素在某些滚动时刻处于相对定位,在特定滚动时刻就处于固定定位

  • 第1个<li>top0px,滚动到容器顶部就固定

  • 第2个<li>top40px,滚动到距离容器顶部40px就固定

  • 第3个<li>:没有声明top/bottom,就一直保持相对定位

  • 第4个<li>bottom40px,滚动到距离容器底部40px就固定

  • 第5个<li>bottom0px,滚动到容器底部就固定

当然,换成leftright也一样能实现横向的吸附效果

可点击「阅读原文」查看本文的源码与效果。

注意

粘性定位的参照物并不一定是position:fixed

目标元素的任意祖先元素都未声明position:relative|absolute|fixed|sticky,才与position:fixed表现一致。

当离目标元素最近的祖先元素声明了position:relative|absolute|fixed|sticky目标元素就相对该祖先元素进行粘性定位

确认参照物跟position:absolute一致。

兼容

兼容性勉强还行,近2年发版的浏览器都能支持,SafariFirefox的兼容性还是挺赞的。有吸附效果需求的同学建议一试,要兼容IExplorer就算了。

兼容性

结语

转发文章并关注公众号:前端开发博客,回复 1024,领取前端进阶资料

  1. 回复「电子书」领取27本精选电子书

  2. 回复「加群」加入前端大神交流群,一起学习进步

  3. 回复「面试」获取 面试 精选文章

分享和在看就是最大的支持❤️

纯CSS实现吸附效果相关推荐

  1. 纯 CSS 实现波浪效果!

    一直以来,使用纯 CSS 实现波浪效果都是十分困难的. 因为实现波浪的曲线需要借助贝塞尔曲线. 而使用纯 CSS 的方式,实现贝塞尔曲线,额,暂时是没有很好的方法. 当然,借助其他力量(SVG.CAN ...

  2. 制作css开关,纯css实现开关效果

    大家好,我又来了,这次给大家表演使用纯css实现开关效果 首先是构思 我们使用标签来实现这个效果. checkbox的选中.未选中的特性,刚好对应开关的打开.关闭 on:打开 off:关闭 未选中,则 ...

  3. html实现开关,使用纯css实现开关效果

    首先是构思 我们使用标签来实现这个效果. checkbox的选中.未选中的特性,刚好对应开关的打开.关闭 on:打开 off:关闭 未选中,则关闭开关 选中,则打开开关 开始画出off.on状态的草图 ...

  4. 如何用纯 CSS 实现优惠券效果

    ​ 背景 本文来自CODE.FUN  ,讲述如何用纯 CSS 实现优惠券效果的实践案例,分享给大家. 优惠券视觉效果 上面是优惠券的视觉效果,本文分享如何使用纯 CSS 实现它的主要框架,希望对大家有 ...

  5. 纯CSS实现弹幕效果

    纯CSS实现弹幕效果 动画相关的属性和方法已经本部分的开头简单提过了,我们来看一下本次要实现的效果--弹幕- 当你在阅读.看视频的时候经常会遇见一段文件或者一张表情从页面划过,要实现一个完整的功能很复 ...

  6. Php开源h5相册系统,HTML5 CSS3专题 纯CSS打造相册效果的示例代码详解

    HTML5 CSS3专题 纯CSS打造相册效果的示例代码详解: 今天偶然发现电脑里面还有这样的一个例子,感觉效果还不错,不记得啥时候下载的了,也好久没上w3cfuns了,怀念学习前台的日子,给大家分享 ...

  7. css中间镂空,怎么用纯CSS实现镂空效果

    怎么用纯CSS实现镂空效果 发布时间:2021-03-19 09:49:16 来源:亿速云 阅读:99 作者:小新 小编给大家分享一下怎么用纯CSS实现镂空效果,希望大家阅读完这篇文章之后都有所收获, ...

  8. 纯css实现信封效果

    纯css实现信封效果 <body><div id="dialog"><div id="envelope"><div i ...

  9. HTML中 css红绿黄灯,纯CSS实现红绿灯效果(面试常见)

    先看题,别看答案试下吧 ~_~ 1.下面的代码输出的内容是什么? function O(name){ this.name=name||'world'; } O.prototype.hello=func ...

最新文章

  1. bff v2ex_语音备忘录的BFF-如何通过Machine Learning简化Speech2Text
  2. 深度学习七个实用技巧
  3. access 合并多行字符串_第20p,什么是字符串?Python中的str
  4. 测试:VS2010的Coded UI Test参考内容列表
  5. 软件测试中的α测试、β测试和λ测试
  6. Maven 强制导入jar包
  7. python爬虫播放mp3
  8. php中ci框架分页,Codeigniter(CI)框架分页函数及相关知识
  9. Java 进阶基础知识
  10. 【NLTK基础】一文轻松使用NLTK进行NLP任务(附视频)
  11. 编译OpenJDK12:可以用VS2010到VS2017
  12. Nikto漏洞扫描工具简介
  13. 使用yolov5训练PASCAL VOC2012数据集以及遇到的坑
  14. 棋牌游戏-c#实现批量修改文件后缀
  15. Storm启动报错Internal Server Error
  16. JavaScript生成PDF
  17. Python 小技之繁花盛开
  18. 图像属性——老照片特效
  19. 类C语言--栈与队列习题:回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)
  20. 目标检测经典论文——R-CNN论文翻译:Rich feature hierarchies for accurate object detection and semantic segmentation

热门文章

  1. XDC IO --- Output Delay Constraints(Vivado)
  2. 一个屌丝程序员的青春(三四六)
  3. 开发软件需要学习什么?
  4. 开发者出海跨境收款——如何完美解决限额问题?
  5. 设计一个程序,程序中有三个类,Triangle,Lader,Circle。
  6. 简历项目描述过程详解
  7. 计算机检测维修与数据恢复招标,计算机检测维修与数据恢复实训室企业招标文件.doc...
  8. 百度地图API 学习网站
  9. 政府补贴政策这么多,ITSS信息技术服务标准到底是什么?
  10. 美国姑娘项美丽与邵洵美的跨国恋