CSS 动画 第2级

W3C 工作草案,

关于此文档的更多详细信息
此版本:
https://www.w3.org/TR/2023/WD-css-animations-2-20230602/
最新发布版本:
https://www.w3.org/TR/css-animations-2/
编辑草案:
https://drafts.csswg.org/css-animations-2/
历史:
https://www.w3.org/standards/history/css-animations-2
反馈:
CSSWG 问题 仓库
规范中的内联问题
编辑:
L. David Baron (谷歌)
(受邀专家)
建议编辑此规范:
GitHub 编辑器

摘要

该 CSS 模块描述了作者如何通过使用关键帧来随时间动画化 CSS 属性的值。这些关键帧动画的行为可以通过指定其持续时间、重复次数和重复行为来控制。

CSS 是一种用于描述结构化文档(如 HTML 和 XML)在屏幕、纸张等上的渲染语言。

本文档的状态

本节描述了本文档在发布时的状态。当前 W3C 出版物的列表及本技术报告的最新修订版可以在 W3C 技术报告索引 https://www.w3.org/TR/ 中找到。

本文档由 CSS 工作组 作为 工作草案 发布,使用了 推荐轨道。 作为工作草案发布并不意味着得到了 W3C 及其成员的认可。

这是一份草案文档,可能随时更新、替换或被其他文档废弃。引用此文档为进展中的工作是不适当的。

请通过 在 GitHub 上提交问题(首选)提供反馈,标题中包括规范代码“css-animations”,如: “[css-animations] …评论摘要…”。 所有问题和评论都被 存档。 或者,可以将反馈发送到公共邮件列表 www-style@w3.org已存档)。

本文档受 2021年11月2日 W3C 过程文档 管辖。

本文档由根据 W3C 专利政策 运营的小组制作。 W3C 维护了一个 公开专利披露列表,其中列出了与该小组交付成果相关的任何专利披露; 该页面还包含披露专利的说明。 任何知晓专利的个人,如果相信其包含 必要权利要求,必须根据 W3C 专利政策第6节 披露该信息。

1. Delta 规范

这是一个 Delta 规范,意味着它目前只包含与 CSS 动画第 1 级 [CSS3-ANIMATIONS] 的差异。 一旦第 1 级规范更接近完成,它将与此处的补充合并为完整的第 2 级规范。

2. 动画

本规范中定义的任何动画属性的更改都会导致相应的 CSSAnimation 对象及其关联对象 根据这些属性与 § 3 组装关键帧 中定义的 Web 动画概念之间的对应关系进行更新。

但是,如果作者使用 Web 动画编程接口修改动画,则编程接口的更改优先,具体如下:

注意,上面的规则中引用成功调用是必要的,以确保当这些方法中的任何一个抛出异常时,覆盖行为不会被应用。

2.1. 拥有元素

动画的 拥有元素 是指应用了生成动画的 animation-name 属性的元素或伪元素。

如果元素的 display 属性设置为 none,并且其 display 值在忽略过渡和动画的 层叠源 时会计算为 none, 则终止该 拥有元素 的正在运行的动画。 如果一个元素的 displaynone,并且其 display 值在忽略过渡和动画的 层叠源 时计算为 none, 将 display 更新为非 none 的值将启动所有由 animation-name 属性应用于该元素的动画。

注意:实际上,这意味着除非样式在没有动画效果的情况下也计算为 none,否则动画到 display 值为 none 的情况不会终止正在运行的动画。

如果使用本规范定义的标记生成的动画后来通过更新 animation-name 属性的计算值与该动画的 拥有元素 解除关联,则动画将与其 拥有元素 解除关联(即,从那时起,它不再有 拥有元素)。

在下面的示例中,animation 的初始 拥有元素elemanimation 通过更新 elemanimation-name 属性的计算值与 element 解除关联。

elem.style.animation = 'spin 1s';
let animation = elem.getAnimations()[0]; // animation’s owning element is elem
elem.style.animation = ''; // animation no longer has an owning element

请注意,虽然 拥有元素 通常等于动画的 目标元素 及其 关联效果, 但这并不总是如此。 下面的示例演示了这些元素可能不同的一些情况。

elem.style.animation = 'move 1s';
let animation = elem.getAnimations()[0];
// animation.effect.target == elem == animation’s owning element

