构成属性
此属性是以下 CSS 属性的简写:
语法
/* single keyword or length percentage value */
animation-range: normal; /* Equivalent to normal normal */
animation-range: 20%; /* Equivalent to 20% normal */
animation-range: 100px; /* Equivalent to 100px normal */
/* single named timeline range value */
animation-range: cover; /* Equivalent to cover 0% cover 100% */
animation-range: contain; /* Equivalent to contain 0% contain 100% */
animation-range: cover 20%; /* Equivalent to cover 20% cover 100% */
animation-range: contain 100px; /* Equivalent to contain 100px cover 100% */
/* two values for range start and end */
animation-range: normal 25%;
animation-range: 25% normal;
animation-range: 25% 50%;
animation-range: entry exit; /* Equivalent to entry 0% exit 100% */
animation-range: cover cover 200px; /* Equivalent to cover 0% cover 200px */
animation-range: entry 10% exit; /* Equivalent to entry 10% exit 100% */
animation-range: 10% exit 90%;
animation-range: entry 10% 90%;
animation-range 简写属性可以应用于容器元素,作为 <animation-range-start> 和 <animation-range-end> 值的组合。如果两个值都指定了,它们将按 <animation-range-start> 然后 <animation-range-end> 的顺序解释。
如上面的语法块中的注释所示,如果只提供一个值,有几种可能的解释:
- 如果该值是
<length-percentage>或normal,则<animation-range-start>将取该值,而<animation-range-end>将等于normal。 - 如果该值是一个已命名的时间轴范围,且后面没有
<length-percentage>,则范围将是该已命名时间轴范围的 0% 到 100%。 - 如果该值是一个已命名的时间轴范围,且后面跟着一个
<length-percentage>,则范围将从该已命名时间轴范围和指定的百分比开始,到该已命名时间轴范围的 100% 结束。
值
一个或两个值,表示 animation-range-start 和/或 animation-range-end。这些值可以是以下之一:
normal-
对于
animation-range-start,表示时间轴的开始;对于animation-range-end,表示时间轴的结束。这是默认值。 <length-percentage>-
从时间轴开始处计算的长度或百分比值。
<timeline-range-name>-
整个时间轴内的一个特定的已命名时间轴范围。可能的值有:
cover-
表示一个*已命名视图进度时间轴*(更多细节见 CSS 滚动驱动动画)的完整范围,从主体元素首次开始进入滚动端口的视图进度可见范围(0% 进度)到它完全离开该范围(100% 进度)的点。
contain-
表示一个*已命名视图进度时间轴*的范围,在此范围内,主体元素被滚动端口的视图进度可见范围完全包含,或完全包含该范围。
- 如果主体元素小于滚动端口,则范围从主体元素首次被滚动端口完全包含(0% 进度)的点,到它不再被滚动端口完全包含(100% 进度)的点。
- 如果主体元素大于滚动端口,则范围从主体元素首次完全覆盖滚动端口(0% 进度)的点,到它不再完全覆盖滚动端口(100% 进度)的点。
entry-
表示一个*已命名视图进度时间轴*的范围,从主体元素首次开始进入滚动端口(0% 进度),到它完全进入滚动端口(100%)的点。
exit-
表示一个*已命名视图进度时间轴*的范围,从主体元素首次开始退出滚动端口(0% 进度),到它完全退出滚动端口(100%)的点。
entry-crossing-
表示一个*已命名视图进度时间轴*的范围,从主体元素首次开始穿过滚动端口的起始边缘(0% 进度),到它完全穿过滚动端口的起始边缘(100%)的点。
exit-crossing-
表示一个*已命名视图进度时间轴*的范围,从主体元素首次开始穿过滚动端口的结束边缘(0% 进度),到它完全穿过滚动端口的结束边缘(100%)的点。
对于不包含
<length-percentage>的<timeline-range-name>值,如果它是animation-range-start值,则百分比默认为0%;如果它是animation-range-end值,则默认为100%。备注: 仅从上述描述很难想象这些值具体意味着什么。幸运的是,视图时间轴范围可视化工具以简单直观的方式准确地展示了它们的含义。
<timeline-range-name> <length-percentage>-
一个组合值,等于指定的已命名时间轴范围中从该时间轴范围起点算起的指定百分比或距离。
备注: 滚动端口(更多细节见滚动容器)中被称为视图进度可见范围的区域,是指*已命名视图进度时间轴*动画的主体元素被视为可见的区域。默认情况下,这是滚动端口的整个范围,但可以使用 view-timeline-inset 属性进行调整。
正式定义
| 初始值 | 作为简写中的每个属性
|
|---|---|
| 应用于 | 所有元素 |
| 继承性 | 否 |
| 百分比 | 如果指定了已命名时间轴范围,则相对于该范围;否则相对于整个时间轴。 |
| 计算值 | 作为简写中的每个属性
|
| 动画类型 | 作为简写中的每个属性
|
正式语法
animation-range =
[ <'animation-range-start'> <'animation-range-end'>? ]#
<animation-range-start> =
[ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]#
<animation-range-end> =
[ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]#
<length-percentage> =
<length> |
<percentage>
示例
视图时间轴范围可视化工具
请参阅视图时间轴范围可视化工具,以获取关于所有值类型含义的简单直观解释。
创建一个带范围的已命名视图进度时间轴
在类名为 animation 的主体元素上,使用 view-timeline 属性定义了一个名为 --subject-reveal 的视图进度时间轴。然后使用 animation-timeline: --subject-reveal; 将其设置为同一元素的时间轴。结果是,当文档被滚动时,主体元素在向上移动的过程中会播放动画。
还设置了一个 animation-range 声明,使动画比预期晚开始,并提前结束。
HTML
示例的 HTML 如下所示。
<div class="content">
<h1>Content</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Risus quis varius quam
quisque id. Et ligula ullamcorper malesuada proin libero nunc consequat
interdum varius. Elit ullamcorper dignissim cras tincidunt lobortis feugiat
vivamus at augue.
</p>
<p>
Dolor sed viverra ipsum nunc aliquet. Sed sed risus pretium quam vulputate
dignissim. Tortor aliquam nulla facilisi cras. A erat nam at lectus urna
duis convallis convallis. Nibh ipsum consequat nisl vel pretium lectus.
Sagittis aliquam malesuada bibendum arcu vitae elementum. Malesuada bibendum
arcu vitae elementum curabitur vitae nunc sed velit.
</p>
<div class="subject animation"></div>
<p>
Adipiscing enim eu turpis egestas pretium aenean pharetra magna ac. Arcu
cursus vitae congue mauris rhoncus aenean vel. Sit amet cursus sit amet
dictum. Augue neque gravida in fermentum et. Gravida rutrum quisque non
tellus orci ac auctor augue mauris. Risus quis varius quam quisque id diam
vel quam elementum. Nibh praesent tristique magna sit amet purus gravida
quis. Duis ultricies lacus sed turpis tincidunt id aliquet. In egestas erat
imperdiet sed euismod nisi. Eget egestas purus viverra accumsan in nisl nisi
scelerisque. Netus et malesuada fames ac.
</p>
</div>
CSS
subject 元素及其包含的 content 元素仅应用了最少的样式,文本内容则设置了一些基本的字体样式。
.subject {
width: 300px;
height: 200px;
margin: 0 auto;
background-color: deeppink;
}
.content {
width: 75%;
max-width: 800px;
margin: 0 auto;
}
p,
h1 {
font-family: "Helvetica", "Arial", sans-serif;
}
h1 {
font-size: 3rem;
}
p {
font-size: 1.5rem;
line-height: 1.5;
}
类名为 subject 的 <div> 也被赋予了 animation 类——这里设置了 view-timeline 来定义一个已命名视图进度时间轴。它还被赋予了同名的 animation-timeline,以声明它将是随着视图进度时间轴推进而播放动画的元素。我们还为它设置了一个 animation-range 声明,使动画比预期晚开始,并提前结束。
最后,在元素上指定了一个动画,该动画使其不透明度和缩放发生变化,从而在它向上移动滚动条时淡入并变大。
.animation {
view-timeline: --subject-reveal block;
animation-timeline: --subject-reveal;
animation-name: appear;
animation-range: entry 10% contain 25%;
animation-fill-mode: both;
animation-duration: 1ms; /* Firefox requires this to apply the animation */
}
@keyframes appear {
from {
opacity: 0;
transform: scaleX(0);
}
to {
opacity: 1;
transform: scaleX(1);
}
}
结果
滚动以查看主体元素的动画效果。
规范
| 规范 |
|---|
| 滚动驱动动画 # animation-range |
浏览器兼容性
加载中…