목차
如何定义transition(过渡)
transition-property(过渡属性)
语法:
例如:
transition-duration(过渡持续时间)
transition-timing-function(过渡时间函数)
transition-delay(过渡延迟函数)
transition的简写
其他情况:当属性值列表长度不一致时
如何执行动画效果?
关于:transitionend事件
transition和animation的区别:
웹 프론트엔드 HTML 튜토리얼 CSS3 动画系列_html/css_WEB-ITnose

CSS3 动画系列_html/css_WEB-ITnose

Jun 21, 2016 am 08:50 AM

10年5月份写过 ,那时候CSS3 动画基本上只有webkit内核的浏览器,如今CSS3已经大量的被应用到各种项目中,并且逐渐成为前端开发工程师的必备技能。虽然在项目中也经常用CSS3来优化一些体验,但是总觉的自己掌握的不够,所以最近温故知新,总结一下。欢迎大家拍砖讨论。

归纳总结了一下,我们口中说的CSS3 动画包括两种类型:

  1. Transition-过渡

  2. Animation-动画

他们都使我们的网页“动”起来了,两者功能类似,不过两者存在着一下细微的差别:

Transition(过渡)是通过定义元素从 起点的状态 和 结束点的状态 ,在一定的时间区间内实现元素平滑地过渡或变化 的一种补间动画机制。

而Animation(动画)不仅可以定义元素从 起点的状态 和 结束点的状态,而且他可以定义元素 在任意两个点之间的关键帧(Keyframes)的状态,在指定的时间内实现元素平滑地过渡或变化 的一种补间动画机制。

使用transition制作一个简单的transition效果时,元素包括了起点状态的属性和结束点状态的属性,一个开始执行动画时间(transition-delay)和一个延续动作时间(transition-duration)以及动作的变换速率(transition-timing-function),这样就可以进行一个简单的动画了。如果我们要控制的更细一些,比如说我要第一个时间段执行什么动作,第二个时间段执行什么动作,这样我们用Transition就很难实现了,此时我们需要关键帧(Keyframes)来更加精确的控制,在指定的时间内在关键帧(Keyframes)之间,实现元素平滑地过渡或变化 。

画了两个示意图:

Transition(过渡)示意图,1秒时间内只改某元素的颜色:

接下来是Animation(动画)示意图,前1秒时间内使元素变大,后2秒改变元素的颜色,并且使元素变为原来的大小:

其实Transition(过渡)下的 起点 和 结束点也可以理解为关键帧,只不过这两点间不能定义关键帧,而Animation可以起点 和 结束点之间定义任意的关键帧。至于动画是在指定的时间内,元素在两个关键帧之间 实现平滑地过渡或变化 的一种补间动画机制。当如动画的前提是元素在两个关键帧下状态存在差异,即使是很小的差异,当然我们的肉眼可能看不出来。

要是你以前做过flash动画,理解Transition(过渡)和Animation(动画)应该非常简单。如果我写的你理解不了,那么你可以看看这个 flash动作补间动画的视频教程 。

CSS 过渡(transition)是通过定义元素从 起点的状态 和 结束点的状态 ,在一定的时间区间内实现元素平滑地过渡或变化 的一种补间动画机制。你可以让属性的改变过程持续一段时间,而不是立即生效。

通过transition你可以决定哪个属性发生动画效果 (可以 通过明确地列出这些属性 ),何时开始动画 ( 通过设置delay) , 动画持续多久 ( 通过设置duration ), 以及如何动画 (通过定义 timing函数 ,比如线性地或开始快结尾慢)。

先看看这个例子: http://www.css88.com/demo/css3_transition/demo1.html

如何定义transition(过渡)

Transition又包含了四个子属性,分别为:

  • transition-property,变换延续的时间:

  • transition-duration,在延续时间段,

  • transition-timing-function,变换的速率变化

  • transition-delay:变换延迟时间。

