css属性之帧动画属性(animation)

@keyframes规则

在介绍animation属性之前,先来认识一下@keyframes规则。

通过@keyframes规则可以创建动画,创建动画是逐步改变一个CSS样式到另一个CSS样式来实现的,CSS样式可以设置多个来实现动画过程,指定动画变化时用%,或者用关键字从"from"到"to",这是和"0%"开始到"100%"结束相同效果的。


为了获得浏览器的稳定支持,建议使用%来实现。


书写:@keyframes my_animation_name {0% {css_styles;} 50% {css_styles;} 100% {css_styles;}}

或者 @keyframes my_animation_name {from {css_styles;} to {css_styles;}}


举例一个总体效果:

<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="utf-8">
	<title>帧动画(animation)属性</title>
	<style>
	
	  @keyframes myanimation { /* 开始创建动画帧 */
	    % {
		  width: 100px;
		  background-color: red;
		}
		20% {
		  width: 160px;
		  background-color: blue;
		}
		40% {
		  width: 220px;
		  background-color: blue;
		}
		60% {
		  width: 280px;
		  background-color: yellow;
		}
		80% {
		  width: 340px;
		  background-color: yellow;
		}
		100% {
		  width: 400px;
		  background-color: orange;
		}
	  }
	  
	  div {
	    width: 100px;
		height: 100px;
		background-color: red;
		
		/* 设置帧动画效果 */
		
		-webkit-animation-name: myanimation;
		-webkit-animation-duration: 5s;
		-webkit-animation-timing-function: linear;
		-webkit-animation-delay: .5s;
		-webkit-animation-iteration-count: infinite; /* 设置动画的播放次数 */
		/*-webkit-animation-direction: reverse; 动画是否反向播放 */
		-webkit-animation-state: runing; /* 指定动画是否正在播放或暂停 */
		
		animation-name: myanimation;
		animation-duration: 5s;
		animation-timing-function: linear;
		animation-delay: .5s;
		animation-iteration-count: infinite;
		/*animation-direction: reverse; 动画是否反向播放 */
		animation-state: runing;
	  }
	
	</style>
  </head>
  <body>
    
    <div><div>
	 
  </body>
</html>

效果如下:




可以看出,所谓帧动画,就是通过创建帧改变CSS样式的实现的。




animation属性

animation属性设置动画的效果,它是一个复合属性。

书写:

animation: animation-name||animation-duration||animation-timing-function||animation-delay||animation-iteration-count||animation-direction||animation-state;



animation-name、animation-duration、animation-timing-function属性


这三个属性与过渡(transition)的三个属性是相似的。

-name,表示定义的帧动画名称,这里的name就是"my_animation_name"。

@keyframes my_animation_name {}

-duratin,表示动画完成所需的时间。

-timing-function,表示动画的过渡类型。linear表示匀速;ease表示慢速开始,中间加速,慢速结束;ease-in表示慢速开始;ease-out表示慢速结束;ease-in-out表示慢速开始和结束;



animation-delay属性

animation-delay表示动画延迟多少时间后开始执行。




animation-iteration-count

animation-iteration-count表示动画执行的次数。

书写:animation-iteration-count: n||infinite;    有限的循环次数或者是无限循环。



animation-direction

animation-direction表示动画在循环中是否反向播放。

属性值:
  • normal,正常播放
  • reverse,反向播放。
  • alternate,奇数次正常播放,偶数次反向播放。
  • alternate-reverse,奇数次反向播放,偶数次正常播放。

正常播放:

animation-direction: normal;

效果如下:


正常播放就是根据 设置的帧(如从0%到100%)的过程。



反向播放:
animation-direction: reverse;

效果如下:


反向播放就是根据 设置的帧(如从0%到100%)的反向过程播放(从100%到0%)。

animation-play-state

animation-play-state指定动画是否运行或暂停


属性值:
  • running,动画运行
  • paused,动画暂停



animation-fill-mode属性

