如何使用純CSS實現一個人獨自行走的動畫效果(附源碼)

來源:互聯網
上載者:User
本篇文章給大家帶來的內容是關於如何使用純CSS實現一個人獨自行走的動畫效果(附源碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。

效果預覽

原始碼下載

https://github.com/comehope/front-end-daily-challenges

代碼解讀

定義 dom,容器中包含 3 個元素,分別代表頭、身體和腳:

<div class="man">    <span class="head"></span>    <span class="body"></span>    <span class="feet"></span></div>

置中顯示:

body {    margin: 0;    height: 100vh;    display: flex;    align-items: center;    justify-content: center;    background: radial-gradient(lightgray 20%, whitesmoke);}

定義容器尺寸:

.man {    width: 12em;    height: 33em;    font-size: 10px;    position: relative;}

定義主色:

.man {    color: white;}

畫出頭部:

.head {    position: absolute;    width: 7em;    height: 7em;    background-color: currentColor;    border-radius: 50%;    right: 0;}

畫出身體:

.body {    position: absolute;    width: 6.2em;    height: 14.4em;    background-color: currentColor;    top: 7em;    border-radius: 100% 20% 0 0;}

畫出腳,現在只能看到一隻腳,是因為兩隻腳重疊在一起,一會兒動起來時就能看到兩隻腳了:

.feet::before,.feet::after {    content: '';    position: absolute;    width: 4em;    height: 1.4em;    background-color: white;    bottom: 0;    left: -1.6em;    border-radius: 1em 80% 0.4em 0.4em;}

用虛擬元素畫出陰影:

.man::before {    content: '';    position: absolute;    width: 12em;    height: 0.8em;    background-color: rgba(0, 0, 0, 0.1);    bottom: -0.2em;    left: -3em;    border-radius: 50%;}

接下來增加動畫效果。

增加行走的動畫效果,並使兩隻腳的動畫時間交錯:

.feet::before,.feet::after {    animation: feet-animation 2s ease-in-out infinite;}.feet::after {    animation-delay: 1s;}@keyframes feet-animation {    20% {        transform: translateX(3.4em) translateY(-1.6em) rotate(4deg);    }    30% {        transform: translateX(4.6em) translateY(-1em) rotate(0deg);    }    40% {        transform: translateX(5.6em) translateY(-0.6em) rotate(4deg);    }    44% {        transform: translateX(5.6em) translateY(0) rotate(0deg);    }}

增加頭和身體起伏的動畫效果:

.head,.body {    animation: body-animation 4s ease-in-out infinite;}@keyframes body-animation {    0%, 100% {        transform: translateY(0) skewX(-2deg);    }    25%, 75% {        transform: translateY(0.5em) skewX(0deg);    }    50% {        transform: translateY(0) skewX(0deg);    }}

增加陰影面積隨身體運動而變化的動畫效果:

.man::before {    animation: shadow-animate 4s ease-in-out infinite;}@keyframes shadow-animate {    0%, 50%, 100% {        transform: scale(1);    }    25%, 75% {        transform: scale(1.15);    }}

大功告成!

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.