实现吸顶的方式 | Coder 小站

吸顶是在项目中常见的效果,今天的 demo 主要就是来说下常见的两种实现吸顶的方式。

主要手段还是使用 position 定位来实现,只不过值不同而已

使用 fixed 固定定位

当我们使用 fixed 对元素设置固定定位时,元素本身会脱离正常的文档流,并不为元素预留空间,而是会相对于浏览器的屏幕窗口来移动位置。元素在屏幕滚动时不会发生位置变动

fixed 属性会创建新的层叠上下文

我们如何改变元素的相对参照物呢?可以通过设置元素(设置过固定定位)祖先(父级及以上)的 transformperspectivefilter 属性不为 none 时,参照物就会由屏幕窗口改为该祖先。但是此时也会导致没有办法再让它固定到窗口的某个部分。

使用它有一个缺点,那就是对于不需要被固定的元素,要设置相对于固定元素等距离的内边距或者外边距。否则会被固定元素覆盖掉部分内容。

使用 sticky 粘性定位

在使用 sticky 时,元素会根据正常的文档流定位,这一点它是和 relative 保持一致的。它会以相对于它最近的滚动祖先元素和最近的块级祖先元素 ,进行定位,且偏移值不会影响到任何其他元素的位置(这一点也和 relative 一样)。

它也会创建一个新的层叠上下文。

一个 sticky 元素会_固定_在离它最近的一个拥有_滚动机制_的祖先上(即 overflowhiddenscrollauto 或者 overlay 时)。

我们也可以理解为粘性定位是相对定位和固定定位的混合,元素在跨越特定阈值前为相对定位,之后则为固定定位。

例如:

css 复制代码
#one { position: sticky; top: 10px; }

在可视窗口滚动到元素 top 距离小于 10px 之前,元素为相对定位。之后,元素将固定在与定位距离 10px 的位置,直到 viewport 视口回滚到 10px 以下。

补充

这里补充一个面试题考点:当 absolute 元素中嵌套了一个 absolute 时,外层的 absolute 元素的参照物是谁?里层的 absolute 的参照物是谁?

解答

我们需要知道要成为绝对定位元素的参照物,必须满足以下两个条件:

  • 参照物和绝对定位之间必须是包含与被包含的关系
  • 参照物必须得具有定位属性

如果找不到满足以上两个条件的父包含块,那么绝对定位元素的参照物是浏览器窗口。

相关推荐
顺颂时绥_16 分钟前
前端大图片压缩与安卓/苹果设备矫正实践
前端
Csvn9 分钟前
JSON.parse 大数精度丢失:一个让前后端互相甩锅的 Bug
前端
Helen_cai27 分钟前
OpenHarmony 项目统一全局样式、尺寸、色彩主题封装 ThemeUtil(API23)
开发语言·前端·javascript·华为·harmonyos
郑州光合科技余经理28 分钟前
家政O2O平台解析:从0搭建上门预约小程序解决方案
android·java·开发语言·前端·小程序·架构·php
小徐_233339 分钟前
AI 写 wot-ui 总在猜 API?我们把 Skills、MCP 和 CLI 都配好了
前端·uni-app·ai编程
winfredzhang44 分钟前
用 wxPython + ECharts + 阿里矢量地图,做一个可离线兜底的上海雨量看板
前端·javascript·echarts
索西引擎1 小时前
【React】Immer.js 在现代 Redux 生态中的角色:不可变性保障的工程化实现与开发体验优化
前端·javascript·react.js
kisshyshy1 小时前
《川剧变脸 × React 状态管理?我在浏览器里跑了个端侧大模型》
前端·react.js·架构
只一1 小时前
端侧AI实战第二章:React组件工程化 + 事件系统 + 可复用进度条(WebGPU模型加载底座)
前端·react.js
大卫陈1 小时前
微信小程序虚拟支付实战:从「支付能力被限制」到沙箱调通的全过程
前端·后端