CSSトランジションは高さを変更することで要素を拡大したり縮小したりします。

CSSトランジションは高さを変更することで要素を拡大したり縮小したりします。

一般的な開発ニーズとして、要素の一部を必要になるまで折りたたんでおきたいことが挙げられます。 Bootstrap や JQuery などの一般的なフレームワークには、トランジション効果を提供するものがあります。ただし、CSS Transition を使用すると、高さの遷移に関して非常に柔軟に対応できます。したがって、プロジェクトに追加のフレームワークを含める必要はありません。
次に、CSS Transition を使用して height プロパティをアニメーション化する方法と、問題点と解決策について見ていきましょう。
効果は👉で確認できます

遷移の高さ

私たちが実現したいのは、「もっと見る」ボタンをクリックすると、要素の高さが増加して記事のすべてのコンテンツが表示され、もう一度クリックすると元のサイズに戻ることです。
このための CSS クラスを作成します。このクラスは、「詳細を表示」ボタンがクリックされたときに JavaScript を使用して <article> 要素に追加されます。
まず、HTML ファイルに <div> 要素を追加し、コンテンツを追加します。

<記事id="記事">
  <h3>CSS トランジションを使用して高さを変更することで要素を展開したり折りたたんだりする</h3>
  <p>Lorem ipsum、痛みはエリートのアディピス中毒者によってもたらされました。一時的に症状が現れ、その後、責任を問われました。完全に元に戻ったため、通常の生活に戻ることができず、法的措置が取られました。</p>

  <p> lorem ipsum dolor sit amet adipisicing elit、ab doloribus optio。エクササイズのCommodi reiciendis culpa optio aliquam incidunt、ab sapiente dignissimos、sit deleniti boluptatibus animi repudiandae 、nisi ullam boluptatum odio non eum vel vel dolorum dolorum adipisci culpa

  <p> lorem ipsum dolor sit amet adipisicing elit、ab doloribus optio。エクササイズのCommodi reiciendis culpa optio aliquam incidunt、ab sapiente dignissimos、sit deleniti boluptatibus animi repudiandae 、nisi ullam boluptatum odio non eum vel vel dolorum dolorum adipisci culpa

  <p> lorem ipsum dolor sit amet adipisicing elit、ab doloribus optio。エクササイズのCommodi reiciendis culpa optio aliquam incidunt、ab sapiente dignissimos、sit deleniti boluptatibus animi repudiandae 、nisi ullam boluptatum odio non eum vel vel dolorum dolorum adipisci culpa
</記事>
<button id="seeMoreBtn">もっと見る</button>

CSS スタイルは次のとおりです。

記事 {
  最大幅: 800px;
  高さ: 300px;
  オーバーフロー-y: 非表示;
}

/* ボタンがクリックされたときにこのクラスを追加します */
記事.extended {
  高さ: 628px;
}

ボタン {
  パディング: .6rem;
}

JavaScript は次のとおりです。

定数seeMore = document.getElementById('seeMoreBtn')
定数記事 = document.getElementById('記事')

seeMore.addEventListener('click', () => {
  article.classList.toggle('拡張')

  const 拡張 = article.classList.contains('拡張')
  if (拡張) {
    seeMore.innerHTML = 'コンテンツを折りたたむ'
  } それ以外 {
    seeMore.innerHTML = 'もっと見る'
  }
})

ボタンがクリックされたときにコンテンツがスムーズに上下にスライドできるように、記事に CSS トランジション プロパティを追加します。

記事 {
  最大幅: 800px;
  高さ: 300px;
  オーバーフロー-y: 非表示;
  遷移: 高さ 0.4 秒の線形;
}

これを記事に適用すると、スムーズに上下にスライドできることがわかります。シンプルで便利ですが、この方法には制限があります。以下で見てみましょう。

制限