定义也非常灵活,先介绍一下这4个子属性:

transition-property(过渡属性)

  1. 可以单独指定元素哪些属性改变时执行过渡(transition),可以触发浏览器reflow或repaint的属性那些CSS属性可以应用动画,可参见: https://developer.mozilla.org/zh-CN/docs/CSS/CSS_animated_properties 这里列出所有的CSS属性,如果可以做动画,那么会说明是如何设置。

  2. 可以指定为 all ,元素任何可过渡(transition)属性值变化时都将执行过渡(transition)效果。

  3. 可以指定为 none 时,动画立即停止。

  4. 初始默认值为 all

语法:

transition-property: none | all |[<IDENT>][,<IDENT>]*
로그인 후 복사

例如:

transition-property: all;transition-property: none;transition-property: background-color;transition-property: background-color, height, width;
로그인 후 복사

transition-duration(过渡持续时间)

  1. 用来指定元素过度过程的持续时间,时间值,1s(秒),4000ms(毫秒)。

  2. 其默认值是0s,也可以理解为无过渡(transition)效果。

语法:

transition-duration:<time>[,<time>]*
로그인 후 복사

例如:

transition-duration:2s;transition-duration:4000ms;transition-duration:1s,800ms;
로그인 후 복사

transition-timing-function(过渡时间函数)

指定CSS属性的变换速率,预设的有:ease, linear, ease-in, ease-out, ease-in-out, cubic-bezier(x1, y1, x2, y2),默认值时easy:

  1. ease:(逐渐变慢)默认值,等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0).

  2. linear:(匀速),等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0).

  3. ease-in:(加速),等同于贝塞尔曲线(0.42, 0, 1.0, 1.0).

  4. ease-out:(减速),等同于贝塞尔曲线(0, 0, 0.58, 1.0).

  5. ease-in-out:(加速然后减速),等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)

  6. cubic-bezier为通过贝塞尔曲线来计算“转换”过程中的属性值,如下曲线所示,通过改变P1(x1, y1)和P2(x2, y2)的坐标可以改变整个过程的Output Percentage。w3c文档中表述是所有值需在[0, 1]区域内,否则无效。但是在一些浏览器(Chrome,Firefox,Opera,IE11 预览版)下对P1(x1, y1)和P2(x2, y2)的坐标中的y1和y2并没有这个限制,曲线可以是负值,也可以取大于1的值。如果x1和x2是负数,或者大于1的值那么直接应用最终样式没有过渡效果。而一些老版本的浏览器曲线值仍需在[0, 1]区域内,否则直接应用最终样式,比如Opera 12,和老版本的webkit浏览器,其他没测试。可以看看下面demo中的最后一个案例-Awesome!

查看demo:不同的timing functions demo http://css88.com/demo/css3_transition/

推荐两个简单直观的cubic-bezier() 贝塞尔曲线设置工具:

http://www.webstuffshare.com/2012/04/showing-product-information-with-css3-3d-transform/

http://cubic-bezier.com/

注:关于step-start,step-end,steps([, [ start | end ] ]?)取值这里不做说明,大家可以看看 http://www.w3.org/TR/css3-transitions/#transition-timing-function-property 和 http://www.css88.com/archives/5403/https://developer.mozilla.org/en-US/docs/Web/CSS/transition-timing-function

transition-delay(过渡延迟函数)

指定一个动画开始执行的时间,即当改变元素属性值后多长时间开始执行“转换效果”,初始默认值为0;

语法:

transition-delay:<time>[,<time>]*
로그인 후 복사

例如:

transition-delay:5s;transition-delay:4000ms,8000ms;transition-delay:-5s;
로그인 후 복사

transition的简写

过渡可以简写。

语法:

transition:<transition>[,<transition>]*<transition>=<transition-property><transition-duration><transition-timing-function><transition-delay>
로그인 후 복사

例如:

