CSSで要素をアニメーションさせる:トランジションとアニメーションの違い

2024-04-10

CSS アニメーションで複数の CSS トランジションを要素に適用する方法

方法 1: @keyframes ルールを使用する

この方法は、複数のアニメーションプロパティを単一の @keyframes ルールにまとめて、そのルールを要素に適用する方法です。

@keyframes my-animation {
  0% {
    opacity: 0;
    transform: translateX(-100px);
  }
  100% {
    opacity: 1;
    transform: translateX(0);
  }
}

.my-element {
  animation: my-animation 2s ease-in-out;
}

この方法の利点は、コードが簡潔で分かりやすいことです。 欠点は、すべてのトランジションが同時に開始され、個別に制御できないことです。

方法 2: animation-delay プロパティを使用する

この方法は、個々のトランジションを順番に開始するために animation-delay プロパティを使用する方法です。

.my-element {
  opacity: 0;
  transform: translateX(-100px);
  transition: opacity 1s ease-in-out, transform 1s ease-in-out;
}

.my-element:hover {
  opacity: 1;
  transform: translateX(0);
}

@media (hover: none) {
  .my-element {
    animation-delay: 1s;
  }
}

この方法の利点は、個々のトランジションを個別に制御できることです。 欠点は、コードが冗長になる可能性があることです。

この方法は、JavaScriptを使用して個々のトランジションを制御する方法です。

<div class="my-element"></div>
const element = document.querySelector('.my-element');

element.addEventListener('mouseenter', () => {
  element.style.opacity = 1;
  element.style.transform = 'translateX(0)';
});

element.addEventListener('mouseleave', () => {
  element.style.opacity = 0;
  element.style.transform = 'translateX(-100px)';
});

この方法の利点は、最も柔軟な方法であることです。 欠点は、JavaScript の知識が必要であることです。

  • コードの簡潔さを求める場合は、方法 1 を選択します。
  • 個々のトランジションを個別に制御したい場合は、方法 2 または 3 を選択します。
  • JavaScript に精通している場合は、方法 3 を選択します。



<div class="my-element">
  <h1>Hello, world!</h1>
</div>
@keyframes my-animation {
  0% {
    opacity: 0;
    transform: translateX(-100px);
  }
  100% {
    opacity: 1;
    transform: translateX(0);
  }
}

.my-element {
  animation: my-animation 2s ease-in-out;
}
<div class="my-element">
  <h1>Hello, world!</h1>
</div>
.my-element {
  opacity: 0;
  transform: translateX(-100px);
  transition: opacity 1s ease-in-out, transform 1s ease-in-out;
}

.my-element:hover {
  opacity: 1;
  transform: translateX(0);
}

@media (hover: none) {
  .my-element {
    animation-delay: 1s;
  }
}

方法 3: JavaScriptを使用する

<div class="my-element">
  <h1>Hello, world!</h1>
</div>
const element = document.querySelector('.my-element');

element.addEventListener('mouseenter', () => {
  element.style.opacity = 1;
  element.style.transform = 'translateX(0)';
});

element.addEventListener('mouseleave', () => {
  element.style.opacity = 0;
  element.style.transform = 'translateX(-100px)';
});

実行方法

上記のコードを HTML ファイルと CSS ファイルに保存し、ブラウザで開きます。

方法 1 の場合は、要素が 2 秒かけてフェードインし、右から左に移動します。

方法 3 の場合は、要素にカーソルを合わせると、フェードインし、右から左に移動します。 カーソルを要素から離すと、要素はフェードアウトし、元の位置に戻ります。

上記のサンプルコードは基本的な例です。 さまざまなプロパティや値を使用して、さまざまなアニメーションを作成できます。

詳細については、以下のリソースを参照してください。




CSS アニメーションで複数の CSS トランジションを要素に適用するその他の方法

animation-timing-function プロパティを使用して、個々のトランジションのタイミングを制御できます。

