この記事では、純粋な CSS を使用して動く電車を実現する方法を紹介します。困っている友人に役立つことを願っています。
domを定義します。コンテナには2つの要素が含まれており、train
代表火车,track
代表铁轨,其中包含的 3 个 <span></span>
は3つのスリーパーを表します。
<p> </p><p></p> <p> <span></span> <span></span> <span></span> </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; }
最初に電車を描きます。
電車の輪郭を描く:
.train { width: 6em; height: 6em; color: #444; background: #bbb4ab; border-radius: 1em; position: relative; left: 1em; }
::before擬似要素を使って窓を描く:
.train::before { content: ''; position: absolute; width: 80%; height: 2.3em; background-color: currentColor; border-radius: 0.4em; top: 1.2em; left: 10%; }
::after擬似要素を使って窓に信号灯を描く:
.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); }
放射状グラデーションを使って車を描くlight :
.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; }
次にレールと枕木を描きます。
電車よりわずかに広いレールの幅を定義します:
.track { width: 8em; }
疑似要素を使用してレールを描画します:
.track { position: relative; } .track::before, .track::after { content: ''; position: absolute; width: 0.3em; height: 4em; background-color: #bbb; border-radius: 0.4em; }
レールを両側に配置し、大小の近くと遠くの視覚効果を作成します:
.track::before, .track::after { transform-origin: bottom; } .track::before { left: 0; transform: skewX(-27deg); } .track::after { right: 0; transform: skewX(27deg); }
Draw枕木、これは観察者に最も近い効果です。 現在、3 つの枕木が重なっています:
.track span { width: inherit; height: 0.3em; background-color: #bbb; position: absolute; top: 4em; }
線路のアニメーション効果を設定します:
.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 つの枕木のアニメーション遅延を設定します。終わりが見えないように見えます。 見た目:
.track span:nth-child(2) { animation-delay: -0.33s; } .track span:nth-child(3) { animation-delay: -0.66s; }
最後に、電車が動くたびに少し揺れているように見えます:
.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); } }
これで完了です。
関連する推奨事項:
以上が純粋な CSS を使用して動的トレインを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。