transition: background-color 3s linear 1s;transition:width 2s ease-in 2000ms,border 2s linear,height 5s, background-color 2s, transform 2s;transition:4s ease-in-out;transition:5s;
로그인 후 복사

其他情况:当属性值列表长度不一致时

以 transition-property 的值列表长度为标准,如果某个属性值列表长度短于它的,则重复值以长度一致, 例如:

div { transition-property: opacity, left, top, height; transition-duration:3s,5s;}
로그인 후 복사

将按下面这样处理:

div { transition-property: opacity, left, top, height; transition-duration:3s,5s,3s,5s;}
로그인 후 복사

类似地,如果某个属性的值列表长于 transition-property 的,将被截短。 例如:

div { transition-property: opacity, left; transition-duration:3s,5s,2s,1s;}
로그인 후 복사

将按下面这样处理:

div { transition-property: opacity, left; transition-duration:3s,5s;}
로그인 후 복사

如何执行动画效果?

css3动画一般通过鼠标事件或者鼠标状态定义动画,通常我们可以用CSS中伪类、使用js修改元素的样式属性或追加删除样式来执行定义的动画。 CSS中伪类执行动画包括:

动态伪类 起作用的元素 描述
:link 只有链接 未访问的链接
:visited 只有链接 访问过的链接
:hover 所有元素 鼠标经过元素
:active 所有元素 鼠标点击元素
:focus 所有可被选中的元素 元素被选中

上面的例子就是使用CSS中伪类执行动画的。 使用js修改元素的样式属性或追加删除样式来执行动画: 一般是鼠标事件操作和定时操作(window.setTimeout(),window.setInterval());

看看这个例子: http://www.css88.com/demo/css3_transition/demo2.html

还应注意当一个元素使用过渡(transition)后,立即使用 .appendChild() 将其加入到DOM中或删除其 display: none; 。这被视为如果初始状态从来没有存在过那么元素总是在它的最终状态。克服这个限制最简单的办法是使用极少毫米数的 window.setTimeout()。

关于:transitionend事件

transitionend 事件会在 CSS transition 过渡完成时触发. 当transition完成前被移除或者取消,比如移除css的 transition-property 属性,此事件将不会被触发。哥浏览器下事件的支持情况

Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
1.0 开始 webkitTransitionEnd 4.0 (2.0) 开始 transitionend 10开始 transitionend 10.5 开始 oTransitionEnd 12 开始 otransitionend

12.10 开始

transitionend
3.2 开始 webkitTransitionEnd

看看这个例子: http://www.css88.com/demo/css3_transition/demo3.html

从例子中可以看出, transitionend 事件会在 每个过渡属性完成时都触发该事件,而且浏览器下还有不一致的地方,比如border过渡的时候,webkit下只触发一次,输出:

过渡属性: border; 时间:2

而firefox输出:

过渡属性: border-left-color; 时间:2

过渡属性: border-bottom-color; 时间:2

过渡属性: border-right-color; 时间:2

过渡属性: border-top-color; 时间:2

过渡属性: border-left-width; 时间:2

过渡属性: border-bottom-width; 时间:2

过渡属性: border-right-width; 时间:2

过渡属性: border-top-width; 时间:2

建议在使用的时候判断是否所有的属性是否已经过渡完成,或者判断特定的属性名在执行该事件。

transition和animation的区别:

  1. transition完成后会保留过渡后的状态,而animation会跳至默认状态

  2. 后者更精细,具体到每一祯都可以控制,而前者是平滑过渡。

参考文章:

http://www.w3.org/TR/css3-transitions/

http://www.css88.com/archives/5403/https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_CSS_transitions

http://css3.bradshawenterprises.com/transitions/

http://www.css88.com/archives/5403/https://developer.mozilla.org/en-US/docs/Web/Reference/Events/transitionend

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

& lt; Progress & Gt의 목적은 무엇입니까? 요소? & lt; Progress & Gt의 목적은 무엇입니까? 요소? Mar 21, 2025 pm 12:34 PM