この制限は、高さがわかっているかどうかです。上記の例では、記事の高さが明確にわかっており、非常にうまく機能しますが、動的なコンテンツを扱う場合、要素の高さはわかりません。また、画面サイズやその他の手段によって高さが変わることもあります。
実際、解決策は非常に簡単です。動的コンテンツの場合、要素の高さを auto に設定する必要があります。こうすることで、要素の高さの増減が適応されます。しかし、別の問題が発生します。要素の高さが自動に設定されている場合、CSS トランジションは機能しません。
幸いなことに、JavaScript をさらに使用しなくてもこの問題を解決する方法があります。

解決

解決策は、height プロパティの代わりに max-height プロパティを変換することです。まず、要素が到達できる最大の高さを見積もる必要があります。次に、要素が拡大するときに、要素の max-height を推定値よりも大きく設定します。
height プロパティを max-height に変更します。

記事 {
    最大幅: 800px;
    最大高さ: 300px;
    オーバーフロー-y: 非表示;

    /* 高さに合わせて遷移時間を増やす */
    遷移: 最大高さ 0.7 秒線形;
}

記事.展開{
    最大高さ: 1500px;
}

この方法ではアニメーションが機能し、必要な効果が得られます。必要な効果に応じて遷移時間を調整する必要がある場合があります。

CSSトランジションの高さを変更して要素を展開したり折りたたんだりする方法についての記事はこれで終わりです。CSS高さを使用した要素の展開と折りたたみの詳細については、123WORDPRESS.COMの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

<<:  指定されたIEブラウザのレンダリング方法の詳細な理解

>>:  Centos7 で NIS を構成する詳細な手順

推薦する

MySQL EXPLAIN出力列の詳細な説明

1. はじめにEXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情...

CSS3は赤い封筒を振る効果を実現します

赤い封筒の揺れ効果を実現するには要件があります。これまでやったことがないので、記録しておきます。ヘヘ...

MySQL トランザクション分離レベルの表示と変更の例

トランザクション分離レベルを確認するMySQL では、'%tx_isolation%'...

VMware のインストールと使用時の問題と解決策

仮想マシンは使用中であるか、接続できません次のようなエラーが報告された場合解決まずこのページにアクセ...

React クラスコンポーネントのライフサイクルと実行順序

1. Reactコンポーネントを定義する2つの方法1. 関数コンポーネント。単純な関数コンポーネント...

MySQL における Datetime と Timestamp の使用の概要

目次1. MySQL で現在の時刻を表現するにはどうすればよいでしょうか? 2. TIMESTAMP...

macOS SierraにApache2.4+PHP7.0+MySQL5.7.16をインストールする

Mac システムには PHP と Apache が付属していますが、必要なバージョンではない場合があ...

MySQL の null 可能フィールドは NULL に設定する必要がありますか、それとも NOT NULL に設定する必要がありますか?

MySQL を頻繁に使用する人は、次のような状況に遭遇する可能性があります。 1. フィールド タ...

JavaScript でドラッグ スライダー パズルの検証機能を実装します (html5、canvas)

導入:スライダー ドラッグ検証は現在、多くの場所で使用されています。週末に 1 つ作成しようと思い、...

CentOSはローカルyumソース/Alibaba Cloud yumソース/163yuanソースを設定し、yumソースの優先順位を設定します。

1. Centosイメージを使用してローカルのyumソースをビルドするCentOS をインストール...

MIME エンコーディングの概要 (オンライン情報と実際の経験から統合)

1. MIME: 多目的インターネットメール拡張インペリアル カレッジ オブ コンピュータ オンラ...

HTML テーブルタグチュートリアル (8): 背景画像属性 BACKGROUND

テーブルの背景画像を設定します。任意の GIF または JPEG 画像ファイルを使用できます。基本的...

Flex プログラム Firefox で中国語を入力すると文字化けするバグ

Firefox の下位バージョンでは中国語の文字を入力できず、上位バージョンでは文字化けした文字が表...

Vueコンポーネントの再利用と拡張の詳細な説明

目次概要延長は必要ですか?スロットJavaScript ユーティリティ関数拡張コンポーネントの複数の...

MySQL で左結合を使用して where 条件を追加する問題の詳細な分析

現在の需要:グループとファクターの 2 つのテーブルがあります。1 つのグループは複数のファクターに...