纯CSS实现滚动时动态时间轴线条颜色填充效果


纯css实现滚动时动态时间轴线条颜色填充效果

本文详细介绍了如何利用CSS的position: sticky属性,纯CSS实现一种动态时间轴效果。该效果特点是,在页面滚动时,一条静态的灰色时间轴基线会逐渐被一条活动颜色的线条从下往上填充,无需复杂的J*aScript,即可创建视觉吸引力强的交互式时间轴。

1. 概述与核心原理

在网页设计中,时间轴(Timeline)效果常用于展示事件序列或项目进度。一种常见的动态效果是,当用户滚动页面时,时间轴的线条会从底部向上逐渐改变颜色,指示当前滚动到的位置。传统上,这类效果可能需要J*aScript来监听滚动事件并动态修改CSS属性。然而,通过巧妙地结合CSS的position: sticky、overflow: clip和绝对定位,我们可以实现一个纯CSS的解决方案。

该方案的核心思想是:

  1. 基线(Baseline):创建一条固定颜色的静态线条作为时间轴的背景。
  2. 活动线(Active Line):创建另一条颜色不同的线条,初始时大部分隐藏在其父容器的上方,只有一小部分可见。
  3. position: sticky:将包含活动线的父容器设置为粘性定位。当页面滚动到该容器时,它会固定在视口顶部。
  4. overflow: clip:在时间轴的外部容器上使用此属性,以裁剪超出其边界的内容。
  5. 滚动填充效果:当页面滚动时,由于粘性定位和绝对定位的巧妙结合,以及外部容器的裁剪,活动线会从底部向上逐渐“填充”基线,营造出颜色渐变的效果。

2. HTML 结构

首先,我们需要构建相应的HTML骨架来承载时间轴的各个部分。

Viggle AI Video Viggle AI Video

Powerful AI-powered animation tool and image-to-video AI generator.

Viggle AI Video 115 查看详情 Viggle AI Video
<div class="area">
  <!-- 包含时间轴的通用区域 -->
  <div class="timeline-box">
    <!-- 包含所有时间轴元素的盒子,可移动和调整大小 -->
    <div class="baseline"></div>
    <!-- 静态时间轴基线 -->
    <div class="timeline">
      <!-- 粘性时间轴容器 -->
      <div></div>
      <!-- 活动时间轴线条 -->
    </div>
  </div>
</div>
<!-- 确保body有足够的滚动高度以触发效果 -->
<!-- 更多内容或空白区域 -->
  • .area: 这是一个通用容器,用于包裹整个时间轴区域。
  • .timeline-box: 这是时间轴的核心容器,它定义了时间轴的可见区域,并负责裁剪超出部分。
  • .baseline: 这就是我们静态的、未激活的灰色线条。
  • .timeline: 这个元素是关键,它将被设置为position: sticky。
  • .timeline > div: 这是实际的“活动”线条,它会随着滚动而逐渐显示,改变颜色。

3. CSS 实现

接下来,我们为上述HTML结构添加样式,实现动态线条填充效果。

body {
  /* 确保body有足够的滚动高度来触发粘性效果和线条填充 */
  height: 200vh; 
  margin: 0; /* 移除默认边距 */
}

.area {
  /* 定义时间轴区域的高度和背景 */
  height: 120vh;
  background: #f6f8ff;
}

.timeline-box {
  /* 时间轴内容的容器,设置相对定位以便内部绝对定位元素参照 */
  height: 120vh;
  position: relative;
  /* 关键:裁剪超出此容器的内容,实现线条填充效果 */
  overflow-y: clip; 
  padding-left: 256px; /* 示例:为时间轴内容预留空间 */
}

.baseline {
  /* 静态基线样式 */
  width: 32px; /* 线条宽度 */
  height: 120vh; /* 与timeline-box高度一致 */
  position: absolute; /* 绝对定位,脱离文档流 */
  top: 0;
  background: #d9d9e8; /* 基线颜色 */
  /* 居中基线 (根据padding-left调整) */
  left: 256px; /* 与padding-left保持一致,将基线放置在内容区域左侧 */
  transform: translateX(-50%); /* 微调使其居中于256px位置 */
}

