定義 dom,容器中包含 2 個(gè)元素,train
代表火車(chē),track
代表鐵軌,其中包含的 3 個(gè) <span>
代表 3 根枕木。
<p class="loader"> <p class="train"></p> <p class="track"> <span></span> <span></span> <span></span> </p> </p>
居中顯示:
body{ margin: 0; height: 100vh; display: flex; align-items: center; justify-content: center; background: linear-gradient(#666, #333); }
定義容器尺寸:
.loader { width: 8em; height: 10em; font-size: 20px; }
先畫(huà)火車(chē)。
畫(huà)出火車(chē)的輪廓:
.train { width: 6em; height: 6em; color: #444; background: #bbb4ab; border-radius: 1em; position: relative; left: 1em; }
用 ::before 偽元素畫(huà)出車(chē)窗:
.train::before { content: ''; position: absolute; width: 80%; height: 2.3em; background-color: currentColor; border-radius: 0.4em; top: 1.2em; left: 10%; }
再用 ::after 偽元素畫(huà)出車(chē)窗上的信號(hào)燈:
.train::after { content: ''; position: absolute; width: 25%; height: 0.4em; background-color: currentColor; border-radius: 0.3em; top: 0.4em; left: calc((100% - 25%) / 2); }
利用徑向漸變畫(huà)出車(chē)燈:
.train { background: radial-gradient(circle at 20% 80%, currentColor 0.6em, transparent 0.6em), radial-gradient(circle at 80% 80%, currentColor 0.6em, transparent 0.6em), #bbb; }
接下來(lái)畫(huà)鐵軌和枕木。
定義鐵軌的寬度,比火車(chē)稍寬:
.track { width: 8em; }
用偽元素畫(huà)出鐵軌:
.track { position: relative; } .track::before, .track::after { content: ''; position: absolute; width: 0.3em; height: 4em; background-color: #bbb; border-radius: 0.4em; }
把鐵軌分別放置在兩側(cè),并形成近大遠(yuǎn)小的視覺(jué)效果:
.track::before, .track::after { transform-origin: bottom; } .track::before { left: 0; transform: skewX(-27deg); } .track::after { right: 0; transform: skewX(27deg); }
畫(huà)出枕木,這是距離觀察者最近的效果,目前 3 根枕木是重疊在一起的:
.track span { width: inherit; height: 0.3em; background-color: #bbb; position: absolute; top: 4em; }
設(shè)置鐵軌的動(dòng)畫(huà)效果:
.track span { animation: track-animate 1s linear infinite; } @keyframes track-animate { 0% { transform: translateY(-0.5em) scaleX(0.9); filter: opacity(0); } 10%, 90% { filter: opacity(1); } 100% { transform: translateY(-4em) scaleX(0.5); filter: opacity(0); } }
為另外 2 根枕木設(shè)置動(dòng)畫(huà)延時(shí),使鐵軌看起來(lái)就像永遠(yuǎn)走不完的樣子:
.track span:nth-child(2) { animation-delay: -0.33s; } .track span:nth-child(3) { animation-delay: -0.66s; }
最后,為火車(chē)增加動(dòng)畫(huà)效果,看起來(lái)就像在行駛中微微晃動(dòng):
.train { animation: train-animate 1.5s infinite ease-in-out; } @keyframes train-animate { 0%, 100% { transform: rotate(0deg); } 25%, 75% { transform: rotate(0.5deg); } 50% { transform: rotate(-0.5deg); } }
大功告成!
相關(guān)推薦:
如何利用css畫(huà)出一只小鳥(niǎo)(代碼)
如何用純CSS實(shí)現(xiàn)卡通鸚鵡的效果
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com