CSS:アニメーションと遷移


155

そのため、CSS3トランジションとアニメーションの両方を実行する方法を理解しています。はっきりしないのは、私がググってみましたが、いつどれを使用するかです。

たとえば、ボールをバウンドさせたい場合は、アニメーションが最適です。キーフレームを提供すると、ブラウザが中間フレームを実行し、素晴らしいアニメーションが作成されます。

ただし、いずれの方法でも上記の効果が得られる場合があります。シンプルで一般的な例は、Facebookスタイルのスライド式ドロワーメニューを実装することです。

この効果は、次のような遷移によって実現できます。

.sf-page {
    -webkit-transition: -webkit-transform .2s ease-out;
}

.sf-page.out {
    -webkit-transform: translateX(240px);
}

http://jsfiddle.net/NwEGz/

または、次のようなアニメーションを通じて:

.sf-page {
    -webkit-animation-duration: .4s;
    -webkit-transition-timing-function: ease-out;
}

.sf-page.in {
    -webkit-animation-name: sf-slidein;
    -webkit-transform: translate3d(0, 0, 0);
}

.sf-page.out {
    -webkit-animation-name: sf-slideout;
    -webkit-transform: translateX(240px);
}

@-webkit-keyframes sf-slideout {
    from { -webkit-transform: translate3d(0, 0, 0); }
    to { -webkit-transform: translate3d(240px, 0, 0); }
}

@-webkit-keyframes sf-slidein {
    from { -webkit-transform: translate3d(240px, 0, 0); }
    to { -webkit-transform: translate3d(0, 0, 0); }
}

http://jsfiddle.net/4Z5Mr/

次のようなHTMLの場合:

<div class="sf-container">
    <div class="sf-page in" id="content-container">
        <button type="button">Click Me</button>
    </div>
    <div class="sf-drawer">
    </div>
</div>

そして、この付随するjQueryスクリプト:

$("#content-container").click(function(){
    $("#content-container").toggleClass("out");
    // below is only required for css animation route
    $("#content-container").toggleClass("in");
});

私が理解したいのは、これらのアプローチの長所と短所は何ですか。

  1. 明らかな違いの1つは、アニメーション化ではコードがかなり多くなることです。
  2. アニメーションにより柔軟性が向上します。スライドアウトとインで異なるアニメーションを使用できます
  3. パフォーマンスについて言えることはありますか?どちらもハードウェアアクセラレーションを利用していますか?
  4. どちらがよりモダンで、今後の道のり
  5. 他に何か追加できることはありますか?

回答:


209

いつ行うかではなく、どのように行うかを理解しているようです。

遷移はアニメーションであり、開始状態と終了状態という2つの異なる状態の間で実行されるものです。ドロワーメニューのように、開始状態を開いて終了状態を閉じる、またはその逆を行うことができます。

開始状態と終了状態を特に含まない処理を実行する場合、またはトランジションのキーフレームをより細かく制御する必要がある場合は、アニメーションを使用する必要があります。


7
この記事もチェックしてください。kirupa.com/html5/css3_animations_vs_transitions.htmも、トランジションがJavaScriptのインタラクションを行う際の方法であることを正しく指摘しています。
Scott Jungwirth

40

(Merriam-Websterによると)定義を説明します。

移行:ある形式、段階、またはスタイルから別の形式への移動、開発、または進化

アニメーション:人生や人生の資質に恵まれています。動きがいっぱい

名前はCSSの目的に適切に適合します

つまり、ある状態から別の状態への変更にすぎないため、ここで示した例では遷移を使用する必要があります


21

より正確な答えは、次のとおりです。

遷移:

  1. トリガー要素が必要です(:hover、:focusなど)
  2. 2つのアニメーション状態のみ(開始と終了)
  3. シンプルなアニメーション(ボタン、ドロップダウンメニューなど)に使用されます
  4. 作成は簡単ですが、アニメーション/効果の可能性はそれほど多くありません

アニメーション@キーフレーム:

  1. 無限のアニメーションに使用できます
  2. 3つ以上の状態を設定できます
  3. 境界なし

どちらもCPUアクセラレーションを使用して、よりスムーズな効果を実現しています。


「CPUアクセラレーション」とは、「GPUアクセラレーション」という意味ですか?"translate"のような非レイアウトの再計算アニメーションがその恩恵を受けると私は信じています
jv-dev