.timeline {
  /* 粘性容器,当滚动到顶部时固定 */
  width: 32px; /* 与基线宽度一致 */
  position: sticky; /* 关键:使元素在滚动时粘性定位 */
  top: 0; /* 当元素顶部到达视口顶部时固定 */
  /* 居中粘性容器 */
  left: 256px; /* 与padding-left保持一致 */
  transform: translateX(-50%); /* 微调使其居中 */
}

.timeline > div {
  /* 活动线条样式 */
  position: absolute; /* 绝对定位,参照其父元素.timeline */
  width: 100%; /* 宽度与父元素.timeline一致 */
  height: 120vh; /* 与timeline-box高度一致 */
  background: #5c53f3; /* 填充颜色 */
  /* 关键:初始时将线条顶部定位在父元素上方100vh处 */
  /* 由于height: 120vh,这意味着其底部20vh会与父元素顶部对齐 */
  /* 结合overflow-y: clip,大部分线条初始时被隐藏 */
  top: -100vh; 
}

3.1 样式解析

  1. body: 设置height: 200vh是为了确保页面有足够的滚动空间,这样position: sticky才能触发,并且活动线有足够的距离来“填充”。
  2. .area: 定义了时间轴所在的整体区域,设置了背景色和高度。
  3. .timeline-box:
    • height: 120vh: 定义了时间轴的可见高度。
    • position: relative: 为内部的绝对定位元素提供参照。
    • overflow-y: clip: 这是实现填充效果的关键之一。 它会裁剪掉任何超出.timeline-box垂直方向的内容。这意味着.timeline > div的隐藏部分在没有滚动时是不可见的。
    • padding-left: 256px: 为时间轴内容(如果存在)预留空间,并用于定位线条。
  4. .baseline:
    • width: 32px, height: 120vh: 定义了静态基线的尺寸。
    • position: absolute, top: 0: 将基线绝对定位在.timeline-box的左侧。
    • left: 256px; transform: translateX(-50%);: 结合padding-left将基线水平居中于内容区域的左侧边缘。
  5. .timeline:
    • width: 32px: 与基线宽度一致。
    • position: sticky: 这是实现动态效果的核心。 当用户滚动页面,.timeline元素的顶部到达视口顶部时,它会“粘”在视口顶部,不再随页面滚动。
    • top: 0: 指定了粘性元素在视口中的固定位置。
    • left: 256px; transform: translateX(-50%);: 与基线相同的定位方式,确保活动线与基线对齐。
  6. .timeline > div:
    • position: absolute: 相对于其父元素.timeline进行定位。
    • width: 100%, height: 120vh: 宽度与.timeline一致,高度与.timeline-box一致。
    • background: #5c53f3: 定义活动线的颜色。
    • top: -100vh: 这是实现填充效果的另一个关键。 它将活动线向上移动了100vh。由于活动线自身高度为120vh,这意味着其底部20vh会与父元素.timeline的顶部对齐。当页面滚动时,timeline粘性固定,而.timeline > div相对于timeline的位置不变。然而,由于整个.timeline-box的overflow-y: clip,并且body有足够的滚动高度,随着用户滚动,timeline-box下方的内容向上移动,使得.timeline > div从底部逐渐“暴露”出来,营造出线条填充的视觉效果。

4. 浏览器兼容性与注意事项

  • position: sticky 兼容性: position: sticky在现代浏览器中得到了广泛支持(例如Chrome, Firefox, Safari, Edge)。但在IE浏览器中不兼容。在部署前,请务必检查目标用户群的浏览器兼容性需求。可以通过Can I use查询详细兼容性信息。
  • body 高度: 确保body或其他可滚动容器有足够的height(例如200vh),以提供足够的滚动距离来触发和完成线条填充效果。如果滚动距离不足,效果可能不完整。
  • 元素高度匹配: .area, .timeline-box, .baseline, .timeline > div的高度(120vh)需要保持一致,以确保线条能够完整填充。
  • 定位调整: 示例中的padding-left和left/transform用于将线条放置在特定位置。在实际项目中,您可能需要根据布局调整这些值。
  • 仅线条效果: 本教程侧重于线条的颜色填充效果。如果需要添加时间点、图标、文字描述等更丰富的时间轴内容,需要在.timeline-box内部额外添加元素,并调整布局。

