如何实现导航栏背景渐变的双向平滑过渡(上下滚动均无“弹出”感)

云敏大大_4318

云敏大大_4318

2026-10-14

150人浏览

原创

如何实现导航栏背景渐变的双向平滑过渡(上下滚动均无“弹出”感)

本文详解如何利用 CSS @property 自定义属性 + radial-gradient 实现 navbar 背景从纯黑到半透明径向渐变的双向可逆动画,彻底解决回滚时颜色“突变”问题,确保上下滚动均具备一致、流畅的视觉融合效果。

本文详解如何利用 css `@property` 自定义属性 + `radial-gradient` 实现 navbar 背景从纯黑到半透明径向渐变的**双向可逆动画**,彻底解决回滚时颜色“突变”问题,确保上下滚动均具备一致、流畅的视觉融合效果。

在网页开发中,为粘性导航栏(sticky navbar)添加滚动触发的背景渐变效果是常见需求。但许多开发者会遇到一个典型问题:向下滚动时,navbar 从纯黑平滑过渡为带透明度的径向渐变;而向上滚动返回顶部时,背景却“啪”地一下硬切回黑色——即所谓“pop”现象。这本质上是因为 CSS 的 background 属性不支持对渐变参数(如色值、位置、百分比)做原生动画,仅靠 transition: background 0.5s 无法驱动 radial-gradient(...) 中的动态值变化。

✅ 正确解法:使用 @property 定义可动画的自定义 CSS 属性

现代 CSS 提供了 @property 规则(Chrome 102+、Edge 102+、Safari 16.4+ 支持,Firefox 尚未支持),允许我们声明类型安全、可继承、可动画的自定义属性。借助它,我们可以将渐变中的关键变量(如中心色值 --c 和透明截止点 --p)抽离为可被 transition 驱动的属性:

@property --p {
  syntax: "<percentage>";
  inherits: false;
  initial-value: 100%;
}

@property --c {
  syntax: "<color>";
  inherits: false;
  initial-value: black;
}</color></percentage>

随后,在 .navbar 中使用这些属性构建渐变,并为它们设置过渡:

.navbar {
  --p: 100%;
  --c: black;
  position: sticky;
  top: 21px;
  width: 100%;
  background: radial-gradient(circle, var(--c) var(--p), transparent);
  transition: --p 0.5s ease, --c 0.5s ease; /* 关键:直接过渡自定义属性 */
  z-index: 1050;
}

.navbar.scrolled {
  --p: 70%;
  --c: rgba(0, 0, 0, 0.7);
}

此时,当 JavaScript 切换 .scrolled 类时,--p 和 --c 会以 ease 缓动函数平滑插值,从而驱动整个 radial-gradient 的形态与色彩同步过渡——无论添加还是移除 .scrolled,动画方向完全对称,彻底消除“回弹”感。

?️ 完整实现要点

  1. JavaScript 保持简洁:无需监听 scroll 事件做复杂阈值判断,只需根据滚动位置切换类名:

    window.addEventListener("scroll", () => {
      const navbar = document.querySelector(".navbar");
      if (window.pageYOffset > 21) {
        navbar.classList.add("scrolled");
      } else {
        navbar.classList.remove("scrolled");
      }
    });
  2. 兼容性兜底建议(针对 Firefox 或旧浏览器):
    若需广泛兼容,可降级为 opacity + backdrop-filter 模糊叠加方案,或使用 SVG 渐变作为 background-image 并通过 transform: translateY() 模拟深度感(非推荐,牺牲语义性)。但对主流现代浏览器,@property 是最优雅、性能最优的原生方案。

  3. 注意事项:

    • 确保 radial-gradient 的 transparent 部分与页面背景色协调,避免视觉割裂;
    • transition-timing-function 建议统一使用 ease 或 cubic-bezier(.4,0,.2,1),避免 linear 导致生硬;
    • @property 必须定义在 <style></style> 标签内或外部 CSS 文件顶部,不可嵌套于媒体查询或选择器中。

✅ 总结

通过 @property 将渐变参数转化为可动画的 CSS 自定义属性,再结合 transition 对其进行控制,是实现 navbar 渐变真正双向平滑融合的现代标准方案。它不仅解决了“上滚突变”痛点,还提升了代码可维护性与动画性能。只要目标用户覆盖主流 Chromium/Safari 浏览器,该方案即可放心落地——让每一次滚动,都成为细腻、连贯的视觉体验。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

6035

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3392

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3070

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

3079

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

4859

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

3041

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

2849

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

2508

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2568

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习