CSS动画学习笔记

发布时间:2024-11-08 18:05:38

CSS动画学习笔记

CSS动画概述

CSS动画(CSS Animations)允许通过指定关键帧来创建复杂的动画效果。

与过渡的区别:

transition 需要用户交互触发,且只能定义起始与结束状态。 animation 支持自动播放动画,且可以自定义多个关键帧。

CSS动画语法

animation属性(简写形式)

.box {
    animation: fadeIn 2s ease-in-out infinite alternate;
}

animation的各个属性:

animation-name:定义关键帧动画的名称。 animation-duration:动画持续时间。 animation-timing-function:时间曲线(如ease, linear, ease-in-out)。 animation-delay:动画延迟时间。 animation-iteration-count:动画播放次数(如infinite无限循环)。 animation-direction:动画方向。 animation-fill-mode:定义动画前后的样式状态。

@keyframes关键帧

使用 @keyframes 定义动画关键帧:

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

关键帧百分比写法

@keyframes fadeIn {
    0% { opacity: 0; }
    50% { opacity: 0.5; }
    100% { opacity: 1; }
}

CSS动画属性详解

1. animation-duration

定义动画播放的时间。 单位:秒(s)或毫秒(ms)。

animation-duration: 3s;

2. animation-timing-function

控制动画速率。 可用值: ease(默认) linear ease-in ease-out ease-in-out

animation-timing-function: ease-in;

3. animation-delay

延迟动画的开始时间。

animation-delay: 2s;

4. animation-iteration-count

控制动画播放次数。 infinite 表示无限次播放。

animation-iteration-count: infinite;

5. animation-direction

控制动画播放方向。 可用值: normal(默认,正向播放) reverse(反向播放) alternate(奇数次正向,偶数次反向) alternate-reverse(奇数次反向,偶数次正向)

animation-direction: alternate;

6. animation-fill-mode

控制动画前后的样式状态。 可用值: none(默认) forwards(动画结束时保持最后状态) backwards(动画延迟前应用初始状态) both(结合forwards和backwards)

animation-fill-mode: both;

多个动画同时应用

可以使用逗号分隔多个动画。

.box {
    animation: fadeIn 2s ease-in-out, moveRight 3s ease-out;
}

@keyframes moveRight {
    from { transform: translateX(0); }
    to { transform: translateX(100px); }
}

CSS动画示例

旋转动画

.box {
    width: 100px;
    height: 100px;
    background: red;
    animation: spin 2s linear infinite;
}

@keyframes spin {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}

呼吸灯效果

.circle {
    width: 100px;
    height: 100px;
    background: blue;
    border-radius: 50%;
    animation: breathing 3s ease-in-out infinite;
}

@keyframes breathing {
    0% { opacity: 0.5; transform: scale(0.8); }
    50% { opacity: 1; transform: scale(1); }
    100% { opacity: 0.5; transform: scale(0.8); }
}

总结

CSS动画通过animation属性和@keyframes实现平滑动画效果。 可以通过animation-timing-function自定义动画速率。 支持多种动画方向、次数与延迟控制。