5. 总结

通过利用CSS的position: sticky、overflow-y: clip和绝对定位,我们可以纯粹地实现一个视觉上引人注目的时间轴线条颜色填充效果。这种方法避免了J*aScript的复杂性,提高了页面的性能和可维护性。理解这些CSS属性的协同工作方式是实现此类动态效果的关键。在实际应用中,根据项目需求调整颜色、尺寸和定位,可以创造出多样化的时间轴交互体验。

以上就是纯CSS实现滚动时动态时间轴线条颜色填充效果的详细内容,更多请关注其它相关文章!


# 其父  # 津市seo快速排名  # 卡车网站建设海报图案  # 网站营销推广威鑫hfqjwl作词  # 薯条推广用营销推广吗  # 永康网站建设地点推荐  # 沈阳本地seo优化模式  # 方法seo搜索优  # 太原网站建设方案及案例  # 短视频创作灵感网站推广  # 衡阳网站优化设计ppt  # 这意味着  # 设置为  # 相对于  # 使其  # css  # 有足够  # 它会  # 这是  # AI-powered  # 绝对  # css属性  # 网页设计  # ie浏览器  # safari  # edge  # 浏览器  # html  # java  # javascript 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 泰拉瑞亚网页版在线登录入口 泰拉瑞亚官方正版入口  php如何实现多域名共享session_php存储session到redis与跨域读取配置  VS Code如何设置默认配置  三星M34录音变声问题_Samsung M34麦克风调整  虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画  动漫之家观看全集库 动漫之家免费资源网地址  菜鸟驿站的取件码忘了怎么办 手机快速查询指南  word邮件合并怎么插入个性化图片_Word邮件合并插入个性化图片方法  Go反射进阶:访问内嵌结构体中的被遮蔽方法  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  Vue 3中独立响应式实例的创建与应用  msn官方入口2025登录 msn官网2025直达首页入口  优化CSS动画与J*aScript定时器协同:构建稳定Toast提示  QQ邮箱手机版网页版 QQ邮箱登录入口地址  如何修改Windows截图的默认保存位置_告别C盘让桌面更整洁【教程】  实现二叉树的层序插入:基于树大小的路径导航  使用 J*aScript 随机化 CSS Grid 布局中的元素顺序  抖音怎么解除第三方绑定_抖音解除第三方平台绑定方法介绍  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  如何在Podman容器中运行Composer_Docker替代品Podman的PHP与Composer容器化实践  基于键值条件高效映射 Pandas DataFrame 多列数据  汽水音乐官方网站登录入口_汽水音乐网页版进入链接  PHP与SQL实践:高效实现数据复制与特定列值修改  解决SQLAlchemy模型跨文件关联的Linter兼容性指南  手机远程连接电脑方法  Go语言反射机制下访问嵌入结构体中的被遮蔽方法  Lar*el Eloquent:高效删除多对多关系中无关联子记录的父模型  《知到》打卡课程方法  c++如何使用std::thread::join和detach_c++线程生命周期管理  冬季去寒冷地区旅游,以下哪种做法有助于缓解冻伤  德邦快递收费标准详解  Pandas中基于动态偏移量实现DataFrame列值位移的策略  126手机126邮箱登录_126邮箱手机登录入口官网  火柴人战争网页版在线玩  如何在vscode中关闭it环境  PHP 4 函数中引用参数的默认值限制与解决方案  有道AI翻译入口 智能写作官方网站入口  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  win11关机几秒又自己开机 Win11关机自动重启问题修复  《幻兽帕鲁》手游帕鲁捕捉技巧分享  sublime如何自定义文件类型图标_AFileIcon插件的主题切换与个性化配置  哈尔滨城市通昵称修改方法  Golang如何使用gRPC拦截器实现日志收集_Golang gRPC拦截器日志收集实践  《海底捞》点外卖方法  b站如何管理订阅_b站订阅标签分类管理  Python对象引用与属性赋值:理解链表中的行为  Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案  C++ cast类型转换总结_C++ reinterpret_cast与const_cast的使用  虫虫漫画排行榜单入口_虫虫漫画编辑推荐入口  realme 10 Pro息屏方案_realme 10 Pro省电策略 

 2025-11-29

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.