私はサイトの雰囲気を「近代化」するためにトランジションを使い始めました。これまでのところ、 :hover
トランジションはうまく機能しています。今、クラスが変更されたときなど、他のものに基づいて遷移をトリガーできるかどうか疑問に思っています。
関連するCSSは次のとおりです。
#myelem {
opacity: 0;
display: none;
transition: opacity 0.4s ease-in, display 0.4s step-end;
-ms-transition: opacity 0.4s ease-in, display 0.4s step-end;
-moz-transition: opacity 0.4s ease-in, display 0.4s step-end;
-webkit-transition: opacity 0.4s ease-in, display 0.4s step-end;
}
#myelem.show {
display: block;
opacity: 1;
transition: opacity 0.4s ease-out, display 0.4s step-start;
-ms-transition: opacity 0.4s ease-out, display 0.4s step-start;
-moz-transition: opacity 0.4s ease-out, display 0.4s step-start;
-webkit-transition: opacity 0.4s ease-out, display 0.4s step-start;
}
変更をトリガーするJavaScriptは次のとおりです。
document.getElementById('myelem').className = "show";
しかし、移行は起こっていないようです-ある状態から別の状態にジャンプしているだけです。
私は何を間違えていますか?
display
プロパティを削除しても機能します。
#myelem {
opacity: 0;
transition: opacity 0.4s ease-in;
-ms-transition: opacity 0.4s ease-in;
-moz-transition: opacity 0.4s ease-in;
-webkit-transition: opacity 0.4s ease-in;
}
#myelem.show {
opacity: 1;
transition: opacity 0.4s ease-out;
-ms-transition: opacity 0.4s ease-out;
-moz-transition: opacity 0.4s ease-out;
-webkit-transition: opacity 0.4s ease-out;
}
この理由は、番号を持つCSSプロパティのみを移行できるためです。 「50%状態」は「display: none;
"および" display: block;
"?計算できないため、display
プロパティをアニメーション化することはできません。
状態間の遷移にdisplay
プロパティを使用することはできません。
コメントを含む@MarcoKによって提供された答えは、すでに正しい方向を示しています。 display
プロパティの設定hinderstransition
。
Aベタープラクティスは、将来のために、ブラウザベンダーのプレフィックス付きバージョンの後にプレフィックスなし(標準)バージョンを置くことです-証明。後者のプロパティは前者を上書きします。
その他の改善:
-ms-transition
はどのInternet Explorerでもサポートされていません-o-transition
というプレフィックスが付いたOperaのベンダーもあります。グローバルブラウザ。完成させるためにそれを入れますCSS:
#myelem {
opacity: 0;
-webkit-transition: opacity .4s ease-in;
-moz-transition: opacity .4s ease-in;
-o-transition: opacity .4s ease-in;
transition: opacity .4s ease-in;
}
#myelem.show {
opacity: 1;
-webkit-transition: opacity .4s ease-out;
-moz-transition: opacity .4s ease-out;
-o-transition: opacity .4s ease-out;
transition: opacity .4s ease-out;
}
次の代わりに、CSSで要素の表示と非表示をアニメーション化することができます。
display: none;
/* and */
display: block;
つかいます:
overflow: hidden;
max-height: 0;
/* and */
max-height: 9999999px;
このプロパティを置き換えるため、transition
を使用してcss値をアニメーション化できます。