要素に複数のCSS遷移を設定するにはどうすればよいですか?


327

これはかなり簡単な質問ですが、CSS遷移プロパティに関する非常に優れたドキュメントは見つかりません。以下はCSSスニペットです。

    .nav a
{
    text-transform:uppercase;
    text-decoration:none;
    color:#d3d3d3;
    line-height:1.5 em;
    font-size:.8em;
    display:block;
    text-align:center;
    text-shadow: 0 -1.5em 0 rgba(255, 255, 255, 0.15);
    -webkit-transition: color .2s linear;
    -moz-transition: color .2s linear;
    -o-transition: color .2s linear;
    transition: color .2s linear;
    -webkit-transition: text-shadow .2s linear;
    -moz-transition: text-shadow .2s linear;
    -o-transition: text-shadow .2s linear;
    transition: text-shadow .2s linear;
}

.nav a:hover
{
    color:#F7931E;
    text-shadow: 0 1.5em 0 rgba(247, 147, 30, 0.15);
}

ご覧のとおり、遷移プロパティは互いに上書きしています。現状では、テキストシャドウはアニメーション化されますが、色はアニメーション化されません。両方を同時にアニメートするにはどうすればよいですか?回答ありがとうございます。


いけないことを忘れてtransition: all:サファリ/ iPad用の非常にバギーですjoelglovier.com/writing/...
OğuzhanKahyaoğlu

回答:


584

遷移プロパティは、遷移をサポートするすべてのブラウザでカンマ区切りです。

.nav a {
  transition: color .2s, text-shadow .2s;
}

easeはデフォルトのタイミング関数なので、指定する必要はありません。本当にlinear必要な場合は、それを指定する必要があります。

transition: color .2s linear, text-shadow .2s linear;

これは繰り返しになります。そのため、複数のプロパティで同じ時間とタイミング関数を使用する場合transition-*は、省略形の代わりにさまざまなプロパティを使用することをお勧めします。

transition-property: color, text-shadow;
transition-duration: .2s;
transition-timing-function: linear;

11
変換は順序が重要なチェーンであるため、関数チェーンに慣れている場合は構文が
快適だと思い

1
CSSのトランジションに関する一般的なコメントとして、複数のトランジション定義を次々に持つことは機能しないことを心に留めておく必要があります。それを達成するには、これらは同じ定義内にある必要があります(このSAのように)。CSSの基本ルールでは、「最新の」ルールが適用されるため、別々の行に複数の定義がある場合、最後の定義のみが適用されます。FYI
TheCuBeMan 2018

37

また、以下を使用して大幅に単純化することもできます。

.nav a {
    -webkit-transition: all .2s;
}

44
特に指定がない限り、デフォルトで「すべて」を削除できます。
joshnh 2012

13
優れた点として+1しますが、特にチーム間の一貫性と理解のために、それをそこに維持することは有用であると思います。
XML

4
これに注意!モバイル向けに開発する場合、ハードウェアアクセラレーション要素と組み合わせると、新しいデバイスに問題が発生し、古いデバイスが使用できなくなります。
Ilya Karnaukhov 2014

2
ありがとう、@CanerŞahin。この点を理解するのに役立つドキュメントやベンチマークツールを教えていただけますか?また、「すべて」が指定子をまったく使用しないよりも悪いことを示す証拠を見たことはありますか?
XML

3
@XMLそれが説明された方法には2つのマイナスの影響があります。1、「すべて」の使用により、ブラウザは追加のリソースを追加します。ブラウザはその要素を注意深く聞き取り、パフォーマンスの低下やページのジャンクを作成する可能性のある変更を待ちます。2、開発者が後で背景色を入れた場合に予期しない効果が発生する可能性があります。この背景色は次に移行され、予期しない、または必要とされない可能性があります。
Stefan Burt 2017年

29

次のようなものは、同時に複数の遷移を可能にします:

-webkit-transition: color .2s linear, text-shadow .2s linear;
   -moz-transition: color .2s linear, text-shadow .2s linear;
     -o-transition: color .2s linear, text-shadow .2s linear;
        transition: color .2s linear, text-shadow .2s linear;

例:http : //jsbin.com/omogaf/2


24

すべてのプロパティを同じようにアニメーション化する場合は、それぞれを個別に設定して、コードを繰り返さないようにすることができます。

 transition: all 2s;
 transition-property: color, text-shadow;

詳細はここにあります:複数のプロパティを持つCSSトランジションの省略表現?

プロパティall(transition-property overwrite 'all')は使用しないでください。不要な動作や予期しないパフォーマンスヒットが発生する可能性があります。



1

2つのプロパティを一度に移行するためのLESSミックスインを次に示します。

.transition-two(@transition1, @transition1-duration, @transition2, @transition2-duration) {
 -webkit-transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
    -moz-transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
      -o-transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
          transition: @transition1 @transition1-duration, @transition2 @transition2-duration;
}

autoprefixerはさらに優れています!
2014

オートプレフィックス+スタイラスFTW。
ジェイソンリドン2015

1

持続時間、遅延、タイミング関数のさまざまな値で複数の遷移を設定することが可能です。異なる遷移を分割するには,

button{
  transition: background 1s ease-in-out 2s, width 2s linear;
  -webkit-transition: background 1s ease-in-out 2s, width 2s linear; /* Safari */
}

リファレンス:https : //kolosek.com/css-transition/


0

プロパティを完全に指定しないようにすることもできます。

#box {
  transition: 0.4s;
  position: absolute;
  border: 1px solid darkred;
  bottom: 20px; left: 20px;
  width: 200px; height: 200px;
  opacity: 0;
}

#box.on {
  opacity: 1;
  height: 300px;
  width: 500px;
 }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.