この記事の内容は、CSSとD3を使用してテキストで構成されるハート型のアニメーション効果を実現する方法についてです。必要な友人が参考になれば幸いです。役に立ちました。
エフェクトのプレビュー
ソースコードのダウンロード
https://github.com/comehope/front-end-daily-challenges
コード解釈
コンテナー 3 つの子要素、各子要素には単語があります:
<div> <span>aaa</span> <span>bbb</span> <span>ccc</span> </div>
中央表示:
body { margin: 0; height: 100vh; display: flex; align-items: center; justify-content: center; background-color: black; }
コンテナーのサイズを定義します:
.love { width: 450px; height: 450px; }
テキスト スタイルを設定します:
.love { position: relative; } .love span { position: absolute; left: 0; color: goldenrod; font-size: 20px; font-family: sans-serif; text-shadow: 0 0 1em white; }
テキストが左右に移動するアニメーションを定義します:
.love span { animation: x-move 10s ease-in-out infinite alternate; } @keyframes x-move { to { left: 450px; } }
子要素の変数に添字を付けて、各単語が順番に入るようにアニメーション遅延を設定します:
.love { --particles: 3; } .love span { animation-delay: calc(20s / var(--particles) * var(--n) * -1); } .love span:nth-child(1) { --n: 1; } .love span:nth-child(2) { --n: 2; } .love span:nth-child(3) { --n: 3; }
ハートの形に沿ってテキストが移動するアニメーション効果を追加します:
.love span { animation: x-move 10s ease-in-out infinite alternate, y-move 20s linear infinite; } @keyframes y-move { 0% { transform: translateY(180px); } 10% { transform: translateY(45px); } 15% { transform: translateY(5px); } 18% { transform: translateY(0); } 20% { transform: translateY(5px); } 22% { transform: translateY(35px); } 24% { transform: translateY(65px); } 25% { transform: translateY(110px); } 26% { transform: translateY(65px); } 28% { transform: translateY(35px); } 30% { transform: translateY(5px); } 32% { transform: translateY(0); } 35% { transform: translateY(5px); } 40% { transform: translateY(45px); } 50% { transform: translateY(180px); } 71% { transform: translateY(430px); } 72.5% { transform: translateY(440px); } 75% { transform: translateY(450px); } 77.5% { transform: translateY(440px); } 79% { transform: translateY(430px); } 100% { transform: translateY(180px); } }
次に、d3 を使用して dom 要素と CSS 変数をバッチ処理します。
d3 ライブラリを導入します:
<script></script>
複数の単語を含む配列を宣言します:
const words = ['aaa', 'bbb', 'ccc'];
d3 を使用して dom 要素を作成します:
d3.select('.love') .selectAll('span') .data(words) .enter() .append('span') .text((d) => d);
d3 を使用して CSS 変数に値を割り当てます:
d3.select('.love') .style('--particles', words.length) .selectAll('span') .data(words) .enter() .append('span') .style('--n', (d, i) => i + 1) .text((d) => d);
html ファイルと css ファイルに関連する css 変数。
配列要素をさまざまな言語の「love」という単語に変更します:
const words = [ '愛', 'Love', 'Amour', 'Liebe', 'Amore', 'Amor', 'Любовь', 'الحب', 'प्यार', 'Cinta', 'Αγάπη', '사랑', 'Liefde', 'Dashuri', 'Каханне', 'Ljubav', 'Láska', 'Armastus', 'Mahal', 'אהבה', 'Szerelem', 'Grá', 'Mīlestība', 'Meilė', 'Любов', 'Љубовта', 'Cinta', 'عشق', 'Dragoste', 'Láska', 'Renmen', 'ፍቅር', 'munaña', 'Sevgi', 'Љубав', 'karout', 'amà', 'amôr', 'kærleiki', 'mborayhu', 'Upendo', 'sòòyayyàà', 'ljubav', 'Սեր', 'сүю', 'сүйүү', 'tia', 'aroha', 'KHAIR', 'प्रेम', 'kjærlighet', 'munay', 'jecel', 'Kärlek', 'soymek', 'Mahal', 'ярату', 'محبت', 'sopp', 'uthando', 'ความรัก', 'Aşk', 'Tình yêu', 'ליבע'];
最後に、最初の単語に特別なテキスト スタイルを設定します:
.love span:first-child { color: orangered; font-size: 3em; text-shadow: 0 0 0.1em black, 0 0 1em white; z-index: 1; }
関連する推奨事項:
CSS と D3 を使用して黒と黒を実現する方法白い交差点の積み上げアニメーション効果
純粋な CSS を使用して DOM 要素なしでアニメーション効果を実現する方法
純粋な CSS を使用して動く白いウサギのアニメーション効果を実装する方法
以上がCSS と D3 を使用してテキストで構成されたハート型のアニメーション効果を実現する方法 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。