animation.effect.target = elem2;
// animation.effect.target == elem2 != animation’s owning element

animation.effect = null;
// animation.effect?.target is undefined != animation’s owning element

2.2. 动画复合顺序

根据本规范定义的标记生成的 动画 具有 ‘CSS 动画’ 的 动画类

具有 拥有元素 的 CSS 动画的复合顺序 晚于 CSS 过渡,但 早于 没有特定 动画类 的动画。

在具有 拥有元素 的 CSS 动画集中,两个动画 AB 的复合顺序(从前到后)如下:

  1. 如果 AB拥有元素 不同,则按它们相应的 拥有元素树顺序 排序。 对于伪元素,排序顺序如下:

    • 元素

    • ::marker

    • ::before

    • 其他未特别提及的伪元素,按构成每个选择器的 Unicode 代码点升序排序

    • ::after

    • 元素子项

  2. 否则,基于它们在(公共)animation-name 属性中的位置对 AB 进行排序。

没有 拥有元素 的 CSS 动画的复合顺序基于它们在 全局动画列表 中的位置。

这与为过渡定义的行为不同。我们可能应该首先对过渡进行排序,然后是动画,然后使用全局动画列表。原因是当开发工具等保留孤立的动画和过渡以便重放时,它们应该大致保持相同的复合顺序。

使用本规范定义的标记生成的 CSS 动画在创建时 不会 添加到 全局动画列表。 相反,这些动画会在它们与 拥有元素 解除关联后首次从 空闲播放状态 转移时附加到 全局动画列表。 与其 拥有元素 解除关联但仍处于 空闲 的 CSS 动画没有定义的复合顺序。

注意,这种行为依赖于动画与其 拥有元素 解除关联总是会导致它进入(或保持)空闲播放状态

3. 组装关键帧

3.1. 声明关键帧:@keyframes 规则

参见 CSS 动画 1 § 3 关键帧

3.2. 处理关键帧

对于目标(伪)元素 elementanimation-* 属性的 协调值列表 中定义的第 N 个动画效果,生成其关联的 关键帧,如下所示:

  1. 设置默认值:

    • default timing functionelement计算值 对应的 animation-timing-function

    • default compositeelement计算值 对应的 animation-composition

    • keyframes 为一个空的 关键帧 对象序列, 每个对象都包含 关键帧偏移关键帧时序函数关键帧合成关键帧值

    • animated properties 为 CSS 属性名称的空集。

  2. 收集声明的关键帧:

    1. 在文档顺序中找到最后一个 @keyframes 规则,其 <keyframes-name> 与对应的 animation-namename 匹配。

      如果没有与 name 匹配的 @keyframes 规则 (或 namenone), 则中止此过程。 在这种情况下,不生成动画,并取消任何与 name 匹配的现有动画。

    2. 将所有具有相同 指定<keyframe-selector>关键帧块 分组(将 from 视为 0%,将 to 视为 100%), 最后声明的 animation-timing-function计算值(如果没有这样的声明,则默认为 default timing function), 和最后声明的 animation-composition计算值(如果没有这样的声明,则默认为 default composite)。

    3. 对于每组匹配的 关键帧块,按其排序顺序中的最早 关键帧块 排序:

      1. 将其所有 声明块 级联在一起,这样对于每个 CSS 属性 (“不可动画的”属性必须忽略),所有 关键帧块 中最后一个声明具有优先级。[CSS-CASCADE-4]

        注意: 层叠将 会将 简写属性 展开为它们的 子属性,并根据 element计算 书写模式 将每个 逻辑属性组 中对应的属性对组合在一起。

      2. 将一个新的空 关键帧 keyframe 附加到 keyframes,其中包含该组的 关键帧偏移关键帧时序函数关键帧合成。 将此级联产生的 声明值 集合作为其 关键帧值

      3. 将添加到 关键帧属性 的每个属性名称添加到 animated properties

  3. 生成初始和最终帧:

    1. 找到或创建 initial keyframe,一个具有 0% 关键帧偏移默认时序函数 作为其 关键帧时序函数默认合成 作为其 关键帧合成关键帧

    2. 对于 animated properties 中的任何属性,如果它不存在于偏移为 0% 的关键帧或 使用关键帧顺序 中较早的位置, 则将该属性在 element 上的 计算值 添加到 initial keyframe关键帧值 中。

    3. 如果 initial keyframe关键帧值 不是空的,则将 initial keyframe 添加到 keyframes 的开头。

    4. final keyframe 重复此过程,使用 100% 偏移,考虑在 使用关键帧顺序 中较晚的位置,并将其附加到 keyframes 中。

  4. 排序帧:

    • 指定顺序 是根据上述步骤得出的 keyframes 的顺序, 即文档顺序,重复的关键帧折叠到最早的位置。

    • 计算顺序 是由 getKeyframes() 返回的顺序,按其 关键帧偏移 稳定排序。

    • 使用顺序 是将 keyframes 附加到动画效果时间轴上后按从早到晚的顺序排列的顺序,按 计算顺序 打破平局。

    本规范引入的任何关于排序计算关键帧的具体要求应集成到 Web 动画 § 5.3.3 计算计算的关键帧 中。 本规范引入的任何关于使用关键帧的具体要求应集成到 Web 动画 § 5.3.4 关键帧效果的效果值 中。 上述关键帧集之间区别的描述应移至信息性说明中。

    注意:虽然 计算顺序 对具有 <百分比> 偏移的关键帧进行排序, 但它会保持 <时间线范围名称> 指定的关键帧按其 指定顺序,即使它们在 使用顺序 中排得更晚。

