CSS - @Keyframes

一、@keyframes定义

@keyframes是 CSS 中的一个规则,用于创建动画。它允许你定义动画的各个阶段,也就是关键帧。通过指定不同的关键帧,你可以控制元素在动画过程中的样式变化。

二、语法结构

基本语法如下:

@keyframes animation - name {
  from {
    /* 动画开始时的样式 */
  }
  to {
    /* 动画结束时的样式 */
  }
}
  - 这里`animation - name`是自定义的动画名称,`from`代表动画的起始状态,`to`代表动画的结束状态。你也可以使用百分比来更精细地定义关键帧,例如:
     - ```css
       @keyframes slide - in {
         0% {
           transform: translateX(-100%);
         }
         50% {
           transform: translateX(50%);
         }
         100% {
           transform: translateX(0);
         }
       }

在 这个例子中,slide - in动画有三个关键帧,分别在动画的 0%(开始)、50%(中间)和 100%(结束)阶段定义了元素的transform属性的变化。

三、与动画属性配合使用

定义号@keyframes动画后,需要将其应用到元素上。这可以通过animation属性来实现。例如:

div {
  animation: slide - in 3s ease - in - out;
}

 这里animation属性的值包括动画名称(slide-in)、动画持续时间(3s)和动画的时间函数   (ease - in - out)

### 使用 `@keyframes` 实现 CSS3 动画 #### 定义关键帧 为了创建动画效果,首先需要定义一组关键帧。这些关键帧描述了目标元素在整个动画周期内的样式变化。通过使用 `@keyframes` 规则,可以精确设定各个阶段的目标状态。 ```css @keyframes example { from {background-color: red;} to {background-color: yellow;} } ``` 此代码片段展示了最简单形式的关键帧设置方法——仅指定了起始 (`from`) 和结束 (`to`) 状态下的背景颜色改变[^1]。 对于更复杂的场景,则可以在中间添加额外的时间点: ```css @keyframes slidein { 0% { transform: translateX(0%); } 50% { transform: translateX(50%); } 100% { transform: translateX(100%); } } ``` 这里演示的是一个水平位移的过程,在整个过程中元素的位置逐渐向右移动直至完全离开视口范围[^4]。 #### 应用到 HTML 元素上 有了上述定义好的关键帧之后,还需要告诉浏览器哪些 DOM 节点应该执行该动画以及具体的运行参数。此时就要借助于 `animation` 属性及其子属性来进行配置。 ```css div { width: 100px; height: 100px; background-color: pink; /* 将之前定义的名字为 'example' 的 keyframe 序列应用于此 div */ animation-name: example; /* 设置动画完成一次所需时间 */ animation-duration: 2s; /* 可选:指定动画重复次数,默认不循环 */ animation-iteration-count: infinite; } ``` 这段样式的含义是让宽度和高度均为100像素、背景色为粉色的矩形区域按照名为 `example` 的关键帧序列每隔两秒变换一次其背景色彩,并无限次地往复进行下去[^2]。 #### 创建渐变动画实例 除了基本的颜色转换外,还可以利用 JavaScript 或者纯 CSS 来制作更加有趣的视觉体验。比如下面这个按钮点击后会产生彩虹般绚丽过渡的例子就是基于 `@keyframes` 结合伪类实现的[^5]。 ```html <button onclick="this.classList.toggle('rainbow')">Click me!</button> <style> .rainbow { transition: all .75s ease-in-out; } .rainbow:hover, .rainbow:focus { color: white; text-shadow: none; background-image: linear-gradient(to right, #ff9a9e,#fad0c4,#f8efac,#dfe9f3,#bdcfff); } </style> ``` 尽管这里的重点在于悬停时产生的线性梯度变化而非严格意义上的 `@keyframes` 动作,但是原理相同,都是通过对不同时间节点上的外观特征作出规定进而达成预期的效果展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值