position:sticky 粘性定位

article/2025/9/22 18:43:43

1、什么是粘性定位?

粘性定位它基于用户的滚动位置来定位。

粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。

它的行为就像 position:relative; 而当页面滚动超出目标区域时,它的表现就像 position:fixed;,它会固定在目标位置。

注意: Internet Explorer, Edge 15 及更早 IE 版本不支持 sticky 定位。 Safari 需要使用 -webkit- prefix 

 例如:

div.sticky {position: -webkit-sticky; /* Safari */position: sticky;top: 10px;
}

设置了以上元素,在屏幕范围(viewport)视口滚动到元素top距离小于10px之前,div为相对定位。之后元素将固定在与顶部距离10px的位置,直到viewport视口回滚到10px以内。

特点:

  • 元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。
  • 这个特定阈值指的是 top, right, bottom 或 left 之一,换言之,指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。
  • 偏移值不会影响任何其他元素的位置。该值总是创建一个新的层叠上下文(stacking context)。
  • sticky元素会固定在离它最近的一个拥有滚动机制的祖先上,如果祖先元素都不可以滚动,那么是相对于viewport来计算元素的偏移量。

2、原理

视口元素:显示内容的区域。会设置宽高。一般会设置 overflow:hidden。             

容器元素:离 sticky 元素最近的能滚动的祖先元素。             

粘性约束元素:粘性定位的父元素。有时也会出现粘性约束元素就是容器元素的情况。         

sticky 元素:设置了 position: sticky; 的元素。

滚动时,sticky 元素设置的 left, right, top, bottom 的值相对的是容器元素。当粘性约束元素滚出视口时,sticky 元素也会滚出视口。

3、可能存在的不生效的情况

3.1 未指定 top, right, top 和 bottom 中的任何一个值

此时,设置 position: sticky 相当于设置 position: relative

要生效,要指定 top, right, top 或 bottom 中的任何一个值。

3.2 垂直滚动时,粘性约束元素高度小于等于 sticky 元素高度

当粘性约束元素滚出视口时,sticky 元素也会滚出视口。粘性约束元素比 sticky 元素还小,sticky 元素没有显示固定定位状态的机会。

水平滚动时,粘性约束元素宽度小于等于 sticky 元素宽度时,也不会生效。

3.3 粘性约束元素和容器元素之间存在 overflow: hidden 的元素

示例如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body {margin: 0;padding: 0;}.viewport {width: 375px;height: 300px;background-color: pink;padding: 20px;overflow: auto;}.container {height: 500px;background-color: skyblue;padding: 20px;}.box {height: 300px;background-color: lightgoldenrodyellow;padding: 20px;}.stick-elem {height: 50px;background-color: seagreen;padding: 20px;position: -webkit-sticky;position: sticky;top: 50px;}</style></head><body><!-- 视口元素 --><div class="viewport"><h3>视口元素</h3><!-- 容器元素 --><div class="container"><h3>容器元素</h3><div style="overflow: hidden;"><!-- 粘性约束元素 --><div class="box"><h3>粘性约束元素</h3><!-- sticky 元素 --><div class="stick-elem"><h3>sticky 元素</h3></div></div></div></div></div></body>
</html>

4、应用示例

4.1 头部固定

头部导航栏开始时相对定位顶部,当页面元素发生滚动时,变为和 fixed 类似的固定定位。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body {margin: 0;padding: 0;}.main-container {max-width: 375px;height: 300px;overflow: auto;}.main-header {height: 50px;background: pink;position: -webkit-sticky;position: sticky;top: 0;}.main-content {min-height: 500px;background: skyblue;}.main-footer {height: 50px;background: seagreen;}</style></head><body><main class="main-container"><header class="main-header">HEADER</header><div class="main-content">MAIN CONTENT</div><footer class="main-footer">FOOTER</footer></main></body>
</html>

 4.2 页脚固定

页脚固定效果,开始时页脚为固定定位效果,当页面滚动超过页脚时,页脚定位效果变为相对定位效果,可用于显示一些底部信息或广告。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body {margin: 0;padding: 0;}.main-container {max-width: 375px;height: 300px;overflow: auto;}.main-header {height: 50px;background: pink;position: -webkit-sticky;}.main-content {min-height: 500px;background: skyblue;}.main-footer {height: 50px;background: seagreen;position: sticky;bottom: 0;}</style></head><body><main class="main-container"><header class="main-header">HEADER</header><div class="main-content">MAIN CONTENT</div><footer class="main-footer">FOOTER</footer></main></body>
</html>

4.3 侧边栏固定

