css跳动的红心demo

504 阅读1分钟

浏览器渲染原理

  1. 根据html构建DOM树
  2. 根据css构建css树
  3. 将两棵树合并成一颗渲染树
  4. layout布局(文档流,盒模型,计算大小和位置)
  5. paint绘制(把边框颜色,文字颜色,阴影等画出来)
  6. compose合成(根据层叠关系展示画面)

transition和animation分别实现跳动的红心

  1. 前往查看效果
//transition实现
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      .heart {
        display: inline-block;
        position: relative;
        margin: 100px;
        transition: all 1s;
      }
      .heart:hover {
        transform: scale(1.5);
      }
      .left {
        background: red;
        position: absolute;
        display: inline-block;
        width: 100px;
        height: 100px;
        border-radius: 50%;
        transform: translateX(40px) translateY(-40px);
      }
      .right {
        background: red;
        position: absolute;
        display: inline-block;
        width: 100px;
        height: 100px;
        border-radius: 50%;
        transform: translateX(-40px) translateY(-40px);
      }
      .bottom {
        background: red;
        width: 100px;
        height: 100px;
        transform: rotate(45deg);
      }
    </style>
  </head>
  <body>
    <div class="heart">
      <div class="left"></div>
      <div class="right"></div>
      <div class="bottom"></div>
    </div>
  </body>
</html>

  1. 前往查看效果
//animation实现
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title></title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      .heart {
        display: inline-block;
        position: relative;
        margin: 100px;
        animation: 0.5s anim infinite alternate;
      }

      @keyframes anim {
        from {
          transform: scale(1);
        }
        to {
          transform: scale(1.5);
        }
      }
      .left {
        background: red;
        position: absolute;
        display: inline-block;
        width: 100px;
        height: 100px;
        border-radius: 50%;
        transform: translateX(40px) translateY(-40px);
      }
      .right {
        background: red;
        position: absolute;
        display: inline-block;
        width: 100px;
        height: 100px;
        border-radius: 50%;
        transform: translateX(-40px) translateY(-40px);
      }
      .bottom {
        background: red;
        width: 100px;
        height: 100px;
        transform: rotate(45deg);
      }
    </style>
  </head>
  <body>
    <div class="heart">
      <div class="left"></div>
      <div class="right"></div>
      <div class="bottom"></div>
    </div>
  </body>
</html>