css-动画和浏览器渲染

113 阅读4分钟

1.浏览器渲染

渲染过程:

(1)根据HTML构建html数(DOM)

(2)根据css构建css树(CSSOM)

(3)将两棵树合并成一颗渲染树(reader tree)

(4)layout布局(文档流,盒模型、计算大小和位置)

(5)Paint绘制(边框颜色、文字颜色、阴影等画出来)

(6)composite合成(根据层叠关系展示画面)

所以会有三种更新方式

第一种:全走一遍,比如:

div.remove()

第二种:跳过layout,比如:

改变背景颜色

第三种:跳过layout和paint,比如

改变transform

各个属性分别会通过哪种方式走完全程,推荐网站

csstriggers.com/

css动画优化,推荐网站

developers.google.com/web/fundame…

2.transition

CSS的过渡属性transition可以仅通过CSS来实现简单的动画效果,同时它是一个简写属性,由transition-property、transition-duration、transition-timing-function和transition-delay复合而成。

过渡属性

  1. transition-property 指定应用过渡属性的名称。

    transition-property: all; // 默认为all,所有可被动画的属性都表现出过渡动画。 transition-property: none; // 没有动画效果 transition-property: width, height; //也可以取其他属性的值 复制代码

  2. transition-duration 属性以秒或毫秒为单位指定过渡动画所需的时间。默认值为 0s ,表示不出现过渡动画。

    transition-duration: 1s; transition-duration: 1ms; transition-duration: 1s, 10s, 10ms; // 可以应用多个值,对应于transition-property的多个属性,表示每个属性对应的延时时间

    复制代码

  3. transition-timing-function 表示过渡动画的运动曲线。

    transition-timing-function: cubic-bezier(n, n, n, n); // 在bezier 函数中自定义 0 ~ 1 之间的数值 transition-timing-function: ease; // 默认值,慢速开始,中间变快,慢速结束;相当于 cubic-bezier(0.25, 0.1, 0.25, 1)。 transition-timing-function: linear; // 匀速运动;相当于 cubic-bezier(0, 0, 1, 1)。 transition-timing-function: ease-in; // 慢速开始;相当于 cubic-bezier(0.42, 0, 1, 1)。 transition-timing-function: ease-out; // 慢速结束;相当于 cubic-bezier(0, 0, 0.58, 1) transition-timing-function: ease-in-out; // 慢速开始,慢速结束;相当于 cubic-bezier(0.42, 0, 0.58, 1) transition-timing-function: step-start; transition-timing-function: step-end; transition-timing-function: steps(4, end); 复制代码

  4. transition-delay 表示过渡效果的延迟时间

    transition-delay: 3s; 复制代码

简写属性

transition是上面四个过渡属性的简写,其中只有transition-duration是必填属性。

transition: all 5s linear .2s; // 以空格隔开属性
transition: all 5s linear .2s, height 3s ease-in-out; // 可以以逗号隔开多个过渡。
复制代码

使用场景

transition一般在css中配合:hover, :active等伪类使用,实现相应等动画效果。

.app {
  width: 300px;
  transition: all 3s linear .2s;
}

.app:hover {
  width: 100;
}

一般简写:

transitionall .3s;

3.animation

Animation 是 CSS3 属性中,除了 transform、transiton 之外的一个动画属性。

具体有:animation-name、animation-duration、animation-timing-function、animation-delay、animation-iteration-count、animation-direction、animation-fill-mode、animation-play-state。

2.1 animation-name

语法: animation-name: none | index; 规定需要绑定到选择器的 keyframe 名称。

keyframe 关键帧

可以为动画变化的关键位置设置一定的顺序。

它的规则是 @keyframes 名称 {...} (注意要加 s,不然无法识别规则。)

有两种写法,一种是 0% - 100%,中间可以创建多个百分比给元素加上动画效果。

假设自定义 keyfram 名称为:index

@keyframes index {
    0% {
        /* ... */
    }
    50% {
        /* ... */
    }
    100% {
        /* ... */
    }
}
复制代码

另外一种写法是,from - to,from 相当于 0%,to 相当于100%,中间正常添加百分比。

@keyframes index {
    from {
        /* ... */
    }
    50% {
        /* ... */
    }
    to {
        /* ... */
    }
}
复制代码

2.2 animation-duration

语法: animation-duration: time;

规定完成动画所花费的时间**(持续时间)**,单位为秒或毫秒。

2.3 animation-timing-function

语法: animation-timing-function:ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(number, number, number, number) [, ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(number, number, number, number)]*

规定动画的速度曲线。

2.4 animation-delay

语法: animation-delay: time;

规定在动画开始之前的延迟时间,单位为秒或毫秒。

2.5 animation-iteration-count (迭代次数)

语法: animation-iteration-count: infinite | number;

规定动画应该反复播放的次数**(迭代次数)**。

2.6 animation-direction (播放方向)

语法: animation-direction: normal | reverse | alternate | alternate-reverse;

规定动画播放的方向。

normal:默认值,正向播放。

reverse:反向播放。

alternate:偶数次反向播放、奇数次正向播放。

alternate-reverse:奇数次反向播放、偶数次正向播放。

2.7 animation-fill-mode (填充模式)

语法: animation-fill-mode: none | forwards | backwards | both;

规定动画在播放之前或之后,其动画效果是否可见。

none:不改变默认行为。

forwards:当动画完成后,保持最后一个属性值(在最后一个关键帧中定义)。

backwards:在 animation-delay 所指定的一段时间内,在动画显示之前,应用开始属性值(在第一个关键帧中定义)。

both:向前和向后填充模式都被应用。

2.8 animation-play-state (播放状态)

语法: animation-play-state: running | paused

规定动画正在运行还是暂停,即控制动画播放状态。

running:默认值,动画正常播放。

paused:动画暂停。