当页面产生滚动,位置超过侧边栏的 顶部阈值 后,侧边栏变为固定定位,可用于实现侧边导航栏或侧边提示信息及广告展示。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body {margin: 0;padding: 0;}.scroll {width: 375px;height: 300px;overflow: scroll;padding: 0 10px;box-sizing: border-box;background: pink;}.wrapper {display: flex;}.content {padding: 0 15px;width: 200px;}.sidebar {width: 175px;height: 100%;padding: 20px;background: #2D2D2D;color: #FFFFFF;box-sizing: border-box;position: -webkit-sticky;position: sticky;top: 15px;}</style></head><body><div class="scroll"><div class="wrapper"><div class="content"><h1>Scroll Down!</h1><p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu liberosit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minus suscipit blanditiis delectusquos, soluta fuga voluptatem, facere inventore neque voluptate quaerat unde laboriosam molestiaerepellat, sapiente accusamus cumque! Ipsam, illo!</p></div><div class="sidebar"><h3>侧边栏</h3></div></div></div></body>
</html>

4.4 列表描点

仅使用 css 就可实现页面滚动锚点固定效果,可用于实现通讯录滚动、日志记录滚动、其他分类列表滚动效果。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body {margin: 0;padding: 0;}.container {width: 375px;height: 300px;position: relative;overflow: auto;}.list {min-height: 500px;background: pink;}.list-content,.list-content>div {padding: 10px 20px;}.list-header {padding: 10px;background: #2D2D2D;color: #FFFFFF;font-weight: bold;position: sticky;top: 0;}</style></head><body><div class="container"><div class="list"><div class="list-group"><div class="list-header">A</div><div class="list-content"><div>Apple</div><div>Artichoke</div><div>Aardvark</div><div>Ant</div><div>Acorn</div></div></div><div class="list-group"><div class="list-header">B</div><div class="list-content"><div>Big</div><div>Body</div><div>Base</div><div>Baby</div><div>But</div></div></div><div class="list-group"><div class="list-header">C</div><div class="list-content"><div>Car</div><div>Cat</div><div>Cute</div><div>Can</div></div></div><div class="list-group"><div class="list-header">D</div><div class="list-content"><div>Dog</div><div>Date</div><div>Danish</div><div>Dandelion</div></div></div></div></div></body>
</html>

 4.5 表格表头固定

对 table 元素的 th 或 tr 设置 position: sticky; 可以实现表格头部或某行固定,也可将多个表格合并到一起,当滚动到当前表格是,固定头部自动变为当前表格的表头。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body {margin: 0;padding: 0;}.container {width: 375px;height: 300px;width: fit-content;overflow: auto;}table {text-align: left;position: relative;border-collapse: collapse;}th,td {padding: 30px 17px;}tr:nth-child(even) {background: #EFEFEF;}tr.red th {background: #dd4a63;color: white;}tr.green th {background: #03C03C;color: white;}tr.blue th {background: #1580d8;color: white;}th {background: white;position: sticky;top: 0;}</style></head><body><div class="container"><table><thead><tr class="red"><th>Name</th><th>Age</th><th>Job</th><th>Color</th><th>URL</th></tr></thead><tbody><tr><td>Lorem.</td><td>Ullam.</td><td>Vel.</td><td>At.</td><td>Quis.</td></tr><tr><td>Lorem.</td><td>Ullam.</td><td>Vel.</td><td>At.</td><td>Quis.</td></tr><tr><td>Lorem.</td><td>Ullam.</td><td>Vel.</td><td>At.</td><td>Quis.</td></tr><tr class="green"><th>Name</th><th>Age</th><th>Job</th><th>Color</th><th>URL</th></tr><tr><td>Lorem.</td><td>Ullam.</td><td>Vel.</td><td>At.</td><td>Quis.</td></tr><tr><td>Lorem.</td><td>Ullam.</td><td>Vel.</td><td>At.</td><td>Quis.</td></tr><tr class="blue"><th>Name</th><th>Age</th><th>Job</th><th>Color</th><th>URL</th></tr><tr><td>Lorem.</td><td>Ullam.</td><td>Vel.</td><td>At.</td><td>Quis.</td></tr><tr><td>Lorem.</td><td>Ullam.</td><td>Vel.</td><td>At.</td><td>Quis.</td></tr><tr><td>Lorem.</td><td>Ullam.</td><td>Vel.</td><td>At.</td><td>Quis.</td></tr></tbody></table></div></body>
</html>

4.6 页面进度条(简易)

利用 position: sticky; 定位,可以实现页面浏览进度条效果,以下是简易进度条的演示,实际实现中可将未滚动到顶部的元素设置为透明色,滚动到顶部时变为蓝色。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body {margin: 0;padding: 0;}.container {width: 400px;height: 300px;overflow: auto;padding-bottom: 500px;box-sizing: border-box;background: pink;}.sticky {width: 100px;height: 10px;background: rgba(36, 167, 254, 0.979);position: -webkit-sticky;position: sticky;top: 0;}.sticky:nth-of-type(2) {transform: translateX(100px);}.sticky:nth-of-type(3) {transform: translateX(200px);}.sticky:nth-of-type(4) {transform: translateX(300px);}</style></head><body><div class="container"><h1>Sticky Progress</h1><div class="sticky"></div><p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatem, cumque? A, est perferendis explicaboodit possimus quisquam rem ad tempore ipsa, obcaecati ex culpa similique, aliquam corporis. Quis,nostrum expedita.</p><div class="sticky"></div><p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatem, cumque? A, est perferendis explicaboodit possimus quisquam rem ad tempore ipsa, obcaecati ex culpa similique, aliquam corporis. Quis,nostrum expedita.</p><div class="sticky"></div><p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatem, cumque? A, est perferendis explicaboodit possimus quisquam rem ad tempore ipsa, obcaecati ex culpa similique, aliquam corporis. Quis,nostrum expedita.</p><div class="sticky"></div><p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatem, cumque? A, est perferendis explicaboodit possimus quisquam rem ad tempore ipsa, obcaecati ex culpa similique, aliquam corporis. Quis,nostrum expedita.</p></div></body>
</html>

参考资料:javascript - position:sticky 粘性定位的几种巧妙应用 - 个人文章 - SegmentFault 思否


http://chatgpt.dhexx.cn/article/OtdnQ1WM.shtml

相关文章

position: sticky 属性

关于 position 属性主要有五个值&#xff1a; static relative fixed absolute sticky 常见的就是 relative 和 absolute 这两个属性。 relative 表示&#xff0c;相对于默认位置&#xff08;即static时的位置&#xff09;进行偏移&#xff0c;即定位基点是元素的默认位置。 ab…

position的属性(sticky属性)

position的属性 对position所有的属性的介绍sticky属性定义demosticky生效以及失效 fixed属性定义demo absolute属性定义demo relative属性定义demo static属性定义 对position所有的属性的介绍 https://developer.mozilla.org/zh-CN/docs/Web/CSS/position sticky属性 定义…

css定位(二)---css中粘性定位(sticky)---C3新增属性

作用&#xff1a;相对定位&#xff08;position:relative&#xff09;和固定定位&#xff08;position:fixed&#xff09;的混合。sticky相当于加了一个滚动事件的处理&#xff0c;在滑动过程中&#xff0c;某个元素距离其父元素的距离达到sticky粘性定位的要求时(比如top&…

sticky

sticky position属性中最有意思的就是sticky了&#xff0c;设置了sticky的元素&#xff0c;在屏幕范围&#xff08;viewport&#xff09;时该元素的位置并不受到定位影响&#xff08;设置是top、left等属性无效&#xff09;&#xff0c;当该元素的位置将要移出偏移范围时&#…

sticky android,Sticky Warriors

《Sticky Warriors》是一款休闲格斗冒险类游戏&#xff0c;各种动画还有游戏当中的角色都会在这款游戏当中出现&#xff0c;简单但是非常硬核的操作&#xff0c;此外你还可以选择战斗的场景&#xff0c;更能烘托战斗的氛围&#xff0c;丰富多样的战斗模式玩法可以体验&#xff…

Mac破解百度云

https://github.com/CodeTips/BaiduNetdiskPlugin-macOS 转载于:https://www.cnblogs.com/wt645631686/p/10910576.html

百度云不限速下载最新破解真好用

大家肯定遇到过这种情况,家里的宽带明明就是 百兆光纤&#xff0c;为什么用百度云下载速度却是可怜几十kb/s? 其他工具下载速度却是正常&#xff0c;其实大家都知道这个是百度云限速了,为了让你冲会员,不择手段!!! 房贷要还&#xff0c;还要吃饭&#xff0c;该省的一分都不想…

百度云破解不限速版(绿色免安装)

百度云限速导致下载教程耗费大量的时间&#xff0c;给各位分享一个破解版的百度云。 百度云破解不限速版&#xff1a; 下载地址&#xff1a;链接: http://pan.baidu.com/s/1nuAF6LN 密码: c7jv 如果链接失效了直接向我反馈 下载地址&#xff1a;http://feixueteam.net/th…

破解版百度云【亲测好用】完美解决限速

现在百度云由于各种限制&#xff0c;下载速度非常的慢&#xff0c;今天用百度下载东西&#xff0c;感觉太慢&#xff0c;在网上无意间发现了一款不限速版的百度云&#xff0c;好的工具在这里一定要和大家分享了。&#xff0c; 咱们先来看看下载速度&#xff0c;我这里应该是10…

[不限速百度云]两款百度网盘破解版分享

Pandownload 简介 这个破解版百度云可以说是很经典了&#xff0c;由吾爱破解大神倾情制作。 缺点是使用自己的账号&#xff0c;容易被度受限速&#xff0c;好几天才能恢复 特别说明&#xff1a;使用前请登录百度账号&#xff01; 下崽链接 https://www.lanzous.com/i51s9wf…

极速下载!利用插件破解百度云限速

首发地址&#xff1a;【原创达人】极速下载&#xff01;利用插件破解百度云限速 http://club.lenovo.com.cn/thread-2781576-1-1.html (出处: 联想社区) 百度网盘真的是个好东西&#xff0c;但他让人又爱又恨&#xff0c;容量大&#xff0c;资源多给我们带来了很大的方便&…

X Chen笔记---百度云破解限速

http://blog.csdn.net/qq_29922333/article/details/55051619 http://chromecj.com/utilities/2015-04/423.html 原理 使用User-Agent-Switcher-for-Chrome这个插件&#xff0c;将window的浏览器模拟成safari浏览器&#xff0c;就可以不使用云盘来下载文件&#xff0c;使用…

从零开始速通百度云网盘

原文链接&#xff1a;CCR39のLazyNest 相信大家在网上冲浪时时常会下载一些资源、软件&#xff0c;如果你需要下载别人分享的资源时&#xff0c;就需要用到网盘。 百度云网盘由于早期在国内占据了一定规模的市场&#xff0c;拥有大量的资源与链接&#xff0c;直至目前&#x…

“油猴脚本”获取百度云文件URL,百度云速度破解

用通俗的语言来说&#xff0c;油猴脚本是一个浏览器插件&#xff0c;它本身也可以添加很多不同的脚本&#xff0c;是浏览器上的一个脚本管理集成工具。 我们来看一下&#xff0c;它在Chrome 插件市场已经1000 w 的下载了&#xff0c;也看出它的受欢迎程度。 借助所编写的脚本它…

破解网页版 百度云网盘无法下载大文件限制

问题描述&#xff1a; 百度云网盘网页版下载文件时&#xff0c;由于文件过大&#xff0c;点击下载&#xff0c;提示安装客户端下载。我们不安装客户端而继续使用网页版下载打文件呢&#xff1f; 方法如下&#xff1a; ---------------我用的chrome浏览器&#xff0c;其他的浏览…

免费的百度网盘批量转存软件工具

之前说的一个自动赚钱的项目&#xff0c;用到的工具就是这个一键转存工具。 项目文章《揭秘灰色项目&#xff1a;自动化引色流暴利变现方式》 此外的话百度账号也是很便宜的&#xff0c;也可以自己用软件注册&#xff0c;这个就不多说了。 这款软件免费的破解的&#xff0c;…

百度网盘+7.9+android,百度云7.9.0永不升级版

百度云7.9.0永不升级版是一款非常专业的云存储平台。在这里你可以随时随地在移动客户端和伙伴们快乐分享视频、照片&#xff0c;支持多条件筛选查找&#xff0c;群主智能管理&#xff0c;化繁为简随心阅览&#xff0c;让你的文件一目了然&#xff0c;备份数据、保存私密文件就选…

【百度云破解】Aria2GUI使用教程

两个工具&#xff1a; Aria2GUI 下载地址 Aria2GUI Chrome插件 下载地址 Chrome插件设置&#xff1a;下载后文件解压一下&#xff0c;打开chrome浏览器-》更多工具-》扩展程序&#xff0c;直接将文件夹拖入即可&#xff1b;下面为成功实例 先打开Aria2GUI, 找到自己网盘对应…

破解百度云限速

引言&#xff1a;像我这么爱分享的人&#xff0c;发现好东西怎么会不拿出来分享&#xff0c;自己试验之后发现可以提速&#xff0c;立马就写篇教程分享给大家。 大家都知道百度云已经限速了&#xff0c;下载速度只有40-500kb&#xff0c;而且极不稳定&#xff0c;想要高速下载&…

破解百度云盘下载速度,不限速百度云高速下载器-简单操作免安装版本(亲测好用)

这是一款通过算法来提速的高速下载器&#xff0c;支持Windows和Mac。低调使用. 下载地址&#xff1a; 百度云下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1MStwDra3y4qYaZv8-ZS9Kg 提取码&#xff1a;64pm 备用下载&#xff1a; Window 版本&#xff1…