css动画

作者: fanison | 来源:发表于2019-12-04 22:00 被阅读0次

1.浏览器渲染原理

  • 根据HTML构建HTML树(DOM)
  • 根据CSS构建CSS树(CSSDOM)
  • 将两棵树合并成一颗渲染树(render tree)
  • Layout 布局(文档流、盒模型、计算大小和位置)
  • Paint绘制(把边框颜色、文字颜色、阴影等画出来)
  • Compose合成(根据层叠关系展示画面)

2.渲染方式

  • JS/CSS --> 样式 --> 布局 --> 绘制 --> 合成
  • JS/CSS --> 样式 --> 绘制 --> 合成
  • JS/CSS --> 样式 --> 合成
查看属性触发流程

3.CSS动画优化

  • JS优化
    使用 requestAnimationFrame 代替setTimeoutsetInterval来实现视觉变化
  • CSS优化
    使用 will-changetranslate 提升移动的元素

4.transform

作用:旋转、缩放、倾斜或平移给定元素

  • translate:平移
    translateX() 沿x轴方向平移
    translateY() 沿y轴方向平移
  transform: translateX(50px);
  transform: translateY(50px);
  transform: translate(50px,50px);

translate(-50%,-50%)实现绝对定位元素的居中

  <div class="wrapper">
    <div id="demo"></div>
  </div>
.wrapper{
  border:1px solid green;
  position:relative;
  height:300px;
  width:300px;
}  
#demo{
  width: 100px;
  height: 100px;
  border: 1px solid red;
  position:absolute;
  left:50%;
  top:50%;
  transform:translate(-50%,-50%);
}
  • scale:缩放
    scaleX() 沿x轴方向缩放
    scaleY() 沿y轴方向缩放
  transform: scaleX(1.5);
  transform: scaleY(1.5);
  transform: scale(1.5,0.5);
  • rotate:旋转


  • skew:倾斜


5.transition

  • 作用:补充中间帧i
  • 语法:
    transition: 属性名 时长 过渡方式 延迟
transition: height 1s ease 1s ;

这其实是一个简写形式,可以单独定义成各个属性

transition-property: height;
transition-duration: 1s;
transition-timing-function: ease;
transition-delay: 1s;
指定属性,时长:
transition: height 1s;
transition: left 1s, top 400ms;
过渡方式:
  • ease: 逐渐放慢
  • linear:匀速
  • ease-in:加速
  • ease-out:减速
  • cubic-bezier函数:自定义速度模式
transition: 1s ease;
延迟:它指定了动画发生的顺序,使得多个不同的transition可以连在一起,形成复杂效果
transition: 1s height, 1s width 1s ;

上面代码指定,width在1秒之后,再开始变化,也就是延迟(delay)1秒

6.animation

animation可以实现复杂的动画,使用animation首先需要定义动画过程,也就是关键帧

@keyframes xxx {
  0% {
    transform: none;
  }
  50%{
    transform: translateX(200px);
  }
  100%{
    transform: translateX(200px) translateY(100px);
  }
}

定义了关键帧之后就可以给DOM元素绑定动画

#demo.start{
  animation: xxx 1.5s;
}

div:hover {
  animation: 1s 1s rainbow linear 3 forwards normal;
}

这是一个简写形式,可以分解成各个单独的属性

div:hover {
  animation-name: rainbow;
  animation-duration: 1s;
  animation-timing-function: linear;
  animation-delay: 1s;
  animation-fill-mode:forwards;
  animation-direction: normal;
  animation-iteration-count: 3;
}

animation-fill-mode:

设置CSS动画在执行之前和之后如何将样式应用于其目标。

  • none:默认值,回到动画没开始时的状态
  • forwards:让动画停留在结束状态
  • backwards:让动画回到第一帧的状态
  • both: 根据animation-direction轮流应用forwards和backwards规则
div:hover {
  animation: 1s xxx forwards;
  /* animation-fill-mode: forwards; */
}

animation-direction

指示动画是否反向播放

  • normal:每个循环内动画向前循环,默认属性
  • reverse:反向运行动画,每周期结束动画由尾到头运行
div:hover {
  animation: 1s xxx 3 reverse;
}

transition、animation Demo

相关文章

  • CSS-3D知识

    1.CSS动画 1.1 CSS动画属性-animation animation:为CSS动画属性,使用该属性可以替...

  • Css动画 小球横移

    学习css 动画,建立小球左右横移的动画原料:html5 Css3html CSS css 动画属性介绍 其中an...

  • 网页高级知识点(三)

    CSS3 transition动画 CSS3 transform变换 CSS3 animation动画

  • 有用的Vue第三方库

    Animate.css - CSS动画库 Velocity.js - JS动画库 TweenJS - 状态过渡动画...

  • 动画类文章

    css3常用动画+动画库 vue2使用animate css

  • Vue.js 过渡动画

    1. css实现过度 transition 动画 css-transform动画 动态组件 上述动画,如果设置mo...

  • 前端开发入门到实战:CSS动画@keyframes的用法

    CSS动画 CSS动画允许大多数HTML元素的动画,而无需使用JavaScript或Flash! 动画浏览器支持 ...

  • 2018-06-13

    Css动画: css3动画主要包括Transform、Transition、Animation 区别 transi...

  • 2018-08-15

    CSS动画 CSS3 @keyframes 规则如需在 CSS3 中创建动画,您需要学习 @keyframes 规...

  • CSS3 动画

    动画属性 动画(animation)是CSS3新增的属性,动画属性可以为元素创建动画,CSS3以前在网页上实现动画...

网友评论

      本文标题:css动画

      本文链接:https://www.haomeiwen.com/subject/jlcrgctx.html