4. 声明动画

CSS 动画通过使用 animation-* 属性将关键帧绑定到元素来定义。 这些值为列表的属性,都是 长手 属性,属于 animation简写属性, 形成了一个 协调列表属性组,其中 animation-name协调列表基本属性,列表中的每一项定义了单个动画效果的属性。

参见 CSS Values 4 § A 协调列表值属性 以了解各个 animation-* 属性值如何协调。

4.1. animation-duration 属性

名称: animation-duration
值: [ auto | <time [0s,∞]> ]#
初始值: auto
应用于: 所有元素
是否继承:
百分比: 不适用
计算值: 列表,每项要么是时间,要么是关键字 auto
规范顺序: 根据语法
动画类型: 不可动画

animation-duration 属性指定了动画的 迭代持续时间 及其关联的 动画效果

auto
对于时间驱动的动画,相当于 0s

对于 滚动驱动的动画,相当于考虑了 animation-rangeanimation-delayanimation-iteration-count 的时间线所需的持续时间。 参见 滚动驱动动画 § 4.1 有限时间线计算

<time [0s,∞]>
对于时间驱动的动画,指定动画完成一个循环所需的时间。 负 <time> 是无效的。

如果 <time>0s,如初始值,则动画的关键帧没有效果, 但动画本身仍会瞬时发生。 具体来说,开始和结束事件将被触发; 如果 animation-fill-mode 设置为 backwardsboth, 动画的第一帧(由 animation-direction 定义)将在 animation-delay 期间显示。 在 animation-delay 之后,动画的最后一帧(由 animation-direction 定义)将在 animation-fill-mode 设置为 forwardsboth 时显示。 如果 animation-fill-mode 设置为 none,则动画将没有可见效果。

对于 滚动驱动的动画,视为 auto

4.2. animation-timing-function 属性

animation-timing-function 用于确定应用于每个 关键帧时序函数,如 § 3 组装关键帧 中所定义。

4.3. animation-iteration-count 属性

animation-iteration-count 属性指定了动画的 迭代计数 及其关联的 动画效果

4.4. animation-direction 属性

animation-direction 属性指定了动画的 播放方向 及其关联的 动画效果

4.5. animation-play-state 属性

animation-play-state 用于暂停或播放动画。

如果在任何时间点,包括动画首次生成时,动画对应的 animation-play-state 的解析值是新的 running, 实现必须运行相关程序以 播放动画,并将 自动倒带标志 设置为 false。

如果在任何时间点,包括动画首次生成时,动画对应的 animation-play-state 的解析值是新的 paused, 实现必须运行相关程序以 暂停动画

上述要求不适用于通过 Web 动画 API 覆盖动画播放状态的情况,如 § 2 动画 中所述。

4.6. animation-delay 属性

animation-delay 属性指定了动画的 启动延迟 及其关联的 动画效果

4.7. animation-fill-mode 属性

