CSS动画和变换的详细指南

当我们看到设计精美的科技巨头网站(如Apple或微软)或特斯拉或梅赛德斯等汽车公司时,我们每个人都会感到震惊。

使这些网站脱颖而出的因素,往往是吸引人的动画和效果,让我们一次又一次地看。

那么,他们如何使网站如此惊人地互动?
有没有想过这些网站上的动画实际上是如何运作的?
您是否希望为您的企业设计一个同样优雅和互动的网站?

如果是的话,那就别再看了。

请继续阅读,因为这是一个广泛的摘录,涵盖了CSS动画和变换的基础知识,可以极大地帮助您实现商业网站的相同功能。
如果您刚刚进入前端开发领域,或者希望扩展您对前端开发的理解,那么请继续阅读此博客,因为在最后,您将全面了解CSS。

CSS或层叠样式表是您会注意到的Web应用程序的相当一部分。

虽然CSS为Web应用程序设置了样式,但HTML或超文本标记语言构成了它。

动画在改善用户体验方面发挥着关键作用,因为它们有助于提供改进的视觉反馈,并有助于与网站进行交互。

CSS 3具有丰富的内置属性,大大有助于动画元素,并且在所有主流浏览器中也是如此。

但是 - 强大的力量,更大的责任。

动画需要明智地使用,否则你最终可能会创建一个比交互式更令人分心的页面。动画的整个目的是作为一种辅助,而不是在使用Web应用程序时的障碍。

根据谷歌的一份报告,几乎50%的网络流量来自移动设备。因此,任何企业都需要创建适合移动设备的动画。

对CSS(最好是CSS 3),HTML和某些jQuery 有基本的了解也很有必要。jQuery是一个Javascript库,可以帮助开发人员使用网站的元素。这方面的技术术语是 - DOM操作。

由于您的目标受众可能会有所不同,因此您可能使用多种网络浏览器(Mozilla Firefox,Google Chrome,Safari,Opera,Internet Explorer),因此需要满足所有这些需求。

CSS动画有三个重要方面:

  • Transforms(变换)
  • Transitions(转变)
  • Keyframes(关键帧)

描述CSS中动画和变换的关键元素的流程图。

A部分:Transforms

变换有助于以各种奇妙的方式改变您的网页元素 - 从移动元素到重新调整大小,从旋转元素到倾斜它。
最好的部分 - 您可以在不改变文档流程的情况下更改任何内容。

变换有四个重要方面:

  1. Translate
  2. Translate
  3. Rotate
  4. Skew

让我们深入挖掘一下,好吗?

1.Translate

基于Translate将对象从一个点移动到另一个点基本上。
资料来源:0fps.net

Translate会更改元素的坐标。它用于更改2D平面上组件的外观。

Translate意味着在网页上简单地将元素从一个位置移动到另一个位置。您可以在X轴,Y轴或两者上平移对象。

Moves the element on the X-axis
Syntax: transform: translateX(200px); or transform: translateX(-200px);
Moves the element on the Y-axis
Syntax: transform: translateY(200px); or transform: translateY(-200px);
Using shorthand
Syntax: transform: translate(x-axis, y-axis)
Example: transform: translate(200px, 200px);
Alert!
transform: translate(200px); [will only translate the element along the X-axis]

2.Scale

资料来源:camo.envatousercontent.com

人们可以使用图像的大小以及轴X和Y.缩放会扭曲元素的形状并降低元素的质量。大于1的数字将增加大小,小于1的小数将减小大小。

Scaling along the X-axis - transform: scaleX(3);
Scaling along the Y-axis - transform: scaleY(0.5);
Using the shorthand - for scaling along X and Y axis together -
transform: scale(3 , 0.5); or transform: scale(0.5);

3.Rotate

您可以顺时针或逆时针旋转元素。使用的测量单位是。正值将顺时针旋转元素,反之亦然。这种旋转也会沿X,Y和Z轴发生。

资料来源:gamedev.stackexchange.com

理解CSS动画中的旋转是最棘手的部分之一,因此很多人无法利用此功能的真正潜力。

沿着X轴
想象一下,棉花糖在篝火上旋转时被烤。您必须将元素可视化以与X轴一起转换为页面,这就是X轴上的旋转效果。我们不会看到3D旋转,我们能够看到的是元素高度的变化。