12
  1. アニメーションは、同じトランジションを繰り返し使用しない限り、より多くのコードを必要とします。その場合、アニメーションの方が優れています。

  2. アニメーションなしでスライドインとスライドアウトにさまざまな効果を持たせることができます。元のルールと変更されたルールの両方に異なる遷移があるだけです。

    .two-transitions {
        transition: all 50ms linear;
    }
    
    .two-transitions:hover {
        transition: all 800ms ease-out;
    }
  3. アニメーションはトランジションを抽象化したものに過ぎないため、トランジションがハードウェアアクセラレーションである場合、アニメーションはそうです。違いはありません。

  4. どちらも非常にモダンです。

  5. 私の経験則では、同じトランジションを3回使用すると、おそらくアニメーションになるはずです。これは、将来的に維持および変更が容易になります。ただし、一度しか使用しない場合は、アニメーションを作成するためのタイピングが増えるため、価値がないかもしれません。


また、アニメーションにはキーフレームがあり、非常に複雑で制御された進行を可能にすることも追加する必要があります。
paulcpederson 2013

3

アニメーションはそれだけです-プロパティのセットのスムーズな動作。つまり、一連の要素のプロパティにが起こるかを指定します。アニメーションを定義し、この一連のプロパティがアニメーションプロセス中にどのように動作するかを記述します。

反対側の遷移は、1 つまたは複数のプロパティが変更を実行する方法を指定します。各変更。JavaScriptやCSSを使用するなど、特定のプロパティに新しい値を設定することは常に遷移ですが、デフォルトではスムーズではありません。transitionCSSスタイルで設定することにより、これらの変更を実行する別の(スムーズな)方法を定義します。

遷移は、指定されたプロパティが変更されるたびに実行されるデフォルトのアニメーションを定義していると言えます。


1
私は、指定の両方として、この定義に反対する方法どのような
ザックSaucier

3

パフォーマンスについて言えることはありますか?どちらもハードウェアアクセラレーションを利用していますか?

最新のブラウザでは、H / W加速度特性のために発生しfilteropacityそしてtransform。これは、CSSアニメーションとCSSトランジションの両方に対応しています。


1

.yourClass {
    transition: all 0.5s;
color: #00f;
margin: 50px;
font-size: 20px;
cursor: pointer;
}

.yourClass:hover {
    color: #f00;
}
<p class="yourClass"> Hover me </p>


-1

CSS3アニメーションとCSS3の移行は、あなたが望む答えを与えると信じています。

基本的には、いくつかのポイントがあります:

  1. パフォーマンスが問題になる場合は、CSS3トランジションを選択してください。
  2. 各遷移の後に状態を維持する場合は、CSS3遷移を選択します。
  3. アニメーションを繰り返す必要がある場合は、CSS3アニメーションを選択します。これは、アニメーションの反復回数をサポートしているためです。
  4. 複雑なアニメーションが必要な場合。次に、CSS3アニメーションが推奨されます。

3
#2と#3は真実ではない
Zach Saucier

1
#3がどのように間違っているかわかりませんか?これは、考慮すべき合理的なポイントと思われる、とアニメーションの繰り返しカウントは有効なプロパティのようです:developer.mozilla.org/en-US/docs/Web/CSS/...

1
2つのこと:1)トランジションが後で再び開始された場合、最初の反復の直後でなくても、「繰り返し」のままです。2)アニメーションによっては、すぐに繰り返されるように見せかけるトランジションを作成できます。私の意味の詳細については、CSS-Tricksの記事を参照しください。
Zach Saucier

-1

どちらが良いか気にしないでください。私の贈り物は、1行または2行のコードで問題を解決できる場合は、同様の動作をもたらす一連のコードを記述するのではなく、それを実行することです。とにかく、遷移はアニメーションのサブセットのようなものです。それは単に、トランジションが特定の問題を解決できる一方で、アニメーションがすべての問題を解決できることを意味します。アニメーションを使用すると、各ステージを0%から100%まで制御できます。これは、トランジションでは実際には実行できないものです。アニメーションでは、一連のコードを書く必要がありますが、トランジションでは、作業内容に応じて1行または2行のコードを使用して同じ結果を実行します。JavaScriptの観点からは、遷移を使用するのが最善です。開始と終了の2つのフェーズのみを伴うものは、トランジションを使用します。まとめ、それがストレスの多い場合はしないでください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.