SuperAPI AI 工具集

sticky-and-fixed-elements

前端与建站

查看项目

更新于 10-15 15:28

技能介绍

用途

本技能用于指导在网页中正确使用粘性(sticky)与固定(fixed)定位元素,帮助开发者决定在用户滚动页面时哪些界面元素应当保持在屏幕上,以及应当采用哪种定位方式。

主要能力

position: fixed 与 position: sticky 的对比

  • position: fixed:脱离文档流,无论滚动或父元素如何变化,始终停留在视口的同一位置。适用于全局导航头部、底部工具栏、浮动操作按钮。
  • position: sticky:保持在文档流中,直到到达滚动阈值后锁定位置,父元素滚过之后回到文档流。适用于表格列头、长列表中的分节标题、滚动容器内的页内工具栏。

当元素属于某个特定区块或滚动上下文时,优先使用 sticky 而非 fixed。fixed 元素位于所有内容之上并影响整个视口,只应用于真正全局的 UI。

顶部导航头部

全局导航头部是最常见的固定元素,应当:

  • 始终可见,让用户随时可以导航离开
  • 尽可能薄以最大化内容区域,48–64px 是常见范围
  • 具有背景和阴影,避免下方滚动内容透出
  • 滚动时用细微阴影(--shadow-sm)提示其后方有内容

示例代码:

.site-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: var(--header-height);
  background: var(--color-surface);
  box-shadow: var(--shadow-sm);
  z-index: var(--z-header);
}

用与固定头部高度匹配的页面 body 顶部内边距进行补偿:

body { padding-top: var(--header-height); }

移动端底部工具栏

在移动端,屏幕底部是单手握持时最容易触及的区域。常驻底部工具栏适合放置:

  • 主导航(底部标签栏,iOS 与 Android 惯例)
  • 当前视图的上下文操作(编辑、分享、删除)
  • 针对最重要单一操作的浮动操作按钮(FAB)

底部工具栏应当:

  • 在带 home 指示条的设备上尊重安全区域:padding-bottom: env(safe-area-inset-bottom)
  • 与内容有视觉分隔(背景填充、顶部边框或阴影)
  • 最多包含 3–5 个项目,超过 5 个应移入菜单或改用其他模式
  • 导航标签使用图标加文字,上下文工具栏可仅用图标(配合提示)

在桌面端,底部工具栏并不常见。状态栏、编辑器工具栏和命令面板是桌面端的对应形式,通常使用底部 position: fixed 或在其滚动容器内使用 position: sticky。

粘性表格表头

对于滚动容器内的数据表格,粘性列头可防止用户忘记各列含义。

thead th {
  position: sticky;
  top: 0;
  background: var(--color-surface);
  z-index: 1;
}

如果表格同时有粘性首列(用于行标识),左上角单元格需要同时设置 top: 0 和 left: 0,并使用更高的 z-index 以位于表头行和粘性列之上。

堆叠与 z-index

粘性与固定元素会创建堆叠上下文。应将 z-index 定义为命名令牌,而非任意数字:

--z-base:       0;
--z-dropdown:   100;
--z-sticky:     200;
--z-header:     300;
--z-modal:      400;
--z-toast:      500;

每个固定或粘性元素都必须使用令牌显式声明其 z-index。避免使用 z-index: 9999 这类临时值,它们意味着堆叠上下文未被管理,最终会产生冲突。

固定层数量控制

每个固定层都会占用内容区域空间并增加视觉复杂度。一个页面很少需要超过:

  • 1 个固定头部(顶部)
  • 1 个固定工具栏或底部导航(底部,移动端)
  • 1 个浮动操作按钮或上下文浮层

固定头部 + 固定底部工具栏 + 浮动按钮 + 粘性侧边栏 + 粘性表头同时出现,层数就过多了。应尽可能合并。

审查清单

  • 是否对区块范围的元素使用 sticky,仅对真正全局的 UI 使用 fixed?
  • 固定头部是否用 body 内边距补偿了自身高度?
  • 底部工具栏在移动端是否尊重 env(safe-area-inset-bottom)?
  • 所有 z-index 值是否定义为命名令牌,而非任意数字?
  • 同时存在的固定层总数是否最小化——多数情况下最多为头部加一个底部元素?
  • 固定元素后方滚动的内容是否不会视觉穿透(固定元素有背景和阴影)?

适用场景

适用于需要设计或实现滚动时保持可见的界面元素的场景,包括全局导航、移动端底部导航与工具栏、浮动操作按钮、数据表格粘性表头、长列表分节标题等。

限制

资料未提供该技能的具体安装方式、依赖环境、支持的框架或平台版本等信息,暂未提供。