Syntax: transform: rotateX(45deg);

沿着Y轴
想象一个杆子上的舞者。元素将沿Y轴旋转到页面中。你会注意到的是组件的宽度变化了。

Syntax: transform: rotateY(45deg);

沿Z轴
这是使用旋转时可以使用的最佳方向,因为您可以看到实际旋转的元素。也可以分别用正和负旋转值修改顺时针和逆时针运动。为此,尝试想象箭头进入页面并且元素相对于该箭头旋转。

transform: rotateZ(45deg) – clockwise rotation
transform: rotateZ(-45deg) – counterclockwise rotation

Skew

4.gif

Skew元件意味着倾斜。它具有正值和负值,并且像旋转一样,它也以来度量。

正X值将元素向左弯曲,反之亦然,对于负X.同样,正Y值向下倾斜元素,反之亦然。默认情况下,如果变换中未指定X或Y,则它将相对于X轴移动元素。

Along X-axis
transform: skewX(45deg) or skew(45deg);
Along Y-axis
transform: skewY(80deg);

5.组合变换

也可以将多个转换应用于单个转换语句中。顺序确实很重要(有时),因为第二个变换将应用于第一个变换,第三个变换将应用于前两个变换的结果。

资料来源:commons.wikimedia.org

transform: translateX(200px) rotateX(45deg) scaleY(1.5) skewX(45deg);

所有这些变换都将对某些用户事件生效,例如悬停,点击,焦点,活动等。要查看动作中的魔法,您可以在这些事件中添加变换。

.element-to-animate{
display: block
}
.element-to-animate:hover{
transform: translateX(200px) rotateX(45deg) scaleY(1.5) skewX(45deg);
}

B部分:TRANSITIONS

资料来源:mozillademos.org

如果您有机会查看上面的代码,您可能会注意到在状态更改期间悬停时的混蛋; 这恰恰是Transitions的目的。Transitions有助于使动画流畅。

可以借助以下属性控制转换:

  • transition-property
  • transition-duration
  • transition-timing-function
  • transition-delay

transition-property

这些是可以使用转换的CSS属性。其范围从使用边距和填充到背景和边框。您可以将转换应用于特定功能或完整列表。可在此处找到此权限范围内所有属性的完整列表

将transition属性应用于特定的CSS属性

transition-property: background-color;

将转换应用于整个CSS属性列表

transition-property: all;

transition-duration

动画将在其中播放的持续时间。这可以很容易地以秒(s)或毫秒(ms)来测量。建议使用秒,因为它使它们易于阅读 - 即使你办公室的同事也不会被你惹恼!

transition-duration: 0.5s;

transition-timing-function

速度可以通过动画来改变用户体验; 因此建议控制它。您可以通过使用transition-timing-function来实现它。

CSS 3团队非常友好地为我们提供了一些内置的速度值,如ease, ease-in, ease-in-out

如果你希望掌握速度的全部命令 - 使用Bezier曲线。

transition-timing-function: ease;
transition-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);

transition-delay

这有助于在启动动画的触发事件和动画的实际开始之间创建暂停。简单地说,转换延迟 - 延迟动画。它以秒(s)或毫秒(ms)为单位进行测量。

transition-delay: 0.5s;

速记:

transition: (property) (duration) (transition-timing-function) (transition-delay);

两个面向时间的功能的顺序,即持续时间和转换延迟问题 !

Transforms和Transitions一起使用

7.gif

状态1:NORMAL

.element-to-animate display: block; transition: transform 1s ease 0.2s, background 1s; }

状态2:HOVER

.element-to-animate:hover{ background: black; transform: translateX(200px); }

对于在状态1和状态2之间转换,可以将转换分别应用于所有属性和单个时序,或者如果要在状态2中的所有属性上应用转换,则:

transition: all 1s ease 0.2s;

C部分:KEYFRAMES

资料来源:css-tricks.com

关键帧有助于在特定时间将动画从一个更改为另一个。
可以通过两种方式使用关键帧:

  1. 从…到…
  2. 百分比方法

1.从…到…

在这种方法中,动画期间只有2个状态 - 开始状态和结束状态。

句法:

@keyframes animation_name {
            from { }
            to { }
}

