【CSS】奔跑的小人


效果预览

html

<div class="runBox">
<div class="running">
    <div class="outer">
        <div class="body">
            <div class="arm behind"></div>
            <div class="arm front"></div>
            <div class="leg behind"></div>
            <div class="leg front"></div>
        </div>
    </div>
</div>

<div class="buttons">
    <button onclick="document.querySelector('.running').style.setProperty('--color', 'rgba(255, 255, 255, .3)')">opacity .3</button>
    <button onclick="document.querySelector('.running').style.setProperty('--color', 'rgba(255, 255, 255, 1)')">opacity 1</button>
    <button onclick="document.querySelector('.running').style.setProperty('--duration', '.5s')">duration .5</button>
    <button onclick="document.querySelector('.running').style.setProperty('--duration', '1s')">duration 1</button>
    <button onclick="document.querySelector('.running').style.setProperty('--duration', '.7s')">duration .7</button>
</div>
</div>

css

<style>
.running {
  --color: #fff;
  --duration: .7s;
}
.running .outer {
  -webkit-animation: outer var(--duration) linear infinite;
          animation: outer var(--duration) linear infinite;
}
.running .outer .body {
  background: var(--color);
  height: 15px;
  width: 8px;
  border-radius: 4px;
  -webkit-transform-origin: 4px 11px;
          transform-origin: 4px 11px;
  position: relative;
  -webkit-transform: rotate(32deg);
          transform: rotate(32deg);
  -webkit-animation: body var(--duration) linear infinite;
          animation: body var(--duration) linear infinite;
}
.running .outer .body:before {
  content: '';
  width: 8px;
  height: 8px;
  border-radius: 4px;
  bottom: 16px;
  left: 0;
  position: absolute;
  background: var(--color);
}
.running .outer .body .arm,
.running .outer .body .arm:before,
.running .outer .body .leg,
.running .outer .body .leg:before {
  content: '';
  width: var(--w, 11px);
  height: 4px;
  top: var(--t, 0);
  left: var(--l, 2px);
  border-radius: 2px;
  -webkit-transform-origin: 2px 2px;
          transform-origin: 2px 2px;
  position: absolute;
  background: var(--c, var(--color));
  -webkit-transform: rotate(var(--r, 0deg));
          transform: rotate(var(--r, 0deg));
  -webkit-animation: var(--name, arm-leg) var(--duration) linear infinite;
          animation: var(--name, arm-leg) var(--duration) linear infinite;
}
.running .outer .body .arm:before {
  --l: 7px;
  --name: arm-b;
}
.running .outer .body .arm.front {
  --r: 24deg;
  --r-to: 164deg;
}
.running .outer .body .arm.front:before {
  --r: -48deg;
  --r-to: -36deg;
}
.running .outer .body .arm.behind {
  --r: 164deg;
  --r-to: 24deg;
}
.running .outer .body .arm.behind:before {
  --r: -36deg;
  --r-to: -48deg;
}
.running .outer .body .leg {
  --w: 12px;
  --t: 11px;
}
.running .outer .body .leg:before {
  --t: 0;
  --l: 8px;
}
.running .outer .body .leg.front {
  --r: 10deg;
  --r-to: 108deg;
}
.running .outer .body .leg.front:before {
  --r: 18deg;
  --r-to: 76deg;
}
.running .outer .body .leg.behind {
  --r: 108deg;
  --r-to: 10deg;
  --c: none;
}
.running .outer .body .leg.behind:before {
  --c: var(--color);
  --r: 76deg;
  --r-to: 18deg;
}
.running .outer .body .leg.behind:after {
  content: '';
  top: 0;
  right: 0;
  height: 4px;
  width: 6px;
  -webkit-clip-path: polygon(2px 0, 6px 0, 6px 4px, 0 4px);
          clip-path: polygon(2px 0, 6px 0, 6px 4px, 0 4px);
  border-radius: 0 2px 2px 0;
  position: absolute;
  background: var(--color);
}

@-webkit-keyframes outer {
  50% {
    -webkit-transform: translateY(0);
            transform: translateY(0);
  }
  25%,
    75% {
    -webkit-transform: translateY(4px);
            transform: translateY(4px);
  }
}

@keyframes outer {
  50% {
    -webkit-transform: translateY(0);
            transform: translateY(0);
  }
  25%,
    75% {
    -webkit-transform: translateY(4px);
            transform: translateY(4px);
  }
}
@-webkit-keyframes body {
  50% {
    -webkit-transform: rotate(16deg);
            transform: rotate(16deg);
  }
  25%,
    75% {
    -webkit-transform: rotate(24deg);
            transform: rotate(24deg);
  }
}
@keyframes body {
  50% {
    -webkit-transform: rotate(16deg);
            transform: rotate(16deg);
  }
  25%,
    75% {
    -webkit-transform: rotate(24deg);
            transform: rotate(24deg);
  }
}
@-webkit-keyframes arm-leg {
  50% {
    -webkit-transform: rotate(var(--r-to));
            transform: rotate(var(--r-to));
  }
}
@keyframes arm-leg {
  50% {
    -webkit-transform: rotate(var(--r-to));
            transform: rotate(var(--r-to));
  }
}
@-webkit-keyframes arm-b {
  30%,
    70% {
    -webkit-transform: rotate(var(--r-to));
            transform: rotate(var(--r-to));
  }
}
@keyframes arm-b {
  30%,
    70% {
    -webkit-transform: rotate(var(--r-to));
            transform: rotate(var(--r-to));
  }
}
.buttons {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 40px;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}
.buttons button {
  border: 0;
  background: 0;
  padding: 8px 16px;
  margin: 0 5px;
  font-weight: 500;
  font-size: 16px;
  cursor: pointer;
  outline: none;
  -webkit-appearance: none;
  color: var(--c, #8A91B4);
  transition: color .3s, -webkit-transform .3s;
  transition: color .3s, transform .3s;
  transition: color .3s, transform .3s, -webkit-transform .3s;
  -webkit-transform: scale(var(--s, 1));
          transform: scale(var(--s, 1));
}
.buttons button:hover {
  --c: #D1D6EE;
}
.buttons button:active {
  --s: .9;
}

.runBox{
   position: relative;
   box-sizing: border-box;
   -webkit-font-smoothing: antialiased;
 }
.runBox>*{
    box-sizing: inherit;
}
.runBox *:before,.runBox  *:after {
  box-sizing: inherit;
}
.runBox{
  min-height: 266px;
  display: flex;
  font-family: 'Roboto', Arial;
  justify-content: center;
  align-items: center;
  flex-direction: column;
  background: #2B3044;
}
.runBox .running {
  zoom: 2;
  margin-top: -30px;
}
</style>

声明:yopaopao|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 【CSS】奔跑的小人


正如我心中爱你美丽 又怎能嘴上装四大皆空