animation-fill-mode 属性指定了动画的 填充模式 及其关联的 动画效果

4.8. animation-composition 属性

animation-composition 属性定义了多个动画同时影响同一属性时使用的 合成操作

名称: animation-composition
值: <single-animation-composition>#
初始值: replace
应用于: 所有元素
是否继承:
百分比: 不适用
计算值: 列表,每项为指定的关键字
规范顺序: 根据语法
动画类型: 不可动画

<single-animation-composition> = replace | add | accumulate

animation-composition 的值具有 Web Animations 中为对应的 合成操作 定义的含义,详见 [WEB-ANIMATIONS]

在关键帧中指定时,animation-composition 定义了每个属性在该关键帧中使用的合成操作,直到下一个指定每个属性的关键帧。

例如,以下样式表定义了两个不同的动画,分别针对 scale 属性。
@keyframes heartbeat {
  from {
    scale: 1;
    animation-timing-function: ease-out;
  }
  30% {
    scale: 1.3;
  }
}
.heartbeat {
  animation: heartbeat 0.3s 2s infinite;
}

@keyframes throb {
  50% {
    scale: 1.8;
  }
}
.icon:mouseover {
  animation: throb 0.4s add;
}

如果将这两个动画应用于同一元素,通常只会应用一个动画,但通过在第二个动画中指定 add 作为 animation-composition,两个动画的结果将被合并。

由于 CSS 过渡 [CSS3-TRANSITIONS] 的合成顺序较低,可以使用 animation-composition 将 CSS 动画与底层的过渡效果结合,如以下示例所示。

.icon {
  filter: blur(20px);
  transition: filter 0.5s;
}
.icon:hover {
  filter: blur(0px);
  animation: brightness-pulse 3s infinite add;
}

@keyframes brightness-pulse {
  0% {
    scale: 1.1;
    filter: brightness(130%);
  }
  10% {
    scale: 1;
    filter: brightness(100%);
  }
}

创建这些示例的图片并验证其是否合理。

4.9. animation-timeline 属性

animation-timeline 属性定义了用于动画的 时间轴

注意: 此规范未引入指定动画时间轴的语法,而是由其他规范(例如滚动关联动画 [SCROLL-ANIMATIONS])来规定。

名称: animation-timeline
值: <single-animation-timeline>#
初始值: auto
应用于: 所有元素
是否继承:
百分比: 不适用
计算值: 列表,每项为大小写敏感的 css 标识符 或关键字 noneauto
规范顺序: 按照语法
动画类型: 不可动画
<single-animation-timeline> = auto | none | <custom-ident> | <scroll()> | <view()>

animation-timeline 属性与 animation-nameanimation-duration 类似,可以有一个或多个值,每个值为元素上的相应 动画 提供附加行为,时间轴与动画的匹配如此处所述。

每个值的类型为 <single-animation-timeline>,其可能的值具有以下效果:

auto

动画的 时间轴DocumentTimeline,更具体地说,是 默认文档时间轴

none

动画未与 时间轴关联。

<custom-ident>

如果在此元素上有命名的 滚动进度时间轴视图进度时间轴,则使用引用的时间轴,如 Scroll-driven Animations § 4.2 命名时间轴范围和查找 中定义的那样。

否则,动画未与 时间轴关联。

<scroll()>

使用给定 scroll() 函数指示的 滚动进度时间轴。参见 Scroll-driven Animations § 2.2.1 滚动() 表示法

<view()>

使用给定 view() 函数指示的 视图进度时间轴。参见 Scroll-driven Animations § 3.3.1 视图() 表示法

改进 animation-nameanimation-timeline 未指定时用于选择时间轴的功能。允许使用 animation-name 选择时间轴,使大多数常见动画能够只使用一个名称同时为关键帧和时间轴提供服务,简化操作和提高可用性。animation-timeline 属性为作者提供了额外的控制权,可以在必要时独立选择关键帧和时间轴。

当多个 animation-* 属性同时设置时,首先更新 animation-timeline,因此例如对 animation-play-state 的更改适用于 animation-timeline 中同时应用的时间轴。

4.10. animation 简写属性

animation 简写属性的语法如下:

<single-animation> = <'animation-duration'> || <easing-function> || <'animation-delay'> || <single-animation-iteration-count> || <single-animation-direction> || <single-animation-fill-mode> || <single-animation-play-state> || [ none | <keyframes-name> ] || <single-animation-timeline>

