CSS @keyframes 规则

CSS @keyframes 语法

在 CSS 中,@keyframes 规则用于定义动画的各个关键帧。

语法:

@keyframes 动画名 {
    0% {}
    ……
    100% {}
}

说明:

0% 表示动画的开始,100% 表示动画的结束,我们一般需要定义 0% 和 100%。不过在一个 @keyframes 规则中,可以由多个百分比组成,每一个百分比都可以定义自身的 CSS 样式,从而形成一系列的动画效果。

在使用 @keyframes 规则时,如果仅仅只有 0% 和 100% 这两个百分比的话,此时 0% 和 100% 可以使用关键字 from 和 to 来代替,其中 0% 对应 from,100% 对应 to。下面 2 种方式是等价的:

/* 方式1 */
@keyframes mycolor {
  0% { color:red; }
  100% {color:green; }
}

/* 方式2 */
@keyframes mycolor {
  from { color:red; }
  to {color:green; }
}

注意:

  • @keyframes 规则仅仅是定义了动画,它本身并不会触发动画。我们需要通过 animation-name 属性将这个动画应用到元素上,并结合 animation-durationanimation-timing-function 等属性来控制动画的播放。
  • 如果 0% 和 100% 的关键帧没有明确定义,浏览器会使用元素的计算样式作为默认的起始和结束状态。不过,为了清晰和可控,建议总是定义 0% 和 100%。

CSS @keyframes 摘要

属于 CSS 动画
使用频率
是否继承
默认值
兼容性 查看
官方文档 查看
MDN 查看

CSS @keyframes 示例

接下来,我们通过一个简单的例子来讲解一下 @keyframes 属性是如何使用的。

示例:@keyframes 基本用法

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        /*定义动画*/
        @keyframes mycolor
        {
            0% { background-color: red; }
            30% { background-color: blue; }
            60% { background-color: yellow; }
            100% { background-color: green; }
        }

        div {
            width: 100px;
            height: 100px;
            border-radius: 50px;
            background-color: red;
        }
        div:hover {
            /* 调用动画 */
            animation:mycolor 5s linear;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

页面效果如下图所示。

@keyframes 示例

分析:

在这个例子中,我们使用 @keyframes 规则定义了一个名为 “mycolor” 的动画。在这个动画中,元素开始时的背景颜色是红色,在 0% 到 30% 之间背景颜色从红色变为蓝色,然后在 30% 到 60% 之间背景颜色从蓝色变为黄色,最后在 60% 到 100% 之间背景颜色从黄色变为绿色。动画执行完毕,背景颜色会回归到红色(初始值)。

初学的小伙伴肯定会有这样的疑问:“这些百分比究竟是什么意思啊?是相对什么来说的呢?” 哪还能有什么呢,闭着眼都知道是相对于 “持续时间”!像上面这个例子中,我们定义持续时间为 5s,则 0% 指的是 0s 时,30% 指的是 1.5s 时,60% 指的是 3s 时,而 100% 指的是 5s 时,如下图所示。

@keyframes 时间轴

我们可以使用 @keyframes 规则定义动画,不过这仅仅是定义而已,动画并不会自动执行。因此我们还需要使用 animation 属性来 “调用动画”,这样动画才会生效。其实动画的定义和调用,跟 JavaScript 函数 的定义和调用是一样的道理,我们稍微对比一下就很好理解了。

上一篇: @media

下一篇: @font-face

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号