CSS 動的高さ遷移アニメーション効果の実装

CSS 動的高さ遷移アニメーション効果の実装

この質問は、Nuggets のメッセージから生まれました。友人が、次のコードの高さ遷移アニメーションがなぜ無効なのかと尋ねました。

疑似コードはおそらく次のようになります:

{
    高さ: 未設定;
    遷移: すべて 0.3 秒線形。
    変更予定: 高さ;
 
    &。上 {
        高さ: 0;
    }
    &。下 {
        高さ: 未設定;
    }
}

これを実際のデモに復元すると、効果は次のようになります (基本的な考え方は、要素の.up.downクラスを切り替えて、要素を拡大したり閉じたりすることです)。

えっ?とても不思議です。height heightに明確にtransitionを設定したのですが、トランジションアニメーションがトリガーされず、1ステップで直接拡大されるのはなぜでしょうか?

期待される効果は以下のとおりです。

トランジションは高さ: 自動をサポートしていません

上記のコードがheight: unsetに設定されている場合、実際にはheight: autoを設定するのと同じです。私たちの考えは、このコードがテキスト コンテナーの動的な高さをサポートできることを期待することです。展開するたびに、コンテナ自体の高さに遷移するだけです。

仕様を見ると、CSS トランジションが要素の高さの auto への変更をサポートしていないことが原因です。

上記のheight: unset特定の高さの値に置き換えると、アニメーションが有効になります。例:

{
    &。上 {
        高さ: 0;
    }
    &。下 {
      - 高さ: 未設定;
      + 高さ: 500px;
    }
} 

しかし、ダイナミックな高さの変化も実現したいと考えます。他に方法はないのでしょうか?

動的高さに適応するためにmax-heightを巧みに使う

ねえ、ここにとても興味深いちょっとしたトリックがあるんだよ。 height: autoはサポートされていないため、 max-height機能を使用して動的な高さの拡張を実現する別の方法を見つけます。

上記のコードを修正して、 height: 0max-height: 0に、 height: auto max-height: 1000pxに置き換えてみましょう。疑似コードはおそらく次のようになります。

{
    最大高さ: 0;
    遷移: 最大高さ 0.3 秒線形;
 
    &。上 {
        最大高さ: 0;
    }
    &。下 {
        最大高さ: 1000px;
    }
}

実際のコンテナの最大の高さを見積もってみましょう。ここでの1000px 、最大の高さよりも高くする必要があります。ただし、あまり高く設定しすぎることはできません。最高設定は、最大使用高さに近い値にする必要があります。その理由については後ほど説明します。

max-heightテキストの最大の高さのみを制限するため、コンテナの実際の高さが最大の高さの制限に達しない場合は、それ以上の高さは増加しません。効果を見てみましょう。

CodePen デモ - 高さプロパティの遷移が機能しない

小さな欠陥

全体的な効果は依然として非常に素晴らしいですが、もちろん、2つの小さな欠陥があるかもしれません。

  1. 実際のシナリオでmax-heightが必要であり、他の機能がある場合、この方法ではニーズを満たせない可能性があります。
  2. もう一つの欠点は視覚的な遅延であり、実際の高さとの差が大きいほど顕著になります。つまり、コンテナの実際の高さが 200 ピクセルの場合、 max-heightは 1000 ピクセル、アニメーション時間は 1 秒、イージング関数は線形です。実際のアニメーション遷移時間は 0 ピクセルから 200 ピクセルの高さまでわずか 0.2 秒なので、注意が必要です。

元の拡張アニメーションでは、コンテナの高さが 1 秒で 1000 ピクセルまで伸びると予想されていましたが、実際には 200 ピクセルで停止したため、アニメーション時間はわずか 0.2 秒でした。まとめると、この方法は良いものですが、使用する際には具体的な分析が必要です。

CSS 動的高さ遷移アニメーション効果の実装に関するこの記事はこれで終わりです。CSS 高さ遷移アニメーションの関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

<<:  Docker コンテナの正常なシャットダウン前にトラップを使用して環境のクリーンアップを実行する

>>:  HTML はモバイル上で固定フローティング半透明検索ボックスを実装します

推薦する

jsは古典的なマインスイーパゲームを実装します

この記事の例では、古典的なマインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有し...

オンライン MYSQL 同期エラーのトラブルシューティング方法の概要 (必読)

序文フェイルオーバーが発生した後、よくある問題は同期エラーです。データベースが小さい場合は、ダンプし...

HTML マーキー文字フラグメントのスクロール

その特性は次のとおりです。方向アクティブな字幕のスクロール方向を設定するコードは次のとおりです。 &...

Windows に MySQL 8.0.16 をインストールする手順とエラーの解決方法

1. はじめに: mysql8以降は、これまでよく使われていたバージョンと比べてかなり変更点が大きい...

IE8はマルチ互換モードを使用してWebページを正常に表示します

IE8には複数の互換モードがあります。 IE プラットフォームの設計者である Chris Wilso...

CSSはカラフルでスマートな影の効果を実現します

背景前景要素から特定の色を継承する影の効果を作成する方法を知りたいと思ったことはありませんか?方法に...

InnoDB ロック (レコード、ギャップ、Next-Key ロック) の詳細な説明

レコード ロックは、単一のインデックス レコードをロックします。レコード ロックは常にインデックスを...

SpringBoot でマイクロサービスを構築するために Docker を使用した実際の記録を分析する

それは何ですか? Spring Boot は、Spring オープンソース組織のサブプロジェクトであ...

ウェブサイトアイコンを追加するにはどうすればいいですか?

最初のステップは、アイコン作成ソフトウェアを準備することです。まず、いわゆるアイコンは拡張子 .ic...

MySQLのユーザー管理とPostgreSQLのユーザー管理の違い

1. MySQL ユーザー管理[例1.1] ローカルMySQLサーバーのテストデータベースにroot...

VMware での Linux CentOS6.9 インストール グラフィック チュートリアル

技術初心者として、初めて Linux システムをインストールするプロセスを記録しています。まず、Wi...

MySQL に 1,000 万件のレコードを素早く挿入する方法

面接で「MySQL に 1,000 万件のレコードをすばやく挿入するにはどうすればよいか」という質問...

MySQL 5.7.23 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

MySQLインストーラをダウンロードする公式ダウンロードアドレス: http://dev.mysq...

レスポンシブレイアウトの概要(推奨)

レスポンシブレイアウト開発の基礎知識この章は主に以下の部分に分かれています• レスポンシブデザインを...

ES6拡張演算子の理解と使用シナリオ

目次1. 適用メソッドを置き換え、関数を呼び出すときにパラメータを処理する2. 残りパラメータ(残り...