5. 动画事件

5.1. 事件分发

注意: 这里的事件分发描述比 CSS 动画 Level 1 的描述更为一般,原因是它需要考虑通过 Web Animations API [WEB-ANIMATIONS] 进行动画搜索或反转的可能性。

CSS 动画事件的 目标 是动画的 拥有元素。如果没有 拥有元素,则不会分发任何 CSS 动画事件(尽管在相应的 CSSAnimation 对象上仍然分发 Web 动画中定义的 动画播放事件)。

为了确定要分发哪些事件,使用 Web Animations 模型中定义的阶段。这些定义适用于 动画效果,然而,为了分发事件,我们认为 CSS 动画与其 关联效果 处于相同的阶段。例如,如果 CSS 动画的 关联效果 处于 before 阶段,则该动画也处于 before 阶段。

没有 关联效果 的 CSS 动画,如果其 当前时间未解析 的,则认为其处于 空闲阶段;如果当前时间小于零,则处于 before 阶段;否则处于 after 阶段

同样地,随后提到的 开始延迟活动时长当前迭代迭代开始迭代时长,都应理解为指动画的 关联效果 的相应属性。

为了计算每个事件的 elapsedTime,使用以下定义:

每次建立一个新的 动画帧 并且动画没有 待处理播放任务待处理暂停任务 时,将通过比较动画在建立新 动画帧 之前和之后的阶段来确定要分发的事件:

变化 分发的事件 已消耗时间(毫秒)
空闲之前活动 animationstart 间隔开始
空闲之前之后 ٭ animationstart 间隔开始
animationend 间隔结束
活动之前 animationend 间隔开始
活动活动 动画的当前迭代自上次动画帧以来已发生变化 animationiteration (见下文)
活动之后 animationend 间隔结束
之后活动 animationstart 间隔结束
之后之前 ٭ animationstart 间隔结束
animationend 间隔开始
空闲 之后空闲 animationcancel 动画取消时的活动时间,使用 填充模式计算。

٭ 当状态更改时列出多个事件时,所有事件都会按列出的顺序立即连续分发。

† 对于 animationiteration 事件,已消耗时间 的定义如下:

  1. previous current iteration 为上一个动画帧的 当前迭代

  2. 如果 previous current iteration 大于 当前迭代,则将 iteration boundary 设置为 当前迭代 + 1,否则将其设置为 当前迭代

  3. 已消耗时间 的计算结果为: (iteration boundary - 迭代起点) × 迭代时长)

由于上表和上述步骤中定义的 已消耗时间 以毫秒表示,必须将其除以1,000以生成以秒为单位的值,然后再将其赋值给 elapsedTime 的成员,AnimationEvent

6. DOM 接口

6.1. CSSAnimation 接口

[Exposed=Window]
interface CSSAnimation : Animation {
  readonly attribute CSSOMString animationName;
};
animationName类型为 CSSOMString,只读

用于查找定义动画时匹配的关键帧规则的键。这个值是生成此对象的animation-name 属性的值。

6.2. 待定样式更改的要求

各种操作可能会影响元素上属性的计算值。用户代理可以作为一种优化手段,将重新计算这些值的操作推迟到必要时再进行。然而,所有在此规范中定义的编程接口中包含的操作,以及 Web Animations 中定义的那些操作[WEB-ANIMATIONS],如果可能返回对象或由此规范定义的动画状态,则必须确保其结果与完全处理这些待定的计算值更改一致。

例如,在以下代码片段中,当 elem 的指定样式最初更新时,用户代理可能会推迟重新计算 animation 属性的计算值。

然而,getAnimations() 方法在 elem 上被调用时,根据 Web Animations 的定义,可以返回 CSSAnimation 对象,如本规范定义。因此,根据本节的要求,用户代理必须在返回结果之前计算 elemanimation 属性的更新值并创建请求的 CSSAnimation 对象。

elem.style.animation = 'fadeOut 1s';
elem.getAnimations()[0].pause();

同样,读取 playState 可能也取决于待处理的样式更改。

elem.style.animation = 'fadeOut 1s paused';
const anim = elem.getAnimations()[0];
elem.style.animationPlayState = 'running';
console.log(anim.playState); // 应该是 'running'。

