效果图

首选来一个简单的布局

这里就不用多说,都是简单排版

<h1>一个爬坑的Coder</h1>
html {  height: 100%;}body {  display: flex;  justify-content: center;  align-items: center;  height: 100%;}h1 {  font-size: 48px;}

每个文字独立出来

每个文字都有动画,那每个字都应该是单独,可以把每个文字单独用一个标签包裹起来,这样就可以了。但是手动操作太过于麻烦了,还得上JavaScript

const h1 = document.querySelector("h1");// $&包括替换字符串中整个匹配项的副本h1.innerHTML = h1.innerText.replace(/\S/g, "$&");

制作css动画

h1 span {  /* 内联元素(inline)动画不起作用, 因此要设置为‘inline-block’ */  display: inline-block;  animation: jump 500ms ease-in-out;}@keyframes jump {  0%,    100% {      transform: translateY(0);    }  50% {    transform: translateY(-10px);  }}

此时发现所有文字都是一起动画的,为了达到效果,我们需要给每个文字加上动画延迟(后面的要比前面的动画开始时间要迟一点),这样就可以一个接着一个动。

给每个文字都加上动画延迟

h1 span {  /* 内联元素(inline)动画不起作用, 因此要设置为‘inline-block’ */  display: inline-block;  animation: jump 500ms ease-in-out;  animation-delay: var(--delay);}document.querySelectorAll("span").forEach((span, index) => {  // 我们可以借助css变量,或者直接通过js给animation-delay属性设置值  span.style.setProperty("--delay", `${index * 150}ms`);});

所有代码

通过以上的步骤分析,就可以达到效果。

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta http-equiv="X-UA-Compatible" content="IE=edge" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Document</title>    <style>      html {        height: 100%;      }      body {        display: flex;        justify-content: center;        align-items: center;        height: 100%;      }      h1 {        font-size: 48px;      }      h1 span {        /* //   内联元素(inline)动画不起作用, 因此要设置为‘inline-block’ */        display: inline-block;        animation: jump 500ms ease-in-out;        animation-delay: var(--delay);      }      @keyframes jump {        0%,        100% {          transform: translateY(0);        }        50% {          transform: translateY(-10px);        }      }    </style>  </head>  <body>    <h1>一个爬坑的Coder</h1>    <script>      const h1 = document.querySelector("h1");      // 包括替换字符串中整个匹配项的副本      h1.innerHTML = h1.innerText.replace(/\S/g, "$&");      document.querySelectorAll("span").forEach((span, index) => {        span.style.setProperty("--delay", `${index * 150}ms`);      });    </script>  </body></html>