1. Transition

CSS Transition 是最简单形式的动画:从一个可视状态变换到另一个可视状态。如果需要更多状态,需要使用关键帧动画。

例子:鼠标以上后,图片旋转。

img:hover {
  transform: rotate(7.5deg);
  transition: 2s all;
}

值顺序不重要。可以是 2s allall 2s。若时间需要精确到毫秒,可以使用小数加秒 transition: 2.35s all; 的形式,或毫秒形式 transition: 2350ms all;

当鼠标移出时,元素立即回到了其初始状态。但有时你期望恢复初始状态也有平滑的动画。方法是将 :hovertransition 声明移到默认样式中,:hover 中只保留 transform。背后的原理是,将一个属性放入默认样式,不管进出状态,transition 都生效。

如果在动画过程中鼠标移出或移入,transition 会被打断,会平滑的反转。这个特性非常好!

transition 中可以只指定时间:transition: 2s;

一般会把 transition 放入默认样式(如 .navButto)而不是最终样式(如 .navButton:hover)。==但对于下拉菜单,下列也可以缓慢动画,但收起最好非常快的完成,为此,可以在默认样式中使用 transition-delay: 5s;,但在最终样式(:hover)覆盖:transition-delay: 0;。==

不是所有的 CSS 属性都可以参与动画。可以参与的属性包括颜色和尺寸类的:

  • transform
  • color, background-color, border-color, opacity
  • border-width, font-size, height, width
  • letter-spacing, line-height, word-spacing
  • margin, padding
  • 定位属性,top, left, right, bottom

You can find a complete list at www.w3.org/TR/css3-transitions/#animatable-properties.

只要 CSS 属性改变都可以触发 transition,包括通过 Javascript 改变 CSS 属性。

transition 包含四个控制属性,分别控制参与动画的属性、动画时间、动画类型、延迟时间(可选)。

transition-property 指定参与动画的属性。多个属性逗号风格。值 all 表示动画所有改变的 CSS 属性。

transition-duration 属性指定动画时间。单位可以是秒或毫秒。

每个属性的动画时间可以不同。为此,需要对应使用 transition-durationtransition-property(逗号分隔),如:

transition-property: color, background-color, border-color;
transition-duration: 0.25s, 0.75s, 2s;

1.1. 延时

延迟时间直接加到 transition 后面:

transition: 2s 4s;

延迟不仅对动画开始有效,对动画反转回到起点也有效。例如上面的代码,动画会延迟 4 秒后开始;结束后会延迟 4 秒后再回到起始状态。(注意,鼠标在图片上停留至少 4 秒动画才会开始。)

transition-delay: 0.5s;

有时不想让所有属性都延时触发,可以为每个属性分别指定延时:

transition-property: color, background-color, border-color;
transition-duration: 1s, 1s, 0.5s;
transition-delay: 0, 0, 1s;

在某些浏览器中左右移动的动画可能不够流畅。使用 translateX 替代 left,会更流畅,适合移动绝对或相对定位的元素。

img {
  width: 300px;
  height: 300px;
  float: left;
  transition-property: opacity, translateX;
  transition-duration: 2s, 4s;
}
img:hover {
  opacity: 0.2;
  transform: translateX(60px);
}

1.2. Easing 函数

CSS3 动画默认使用 ease。可以使用其他缓动,如 linear

transition: 2s transform linear;

独立的属性是 transition-timing-function。改属性可以取五个值:linear, ease, ease-in, ease-out, ease-in-out. 若不指定该属性,默认使用 ease

要观看这些缓动函数的区别,参见:www.the-art-of-web.com/css/timing-function/

transition-timing-function 属性还接受 cubic-bezier 值。The Bezier curve plots the progress of the animation over time. By adjusting two control points you can control how the line curves: the steeper the line, the faster the animation, the flatter the line, the slower.

transition-timing-function: cubic-bezier(0.2, 0.96, 0.74, 0.07);

Cubic Bezier 曲线最好通过工具创建盒测试。参见:https://matthewlein.com/tools/ceaser

可以对不同的属性施加不同的缓动函数。

1.2.1. Transition 速记

四个属性 transition-property transition-duration transition-timing-function transition-duration 可以合并成一个 transition 属性。空格分隔,分别列出要动画的属性、时常、缓动函数、延时:

transition: all 1s ease-in 0.5s;

缓动函数和延时可不设

transition: all 1s;
transition: background-color 1s;

属性位置只能填 all 或单个 CSS 属性。如果要动画多个属性,需要每个属性一个完整配置,逗号分隔。

transition: color 1s, background-color 1s, border-color 0.5s 1s;
Copyright © Guanghui Wang all right reserved,powered by GitbookFile Modified: 2019-08-25 13:56:34

results matching ""

    No results matching ""