逻辑

  • transition

使用 transition 定义发生变化后的过渡, 包括过渡时间, 过渡模式等(淡入淡出, 线性等), 当 hover 等时发生变化, 过渡开始。

  • animate

变化

transform

旋转,缩放,倾斜或平移给定元素, 支持 2D , 3D 动画。参考

/* Keyword values */
transform: none;
 
/* Function values */
transform: matrix(1.0, 2.0, 3.0, 4.0, 5.0, 6.0);//被称为变换函数
transform: translate(12px, 50%);
transform: translateX(2em);
transform: translateY(3in);
transform: scale(2, 0.5);
transform: scaleX(2);
transform: scaleY(0.5);
transform: rotate(0.5turn);
transform: skew(30deg, 20deg);
transform: skewX(30deg);
transform: skewY(1.07rad);
transform: matrix3d(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0);
transform: translate3d(12px, 50%, 3em);
transform: translateZ(2px);
transform: scale3d(2.5, 1.2, 0.3);
transform: scaleZ(0.3);
transform: rotate3d(1, 2.0, 3.0, 10deg);
transform: rotateX(10deg);
transform: rotateY(10deg);
transform: rotateZ(10deg);
transform: perspective(17px);
 
/* Multiple function values */
transform: translateX(10px) rotate(10deg) translateY(5px);
 
/* Global values */
transform: inherit;
transform: initial;
transform: unset;
 

中心

  • rotate, skew, scale 以元素中心(50%, 50%) 作为变换中心, 但可通过 transform-origin 重新指定

matrix

平移, 旋转, 切变(skew), 缩放都可以使用 matrix 表示, 旋转本质是平切 + 缩放。参看

变换矩阵

a c tx     x  
b d ty  *  y 
0 0 1      1
  • matrix( scaleX(), skewY(), skewX(), scaleY(), translateX(), translateY() )

skew

转换矩阵

1	tan(ax)
tan(ay)	1

scale

转换矩阵

sx	0
0	sy

translate

转换矩阵

1	0	tx
0	1	ty
0	0	1

其他变化

  • 宽度,高度
  • 位置
  • 背景颜色
  • 字号 …等等

transition

过渡可以为一个元素在不同状态之间切换的时候定义不同的过渡效果。比如在不同的伪元素之间切换,像是 :hover, :active 或者通过 JavaScript 实现的状态变化。

语法

/* Apply to 1 property */
/* property name | duration */
transition: margin-right 4s;
 
/* property name | duration | delay */
transition: margin-right 4s 1s;
 
/* property name | duration | timing function */
transition: margin-right 4s ease-in-out;
 
/* property name | duration | timing function | delay */
transition: margin-right 4s ease-in-out 1s;
 
/* Apply to 2 properties */
transition: margin-right 4s, color 1s;
 
/* Apply to all changed properties */
transition: all 0.5s ease-out;
 
/* Global values */
transition: inherit;
transition: initial;
transition: unset;
 
/*逗号隔开多个属性过渡, all 对所有有效果*/
transition:all 2s, none 2s, width 2s, height 2s, background-color 2s, transform 2s;
 

例子

.box {
    border-style: solid;
    border-width: 1px;
    display: block;
    width: 100px;
    height: 100px;
    background-color: #0000FF;
    -webkit-transition:width 2s, height 2s,
        background-color 2s, -webkit-transform 2s;
    transition:width 2s, height 2s, background-color 2s, transform 2s;
}
.box:hover {
    background-color: #FFCCCC;
    width:200px;
    height:200px;
    -webkit-transform:rotate(180deg);
    transform:rotate(180deg);
}
 

transition-property

指定哪个或哪些 CSS 属性用于过渡。只有指定的属性才会在过渡中发生动画,其他属性仍如通常那样瞬间变化。

transition-duration

transition-timing-function

缓动函数

/* Keyword values */
transition-timing-function: ease;
transition-timing-function: ease-in;
transition-timing-function: ease-out;
transition-timing-function: ease-in-out;
transition-timing-function: linear;
transition-timing-function: step-start;
transition-timing-function: step-end;
 
/* Function values */
transition-timing-function: steps(4, jump-end);
transition-timing-function: cubic-bezier(0.1, 0.7, 1, 0.1);
 
/* Steps Function keywords */
transition-timing-function: steps(4, jump-start);
transition-timing-function: steps(10, jump-end);
transition-timing-function: steps(20, jump-none);
transition-timing-function: steps(5, jump-both);
transition-timing-function: steps(6, start);
transition-timing-function: steps(8, end);
 
/* Multiple timing functions */
transition-timing-function: ease, step-start, cubic-bezier(0.1, 0.7, 1, 0.1);
 
/* Global values */
transition-timing-function: inherit;
transition-timing-function: initial;
transition-timing-function: revert;
transition-timing-function: revert-layer;
transition-timing-function: unset;
 

transition-delay

animation

https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation

动画事件

transitionend, animationend