이 기사는 HTML & lt; Progress & Gt에 대해 설명합니다. 요소, 그 목적, 스타일 및 & lt; meter & gt의 차이; 요소. 주요 초점은 & lt; progress & gt; 작업 완료 및 & lt; meter & gt; Stati의 경우

& lt; datalist & gt의 목적은 무엇입니까? 요소? & lt; datalist & gt의 목적은 무엇입니까? 요소? Mar 21, 2025 pm 12:33 PM

이 기사는 HTML & LT; Datalist & GT에 대해 논의합니다. 자동 완성 제안을 제공하고, 사용자 경험을 향상시키고, 오류를 줄임으로써 양식을 향상시키는 요소. 문자 수 : 159

HTML5의 크로스 브라우저 호환성에 대한 모범 사례는 무엇입니까? HTML5의 크로스 브라우저 호환성에 대한 모범 사례는 무엇입니까? Mar 17, 2025 pm 12:20 PM

기사는 HTML5 크로스 브라우저 호환성을 보장하기위한 모범 사례에 대해 논의하고 기능 감지, 점진적 향상 및 테스트 방법에 중점을 둡니다.

& lt; meter & gt의 목적은 무엇입니까? 요소? & lt; meter & gt의 목적은 무엇입니까? 요소? Mar 21, 2025 pm 12:35 PM

이 기사는 HTML & lt; meter & gt에 대해 설명합니다. 범위 내에 스칼라 또는 분수 값을 표시하는 데 사용되는 요소 및 웹 개발의 일반적인 응용 프로그램. & lt; meter & gt; & lt; Progress & Gt; 그리고 Ex

html5 & lt; time & gt; 의미 적으로 날짜와 시간을 나타내는 요소? html5 & lt; time & gt; 의미 적으로 날짜와 시간을 나타내는 요소? Mar 12, 2025 pm 04:05 PM

이 기사는 html5 & lt; time & gt; 시맨틱 날짜/시간 표현 요소. 인간이 읽을 수있는 텍스트와 함께 기계 가독성 (ISO 8601 형식)에 대한 DateTime 속성의 중요성을 강조하여 Accessibilit를 향상시킵니다.

HTML5 양식 유효성 검사 속성을 사용하여 사용자 입력을 유효성있게하려면 어떻게합니까? HTML5 양식 유효성 검사 속성을 사용하여 사용자 입력을 유효성있게하려면 어떻게합니까? Mar 17, 2025 pm 12:27 PM

이 기사에서는 브라우저에서 직접 사용자 입력을 검증하기 위해 필요한, Pattern, Min, Max 및 Length 한계와 같은 HTML5 양식 검증 속성을 사용하는 것에 대해 설명합니다.

뷰포트 메타 태그는 무엇입니까? 반응 형 디자인에 중요한 이유는 무엇입니까? 뷰포트 메타 태그는 무엇입니까? 반응 형 디자인에 중요한 이유는 무엇입니까? Mar 20, 2025 pm 05:56 PM

이 기사는 모바일 장치의 반응 형 웹 디자인에 필수적인 Viewport Meta Tag에 대해 설명합니다. 적절한 사용이 최적의 컨텐츠 스케일링 및 사용자 상호 작용을 보장하는 방법을 설명하는 반면, 오용은 설계 및 접근성 문제로 이어질 수 있습니다.

& lt; iframe & gt; 꼬리표? 보안을 사용할 때 보안 고려 사항은 무엇입니까? & lt; iframe & gt; 꼬리표? 보안을 사용할 때 보안 고려 사항은 무엇입니까? Mar 20, 2025 pm 06:05 PM

이 기사는 & lt; iframe & gt; 외부 컨텐츠를 웹 페이지, 공통 용도, 보안 위험 및 객체 태그 및 API와 같은 대안을 포함시키는 태그의 목적.

See all articles