使元素(例如,Car)动画化以从其初始位置水平移动:

@keyframes drive{
from {
transform: translateX(-200);
}
to {
transform: translateX(1000px);
 }
}
.car{
animation-name: drive;
animation-duration: 3s;
animation-fill-mode: forwards;
animation-delay: 2s;
animation-iteration-count: infinite;
animation-timing-function: ease-in;
animation-direction: normal;
}

2.百分比方法

我们不能在@keyframes中使用from-to,因为现在有超过1个状态。百分比方法将动画分解为各种中间状态,包括开始和结束状态。起始状态用0%表示,结束状态用100%表示。可以有多少中间状态,但建议在整个过程中保持状态的隔离。

示例:0% — 25% — 50% — 75% — 100%

@keyframes jump{
0% { transform: translateY(-50px) }
50% { transform: translateY(-100px) }
100% { transform: translateY(-50px) }
}

•动画速记

也可以使用这种简洁的格式来编写动画:

animation: (animation-name) (animation-duration) (animation-fill-mode) (animation-timing-function) (animation-iteration-count) (animation-direction) (animation-delay);

注意:动画延迟将始终在动画持续时间之后出现。除了它们 - 时间导向的功能和其他属性的顺序无关紧要。

例:

.car{
animation-name: drive;
animation-duration: 3s;
animation-fill-mode: forwards;
animation-delay: 2s;
animation-iteration-count: infinite;
animation-timing-function: ease-in;
animation-direction: normal;
}
Can be re-written as:
.car{
animation: drive 3s ease-in infinite normal 2s;
}

我们希望在“car”元素上添加两个动画 - 驱动和跳转。我们可以通过使用“链接动画”和单行代码完成此操作。

•什么是链接动画?

使用CSS轻松播放多个动画。逗号分离技术可用于链接动画并运行一个动画。例如,

···
.car{
animation: drive 3s ease-in infinite normal 2s, jump 2s ease 4 alternate reverse;
}
···

动画属性分类:

  • 使用哪种动画?
    animation-name:动画的,由名称@keyframes之后的关键字指示
  • 动画结束时该怎么办?
    animation-fill-mode:告诉如何处理动画窗口外部动画的元素。
  • 如果您希望重复动画“n”次,请使用
    animation-iteration-count:重复动画。它可以具有数字值,或者如果您希望动画连续播放,则使用“无限”。
  • 如果您想要反转动画的方向
    animation-direction:您不需要一起编写单独的动画来反转动画。你可以应用它来播放当前动画,它的方向。
In From – To Approach:
reverse: to - from
alternate: from-to -> to-from -> from-to
alternate-reverse: to-from -> from-to -> to-from
In Percentage Approach
reverse: 100% - 0%
alternate: 0% - 100% -> 100% - 0% -> 0% - 100%
alternate-reverse: 100% - 0% ->0% - 100% ->100% - 0%
  • 动画定时功能,控制动画开始,行为和结束的速度。有一些内置值,如ease,ease-in,你可以使用cubic-bezier(n,n,n,n)编写自己的值。在这玩吧
  • 延迟CSS动画也可以 使用动画延迟将在事件被触发后几秒/毫秒启动动画。

结论

一开始习惯CSS可能有点复杂。但是一旦你习惯了,你就会发现CSS动画和变换非常奇妙。

谢谢阅读。我们希望这篇文章能帮到你。如果确实如此,请大家竖起大拇指,如果您有任何疑问,请随时放弃您的意见。此外,如果您想要分享您想要分享的CSS变换或动画的令人兴奋的用途,我们很乐意听取您的意见。

转:https://medium.com/engineerbabu/a-detailed-guide-to-css-animations-and-transitions-b544502c089c

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,314评论 0 11
  • 看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印象,因...
    DCbryant阅读 1,859评论 0 4
  • CSS3 有3种和动画相关的属性:transform, transition, animation。 概况 其中 ...
    一Left一阅读 3,140评论 0 3
  • css3动画 过渡:transition 2D 转换 transform 3D 转换 transform 动画:a...
    刘松阳阅读 741评论 0 0
  • CSS参考手册 一、初识CSS3 1.1 CSS是什么 CSS3在CSS2.1的基础上增加了很多强大的新功能。目前...
    没汁帅阅读 3,577评论 1 13