纯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


相关推荐: 手机耗电快是什么原因 延长手机电池续航时间的设置方法【详解】  Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法  汽水音乐官方网站登录入口_汽水音乐网页版进入链接  厨房地面防滑垫的油污怎么洗? 机洗和手洗防滑垫的注意事项  风神瞳获取全攻略  J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突  鲁班大师乓乓皮肤获取方法  抖音火山版如何进行提现  mysql中外键约束如何使用_mysql FOREIGN KEY操作  wps文字怎么设置文字环绕图片的方式_wps文字如何设置文字环绕图片方式  抖音手机分身两个账号怎么切换?分身两个系统是一样的吗?  Go语言中方法与接收器:指针和值类型的调用机制详解  美发店速赢秘籍  TikTok视频播放中断怎么办 TikTok播放异常修复方法  一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化  手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧  mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程  微信步数怎么刷_微信步数快速提升技巧  火狐浏览器如何刷新修复浏览器 火狐浏览器“重置Firefox”功能详解  发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?  键盘测试软件哪个好_键盘故障检测工具推荐  抖音号显示企业机构号是什么意思?企业机构号申请条件是什么?  百度地图离线地图无法加载如何解决 百度地图离线地图加载优化方法  嘴唇干裂起皮怎么办 唇部护理与预防干裂的方法【详解】  《环球网校》设置报考省市方法  QQ阅读小说搜索入口地址_QQ阅读小说搜索入口地址搜索在线阅读  智学网app怎么登录忘记密码_智学网app忘记密码找回与重新登录操作方法  《绝区零》2.3前瞻|直播|内容介绍  Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】  Go语言中方法接收器的选择:值类型还是指针类型?  抄漫画官网防走失地址_抄漫画最新漫画完整版阅读入口  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  Go Template中优雅处理循环最后一项:自定义函数实践  顺丰快递收费标准查询_如何查看顺丰最新收费价格  Go Goroutine调度与并发执行深度解析  手机雨课堂网页版入口免登录 雨课堂网页版可点击直接进入  J*aScript字符串_Unicode处理  宝妈做视频号该写什么标签话题?宝妈关注的话题有哪些?  《梦想世界:长风问剑录》药师一图流分享  悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置  快手缓存清理方法  yy漫画登录页面官方入口_yy漫画在线阅读网址入口  diskgenius分区工具如何设置Bios启动项  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  《爱笔思画x》涂色教程  青橙手机语音助手怎么唤醒_青橙手机语音助手设置与唤醒方法  C++ virtual析构函数作用_C++基类虚析构函数防止内存泄漏  处理含命名空间的XML文件 Power Query中的高级技巧  steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明  Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】 

 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.