7. 隐私考虑

本规范尚未报告任何隐私问题。

8. 安全考虑

本规范尚未报告任何安全问题。

9. 变更

9.1. 近期变更

2023 年 3 月 2 日工作草案 以来的变更包括:

9.2. 自 CSS Animations, Level 1 以来的变更

一致性

文档约定

一致性要求通过描述性断言和 RFC 2119 术语的结合来表达。关键字“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“MAY”和“OPTIONAL”在本规范的规范部分中应按照 RFC 2119 的描述进行解释。然而,为了可读性,本规范中这些词不会全部以大写字母出现。

本规范的所有文本都是规范性的,除非明确标记为非规范性的部分、示例和注释。[RFC2119]

本规范中的示例以“例如”开头,或用 class="example" 将其与规范性文本分开,如下所示:

这是一个说明性的示例。

信息性注释以“注释”开头,并使用 class="note" 将其与规范性文本分开,如下所示:

注释,这是一个信息性注释。

告示是具有规范性的部分,样式上旨在引起特别注意,并使用 <strong class="advisement"> 与其他规范性文本分开,如下所示:用户代理必须提供无障碍的替代方案。

一致性类别

本规范的一致性定义为三个一致性类别:

样式表
一个CSS 样式表
渲染器
一个用户代理,它解释样式表的语义并渲染使用它们的文档。
创作工具
一个用户代理,用于编写样式表。

如果样式表中使用的所有语法符合本模块中定义的通用 CSS 语法和各个功能的语法,则该样式表符合本规范。

如果渲染器除了根据适当的规范解释样式表外,还能够通过正确解析支持本规范中定义的所有功能并相应地渲染文档,则该渲染器符合本规范。然而,由于设备限制导致无法正确渲染文档的用户代理并不被视为不符合规范。(例如,用户代理不需要在单色显示器上渲染颜色。)

如果创作工具编写的样式表在语法上符合通用 CSS 语法和本模块中每个功能的语法,并符合本模块中描述的样式表的所有其他一致性要求,则该创作工具符合本规范。

部分实现

为了使作者能够利用向前兼容的解析规则来指定回退值,CSS 渲染器必须将任何没有可用支持级别的 at-rule、属性、属性值、关键字以及其他语法结构视为无效(并根据需要忽略)。特别是,用户代理不得在单个多值属性声明中选择性地忽略不支持的组件值而只保留支持的值:如果任何值被认为无效(因为不支持的值必须被视为无效),CSS 要求整个声明被忽略。

不稳定和专有功能的实现

为了避免与未来稳定的 CSS 功能发生冲突,CSS 工作组建议遵循最佳实践,用于实现不稳定功能和专有扩展功能。

非实验性实现

一旦规范达到候选推荐标准(CR)阶段,可以进行非实验性实现,并且实现者应当发布无前缀的实现,前提是他们能够证明该 CR 级别的功能根据规范正确实现。

为了建立并维护 CSS 在不同实现中的互操作性,CSS 工作组请求非实验性的 CSS 渲染器在发布无前缀实现的任何 CSS 功能之前,向 W3C 提交实现报告(如有必要,还包括用于该实现报告的测试用例)。提交给 W3C 的测试用例将由 CSS 工作组进行审查和修正。

有关提交测试用例和实现报告的更多信息,请访问 CSS 工作组的网站https://www.w3.org/Style/CSS/Test/。问题应发送至public-css-testsuite@w3.org邮件列表。

索引

本规范定义的术语

引用中定义的术语

参考文献

规范性引用

