打破JS特权——CSS动画

CSS动画

1、transform

2、transition

3、animate

概述

在过去,如果想要页面上的东西动起来,只能使用js加上各种计算。

扫描二维码关注公众号,回复: 2434217 查看本文章

感谢时代的进步,css也在这些年有了长足的发展,现在已经可以使用css来做一些简单的动画效果。

css动画的制作其实并没有什么特别高深的地方,引入少量的css代码就能实现丰富多彩的页面效果。

但依然需要深入理解css的基础才能灵活运用,做出画面美观、代码简洁、性能高效的css动画。

1.transform 变形

有的人可能会对transform和transition迷糊,先来解析他们的英文:

首先看看词根trans,通常表示穿过,穿越的意思,而form则表示形状。

当他们连到一起就是穿越了这个形状,也就是变形的意思。

如果对变形金刚感兴趣的话那对这个单词应该很熟悉transformer。

而ion后缀则是一个名词后缀,意思也就是穿过穿越的名词形式,翻译过来就是过渡转变。

这样首先搞清楚这两个单词的区别,才好学习他们的用途。

transform是用于改变块级元素的形状,它有四种变形方式:

移动,缩放,旋转,以及倾斜。

1.1 移动 translate

其语法是这样的,声明需要变形,变形方式为移动:

.element {

transform: translate(n, m);

}

translate函数能输入两个值,分别表示在横坐标和纵坐标上的位移

同时还能使用translateX(n)和translateY(m)来单独设置位移情况。

元素则会在原来的位置上产生位移并且不会影响文档流

位移的坐标以元素左上角为基点,横坐标向右为正向左为负,纵坐标向下为正向上为负。

1.2 scale 缩放

缩放和移动函数类似,也是可以接受两个值,分别表示横向缩放和纵向缩放:

.element {

transform: scale(n, m);

}

如果只写了一个值则表示横向和纵向上同时缩放:

.element {

transform: scale(n);

}

值得注意的是

scale除了对元素本身的宽高有影响外,对元素的字体大小,padding这些属性也同样有影响。

并且这个函数可以拆分为scaleX(n)和scaleY(m)来使用。

1.3 rotate 转动

转动的语法是这样的:

.element {

transform: rotate(20deg);

}

deg是degrees角度弧度的缩写,说明这是一个角度单位。

默认会以元素的中心为旋转中心,在Z轴上沿顺时针旋转。

如果有需要也可以分别设置按XYZ轴来旋转,分别使用如下三个函数

rotateX(), rotateY(), rotateZ()

1.3 skew 倾斜

倾斜的语法是这样的:

.element {

transform: skew(20deg, 45deg);

}

skew函数能接受两个值,表示先沿着x轴倾斜,然后再沿着y轴倾斜的角度。

在沿着x轴倾斜的时候,会保持高度的不变;

而在沿着Y轴倾斜的时候,会保持着宽度的不变。

当然也可以将这个函数拆分成两个函数分别表示

skewX(20deg),skewY(20deg)

2.transition 过渡动画

前面所说到的变形并不是动画,但是动画的基础之一

而现在说到的transition却是踏踏实实的动画,它是提供了一种在更改css属性时控制动画速度的。

可以让属性变化层位一个持续一段时间的过程,而不是立即生效。

比如将一个元素的背景色从白色改为红色,通过这个改变是立即生效的。

但使用transition后元素的颜色将逐渐从白色变化为红色,按照一定的曲线速率变化,实现过渡动画的效果。

它还可以控制哪些属性发生动画效果,以及何时开始,持续多久以及如何动画等等细节。

比如下方代码,在没有加上transition: 2s;之前,将鼠标放到box上方时可以看到盒子的变化是瞬间发生的。

但加上之后可以看到盒子被hover的时候,的宽高和颜色被自动补全了一段长达2秒的过渡动画:

.box {

width: 100px;

height: 100px;

background: pink;

transition: 2s;

}

.box:hover {

width: 80px;

height: 120px;

background: lightgreen;

}

transition其实是由四个属性组合而成的一个综合写法:

属性名说明

transition-property

用于指定哪个css属性用于过渡,只有指定的属性才会发生过渡动画,默认值all

alltransition-duration

指定过渡的时长。也可以为不同属性分别指定不同时长,默认值0s

transition-timing-function

指定函数变化的曲度速率,有ease,linear,step-end,steps(4,end)几种,默认值ease

easetransition-delay

指定延迟执行的时长,默认值0s

它们的简写语法是这样的,并且要注意书写顺序

比如当有2个数字时长时,会将第一个默认为过渡时长,第二个为延迟时长:

transition: <transition-property><transition-duration><transition-timing-function><transition-delay>

如果不想一次设置所有all属性的动画可以分别设置:

.box {

width: 100px;

height: 100px;

background: pink;

transition: width 2s ease 0s, height 1s ease 0s, background 2s ease 2s;

}

.box:hover {

width: 80px;

height: 120px;

background: lightgreen;

}

3.animation 关键帧动画

不同于transition过渡动画只能定义首尾两个状态

关键帧动画可以定义多个状态,定义任意多的关键帧。

而过渡动画就是只能定义第一帧和最后一帧这两个关键帧的动画。

因此关键帧动画可以实现更复杂的动画效果。

语法是这样的:

@keynames 动画名称{

时间点(元素状态)

时间点(元素状态)

}

然后把定义好的动画绑定到元素上就能实现关键帧动画了

而不像过渡动画需要一个状态的改变才能触发,比如:

.element {

animation: pulse 5s infinite;

}

@keyframes pulse {

0% {

background-color: #001F3F;

}

100% {

background-color: #FF4136;

}

}

animation的具体属性比较多:

属性名说明

animation-name

@keyframes动画的名称

animation-duration

动画一个周期所花费的时间,默认为0

animation-timing-function

动画的速度曲线,默认为ease。

animation-delay

延迟执行

animation-direction

动画是否在下一个周期逆向播放;normal为正常播放,alternate为轮流反向播放

animation-iteration-count

动画被播放的次数

animation-fill-mode

动画时间之外的状态,

animation-play-state

动画是否正在运行或暂停,默认是running

同样的,animation也可以简写,像前面所说到的transition一样,可以把这些属性简写到一起。

使用默认值的部分可以省略掉,不过需要注意的是animation-play-state是不能简写到animation中。

职业选择、求职辅导、学习规划、困难答疑、技术交流等,可以加IT交流群828691304

 欢迎访问我们的官网:技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,学习的路上不再迷茫。

这里是技能树.IT修真院,初学者转行到互联网行业的聚集地。"

猜你喜欢

转载自blog.csdn.net/jnshu_it/article/details/81042881
今日推荐