.my-element {
  opacity: 0;
  transform: translateX(-100px);
  transition: opacity 1s ease-in, transform 1s linear;
}

.my-element:hover {
  opacity: 1;
  transform: translateX(0);
}

この例では、opacity プロパティのトランジションは ease-in タイミング関数を使用して開始され、transform プロパティのトランジションは linear タイミング関数を使用して開始されます。

.my-element {
  opacity: 0;
  transform: translateX(-100px);
  transition: opacity 1s ease-in, transform 2s linear;
}

.my-element:hover {
  opacity: 1;
  transform: translateX(0);
}

この例では、opacity プロパティのトランジションは 1 秒間続き、transform プロパティのトランジションは 2 秒間続きます。

.my-element {
  opacity: 0;
  transform: translateX(-100px);
  transition: opacity 1s ease-in 2, transform 1s linear 3;
}

.my-element:hover {
  opacity: 1;
  transform: translateX(0);
}

animation-fill-mode プロパティを使用して、アニメーションが完了した後、要素がどのように表示されるかを制御できます。

.my-element {
  opacity: 0;
  transform: translateX(-100px);
  transition: opacity 1s ease-in, transform 1s linear;
  animation-fill-mode: forwards;
}

.my-element:hover {
  opacity: 1;
  transform: translateX(0);
}

この例では、animation-fill-mode プロパティが forwards に設定されているため、アニメーションが完了した後、要素は opacity: 1transform: translateX(0) の状態を維持します。

  • 個々のトランジションのタイミングを制御したい場合は、animation-timing-function プロパティを使用します。
  • アニメーションが完了した後、要素がどのように表示されるかを制御したい場合は、animation-fill-mode プロパティを使用します。

CSS アニメーションを使用して、要素に複数の CSS トランジションを適用する方法はいくつかあります。 どの方法を選択するかは、要件と目的によって異なります。

上記のサンプルコードと説明を参考に、さまざまな方法を試して、目的のアニメーションを作成してみてください。


animation css css-transitions


HTML・CSSでテーブル行にシンプルな下線を追加する方法

コード例実行結果すべてのテーブル行に、1px幅の薄いグレーの下線が追加されます。解説tr セレクタは、すべてのテーブル行を選択します。border-bottom プロパティは、下線のスタイルを指定します。1px は、下線の幅をピクセル単位で指定します。...


もう迷わない!Webページを綺麗にA4サイズに印刷する方法

手順印刷用CSSを作成する印刷用CSSを作成する@page規則で用紙サイズを設定する@page規則を使用して、印刷するページのサイズと向きを指定します。A4サイズの縦向きに印刷するには、次のコードを使用します。@page { size: A4 portrait; } オプション:用紙サイズをミリメートルまたはインチで指定することもできます。横向きに印刷するには、landscapeを代わりに使用します。余白を設定するには、marginプロパティを使用します。...


「Tag Error: React JSX Style Tag Error on Render」を撃退!React JSX スタイルタグのエラー徹底解説

React で JSX スタイルタグを使用する際、まれに "Tag Error: React JSX Style Tag Error on Render" というエラーが発生することがあります。このエラーは、スタイルタグの構文ミスや設定問題などが原因で発生します。本記事では、このエラーの原因と解決策を分かりやすく解説します。...


JavaScript、CSS、Twitter Bootstrap 3 での条件付きクラス属性

最も簡単な方法は、三項演算子を使用することです。この例では、condition が true の場合は class1 が、false の場合は class2 が className 変数に割り当てられます。&& 演算子を使用して、条件付きにクラス属性を適用することもできます。...


改行で美デザイン!CSSで実現する高度な改行テクニック

'\n'(LF)と'\r'(CR)HTMLソースコード上で改行したい箇所に直接'\n'(LF)または'\r'(CR)を記述することで、ブラウザ上で改行を表示することができます。これは最もシンプルで直感的な方法ですが、いくつか注意点があります。...