[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS 层叠和继承,第 5 级. 2022年1月13日. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CASCADE-6]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS 层叠和继承,第 6 级. 2023年3月21日. WD. URL: https://www.w3.org/TR/css-cascade-6/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSS 显示模块,第 3 级. 2023年3月30日. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-EASING-1]
Brian Birtles; Dean Jackson; Matt Rakow. CSS 缓动函数,第 1 级. 2023年2月13日. CR. URL: https://www.w3.org/TR/css-easing-1/
[CSS-PAGE-FLOATS-3]
Johannes Wilm. CSS 页面浮动,第 3 级. 2015年9月15日. WD. URL: https://www.w3.org/TR/css-page-floats-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 值和单位模块,第 4 级. 2023年4月6日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS21]
Bert Bos; 等. 层叠样式表,第 2 级,修订版 (CSS 2.1) 规范. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS21/
[CSS3-ANIMATIONS]
David Baron; 等. CSS 动画,第 1 级. 2023年3月2日. WD. URL: https://www.w3.org/TR/css-animations-1/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS 对象模型 (CSSOM). 2021年8月26日. WD. URL: https://www.w3.org/TR/cssom-1/
[DOM]
Anne van Kesteren. DOM 标准. 现行标准. URL: https://dom.spec.whatwg.org/
[RFC2119]
S. Bradner. RFC 中用于表示需求级别的关键字. 1997年3月. 最佳现行做法. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SCROLL-ANIMATIONS-1]
Brian Birtles; 等. 滚动驱动的动画. 2023年4月28日. WD. URL: https://www.w3.org/TR/scroll-animations-1/
[WEB-ANIMATIONS]
Brian Birtles; 等. Web 动画. 2022年9月8日. WD. URL: https://www.w3.org/TR/web-animations-1/
[WEB-ANIMATIONS-2]
Brian Birtles; Robert Flack. Web 动画,第 2 级. 2023年2月21日. WD. URL: https://www.w3.org/TR/web-animations-2/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 标准. 现行标准. URL: https://webidl.spec.whatwg.org/

参考性引用

[CSS-CASCADE-4]
Elika Etemad; Tab Atkins Jr.. CSS 层叠和继承,第 4 级. 2022年1月13日. CR. URL: https://www.w3.org/TR/css-cascade-4/
[CSS-LOGICAL-1]
Rossen Atanassov; Elika Etemad. CSS 逻辑属性和值,第 1 级. 2018年8月27日. WD. URL: https://www.w3.org/TR/css-logical-1/
[CSS-MASKING-1]
Dirk Schulze; Brian Birtles; Tab Atkins Jr.. CSS 遮罩模块,第 1 级. 2021年8月5日. CR. URL: https://www.w3.org/TR/css-masking-1/
[CSS-TRANSFORMS-2]
Tab Atkins Jr.; 等. CSS 变换模块,第 2 级. 2021年11月9日. WD. URL: https://www.w3.org/TR/css-transforms-2/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS 书写模式,第 4 级. 2019年7月30日. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS3-TRANSITIONS]
David Baron; 等. CSS 过渡效果. 2018年10月11日. WD. URL: https://www.w3.org/TR/css-transitions-1/
[SCROLL-ANIMATIONS]
滚动关联的动画. cg-draft. URL: https://wicg.github.io/scroll-animations/

属性索引

名称 初始值 适用对象 继承性 百分比 动画类型 规范顺序 计算值
animation-composition <single-animation-composition># replace 所有元素 N/A 不可动画 按语法 列表,每个项目为指定的关键字
animation-duration [ auto | <time [0s,∞]> ]# auto 所有元素 N/A 不可动画 按语法 列表,每个项目为时间或关键词 auto
animation-timeline <single-animation-timeline># auto 所有元素 N/A 不可动画 按语法 列表,每个项目为区分大小写的 css 标识符或关键词 none、auto。

IDL 索引

[Exposed=Window]
interface CSSAnimation : Animation {
  readonly attribute CSSOMString animationName;
};

问题索引

这与为过渡定义的行为不同。我们可能应该先对过渡进行排序,然后是动画,然后使用全局动画列表。原因是当开发者工具等保留孤立的动画和过渡以便重放时,它们应该保持大致相同的合成顺序。
本规范引入的对计算关键帧排序的任何具体要求应整合到Web Animations § 5.3.3 计算计算的关键帧中。本规范引入的对使用关键帧的任何具体要求应整合到Web Animations § 5.3.4 关键帧动画效果的效果值中。上述对这些关键帧集之间区别的描述应移至一个说明性注释中。
创建这些示例的图片并验证它们是否合理。
使得更容易使用animation-name选择时间轴,当未指定animation-timeline时。允许使用animation-name选择时间轴,使得大多数常见动画可以同时使用一个名称来为它们的关键帧和时间轴命名,这既简单又符合人体工程学。animation-timeline属性为作者提供了独立选择关键帧和时间轴的额外控制,如果有必要的话。