CSS 滚动驱动动画 scroll()

CSS 滚动驱动动画 scroll()

animation-timeline 通过 scroll() 指定可滚动元素与滚动轴来为容器动画提供一个匿名的 scroll progress timeline.

通过元素在顶部和底部(或左边和右边)的滚动推进 scroll progress timeline. 并且元素滚动的位置会被转换为百分比, 滚动开始被转化为 0%, 滚动结束被转化为 100%

如果 scroll() 指定的滚动轴不包含滚动条, 也就是元素在滚动轴的方向不可滚动, 那么 timeline 的进度为 0%.

语法

scroll() 可以接受两个参数

  • 滚动元素: 滚动元素提供 scroll progress timeline. 可以取值
    • nearest: (默认值)设置 animation-timeline 元素最近的、具有滚动条的祖先元素.
    • root: 文档的根元素, 即 <html> 元素
    • self: 设置 animation-timeline 的元素自身
  • 滚动轴:
    • y: 垂直滚动轴
    • x: 水平滚动轴
    • block: (默认值)与滚动容器中行内文本方向垂直的轴. 对于从左到右书写的文字, 与 y 相同. 对于从上到下书写的文字, 与 x 相同.
    • inline: 与滚动容器中行内文本方向水平的轴. 对于从左到右书写的文字, 与 x 相同. 对于从上到下书写的文字, 与 y 相同.

这两个参数的书写顺序没有要求, 但是参数之间没有逗号, 这一点我一定要强调, 因为 translate 这个函数的参数就需要有逗号!!!

实例

正常举例

下面以背景渐变举例, 并且滚动容器就是元素自身.

@keyframes bg-color {
  from {
    background-color: lightpink;
  }
  to {
    background-color: lightskyblue;
  }
}
.box {
  width: 200px;
  height: 300px;
  border: 1px solid #bbb;
  overflow: auto;
  animation: bg-color linear;
  animation-timeline: scroll(self);
}

在这里插入图片描述

如果我们加上下面的代码, 改变文字书写方向, 从上到下, 从左到右

html { writing-mode: vertical-lr; }

在这里插入图片描述

最近滚动祖先?

来看一个例子, 这个例子出现了问题, 为什么动画没有效果呢? 📖注意这里我们使用了两个非 static 定位的元素.

<div class="relative">
  <div class="scroll">
    <div class="absolute"></div>
  </div>
</div>
.relative {
  position: relative;
}
.absolute {
  position: absolute;
  animation: bg-color linear;
  animation-timeline: scroll();
}
.scroll {
  height: 200px;
  overflow: auto;
}

在这里插入图片描述

为什么元素在滚动时背景没有变化呢? scroll() 不是寻找最近滚动祖先元素吗? 是的, 但是在寻找最近祖先元素时这个祖先元素必须可以影响其位置和大小. 因为元素是 absolute, 那么可以影响其位置和大小的祖先元素显然不是 .scroll 而是 .relative.

🤔️有没有方法可以就让提供 scroll progress timeline 的元素是 .scroll 呢? 有, 请各位客官看这里👉scroll-timeline👈

谢谢你看到这里😊

CSS scroll滚动动画是一种将动画效果应用于网页滚动条的技术。它可以使滚动条在滚动时产生动态效果,例如平滑的滚动、渐变颜色等。 要使用CSS scroll滚动动画,您可以使用以下技术: 1. 使用CSS的`animation`和`@keyframes`规则创建动画。您可以使用这些规则定义动画的持续时间、延迟、次数、速度曲线等参数。 2. 使用`scroll-behavior`属性。该属性可以设置滚动行为,使滚动条在滚动时产生动画效果。例如,您可以将`scroll-behavior`属性设置为`smooth`,以使滚动条平滑滚动。 3. 使用CSS的`transition`属性。该属性可以使元素在短时间内发生改变时产生过渡效果。您可以使用`transition`属性将滚动条的宽度、高度、颜色等属性设置为过渡效果,以使滚动条在滚动时产生动态变化。 下面是一个简单的示例,演示如何使用CSS scroll滚动动画: ```css /* 定义动画 */ @keyframes scroll-animation { 0% { transform: translateY(0); } 50% { transform: translateY(-20px); } 100% { transform: translateY(0); } } /* 设置滚动行为 */ html { scroll-behavior: smooth; } /* 应用动画滚动条 */ .container { overflow: auto; height: 200px; width: 200px; background-color: #f0f0f0; transition: all 1s ease; /* 添加过渡效果 */ } ``` 在上面的示例中,我们定义了一个名为`scroll-animation`的关键帧动画,它使容器中的内容在垂直方向上以平滑的方式移动。然后,我们将滚动行为设置为平滑,并将`.container`元素的`transition`属性设置为1秒的过渡效果。当容器内容滚动时,滚动条将平滑地移动并产生动画效果。您可以根据需要调整动画参数和选择器,以适应您的网页布局和设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值