animation-fill-mode属性规定当动画不播放(动画播放完成,或因有延迟而未播放)时,应用到元素的样式。

属性值:
  • forwards
  • backwards
  • both,同时遵循以上两个




下面就以animation实现一个逐帧动画效果:


先以"from""to"关键字实现的动画为例。

<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="utf-8">
	<title>帧动画(animation)属性</title>
	<style>
	
	  @keyframes myanimation { /* 开始创建动画帧 */
	    from {
		  background-position: 0 0;
		}
		to {
		  background-position: -1540px 0;
		}
	  }
	  
	  
	  div {
	    width: 140px;
		height: 140px;
		border: 1px solid red;
		background-image: url('run.png');
		
		/* 设置帧动画效果 */
		 -webkit-animation-name: myanimation;
		 -webkit-animation-duration: 5s;
		 -webkit-animation-timing-function: linear
		 -webkit-animation-iteration-count: infinite;
		
	  }
	
	</style>
  </head>
  <body>
    
    <div><div>
	 
  </body>
</html>


效果如下:



我们可以看出,动画是滑动的,并不是我们想要的效果,这是为什么呢?
原来animation是以ease为默认方式过渡的,它会在每个关键帧之间插入补间动画,所以是连贯的。



解决思路就是:
@keyframes myanimation {
    0%, 8%{  /*动作一*/  }
    9.2%, 17.2%{  /*动作二*/  }
    ...
}

step1:动作之间停留8帧,0%设置动作一,动作一结束在8%
step2:动作之间过渡1.2帧,9.2%设置动作二,动作二结束在17.2%

以下以"0%"到"100%"为例
<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="utf-8">
	<title>帧动画(animation)属性</title>
	<style>
	
	  @keyframes myanimation { /* 开始创建动画帧 */
	    0%, 8% {  background-position: 0 0;  }
        9.2%, 17.2% {  background-position: -140px 0;  }
        18.4%, 26.4% {  background-position: -280px 0 ;  }
        27.6%, 35.6% {  background-position: -420px 0 ;  }
        36.8%, 44.8% {  background-position: -560px 0 ;  }
        46%, 54% {  background-position: -700px 0 ;  }
        55.2%, 63.2% {  background-position: -840px 0 ;  }
        64.4%, 72.4% {  background-position: -980px 0 ;  }
        73.6%, 81.6% {  background-position: -1120px 0 ;  }
        82.8%, 90.8% {  background-position: -1400px 0 ;  }
        92%, 100% {  background-position: -1540px 0 ;  }
	  }
	  
	  
	  div {
	    width: 140px;
		height: 140px;
		border: 1px solid red;
		background-image: url('run.png');
		
		/* 设置帧动画效果 */
		 -webkit-animation-name: myanimation;
		 -webkit-animation-duration: 1s;
		 -webkit-animation-timing-function: linear;
		 -webkit-animation-iteration-count: infinite;
		 -webkit-animation-fill-mode: backwards;
		
	  }
	
	</style>
  </head>
  <body>
    
    <div><div>
	 
  </body>
</html>

效果如下:



以上只是animation属性的一个简单应用,它还有其它更为强大的功能用处,以后再介绍。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CSS的关键动画可以通过使用@keyframes规则来实现。@keyframes规则定义了动画的关键,即动画在不同时间点的状态。 关键动画有以下属性: 1. animation-name:指定动画的名称。 2. animation-duration:指定动画的持续时间。 3. animation-timing-function:指定动画的时间函数,用于控制动画的速度变化。 4. animation-delay:指定动画的延迟时间。 5. animation-iteration-count:指定动画的循环次数。 6. animation-direction:指定动画的方向,可以是正向、反向或交替。 7. animation-fill-mode:指定动画在执行前和执行后的状态。 8. animation-play-state:指定动画的播放状态,可以是运行或暂停。 以上属性可以通过在元素的样式中使用animation属性来实现关键动画。例如: div { animation: myanimation 2s ease-in-out 1s infinite alternate; } 这个例子中,动画名称为myanimation,持续时间为2秒,时间函数为ease-in-out,延迟时间为1秒,循环次数为无限,方向为交替。 ### 回答2: CSS 的关键动画可以通过 @keyframes 规则来实现,其语法如下: ``` @keyframes animation-name { 0% { /* CSS 属性和值 */} 50% { /* CSS 属性和值 */} 100% { /* CSS 属性和值 */} } ``` 在该规则中,animation-name 定义动画的名称,可以在后面的 animation 属性中引用;0%、50%、100% 分别表示动画发生的时间点,可以分别设置 CSS 属性和对应的值,顺序随便;最后,可以在元素中使用 animation 属性动画应用到指定元素上。 以下是常用的 @keyframes 属性: - animation-name:指定动画名称,需要与元素中的 animation 属性中的动画名称相同才能生效。 - animation-duration:指定动画持续时间,单位为秒或毫秒。 - animation-delay:指定动画延迟时间,单位为秒或毫秒。 - animation-timing-function:指定动画的时间函数,用于控制动画的速度。常见的时间函数有 linear、ease、ease-in、ease-out、ease-in-out 等。 - animation-iteration-count:指定动画的播放次数,可以为数字、infinite 或者关键字 alternate(动画循环次数为基数或偶数时反向播放)。 - animation-direction:指定动画的播放方向,可以为 normal、reverse、alternate 或者 alternate-reverse。 - animation-fill-mode:指定动画在播放前和播放后的状态,可以为 none、forwards、backwards 或者 both。 除了以上属性,@keyframes 还支持其他一些属性,如 animation-play-state 控制动画的播放状态,animation-iteration-delay 控制每次迭代之间的间隔等。总的来说,CSS 的关键动画提供了很多属性,可以灵活地控制元素的动画效果。 ### 回答3: CSS 的关键动画是通过指定不同的动画状态来实现的,也称为 by 动画或逐动画。通过在指定的关键(即动画状态)中定义属性值,使用者可以把元素从一个状态逐渐变为另一个状态,从而创造出动画效果。现在让我们来看看如何实现 CSS 的关键动画以及关键动画都有哪些属性: 关键动画的实现 要实现 CSS 中的关键动画,我们需要使用 @keyframes 规则。这通常包括定义一个动画的名称以及一系列用于指定动画状态的关键。例如,下面是一个简单的示例: ``` @keyframes my-animation { 0% { opacity: 0; } 50% { opacity: 0.5; } 100% { opacity: 1; } } ``` 在上述示例中,我们定义了一个名为 my-animation动画,并指定了三个关键:0%、50% 和 100%。每个关键都包含 CSS 属性,该属性将元素从前一个状态逐渐转换到下一个状态。在这个例子中,我们将元素的透明度从 0 到 1 进行了渐变。 关键动画属性 除了要创建关键,我们还可以使用各种不同的属性和值来指定其他关键动画的行为。以下是一些主要的属性: 1. animation-name 指定要使用的动画名称。 2. animation-duration 指定动画的持续时间,以秒或毫秒为单位。 3. animation-timing-function 指定动画执行的节奏或缓动类型。例如,linear、ease、ease-in、ease-out 或 ease-in-out。 4. animation-delay 指定动画的延迟时间,以秒或毫秒为单位,在该时间之后才开始执行动画。 5. animation-iteration-count 指定动画应该执行多少次。例如,使用无限循环可以设置为 infinite。 6. animation-direction 指定元素在动画结束后是否应该反转方向,并反向播放动画。例如,normal 或 alternate。 7. animation-fill-mode 指定动画是否应该在执行前或执行后将其应用于元素的样式。例如,none、forwards、backwards 或 both。 总之,关键动画是一种非常有用的技术,可用于为网页中的元素添加各种动画效果。理解它的工作原理以及可用的各种属性非常重要,这样你就可以通过使用 CSS 来制作出令人惊叹的动画效果的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值