ページ内のリストプルダウン効果を実現するための純粋なCSS

ページ内のリストプルダウン効果を実現するための純粋なCSS

次のような効果がよく見られます。

スライドアニメーション

そうです、ページ上でよく使われる「展開と折りたたみ」のインタラクション形式です。通常のやり方では、display属性値を制御してnoneと他の値を切り替えるのですが、機能は実現できても効果が非常に硬いため、このような要件があります。つまり、要素が展開と折りたたみ時に明らかな高さのスライド効果を持つことができることが期待されます。

以前の実装では、jQuery のslideUp()/slideDown()メソッドを使用できましたが、モバイル側では CSS3 アニメーションが適切にサポートされているため、モバイル JavaScript フレームワークはアニメーション モジュールを提供していません。ここで、自然に CSS3 テクノロジーが思い浮かびます。


私の最初の反応はheight+overflow:hidden;を使用することです。これにより、パフォーマンスの問題を回避できるだけでなく、表示の問題も防ぐことができます。しかし、すぐに、表示する必要のあるコンテンツは多くの場合動的であり、つまりコンテンツの高さが固定されていないことに気付きました (もちろん、 overflow-y:auto;今はそれについては説明しません)。この効果を実現するには、高さに「非固定値自動」を使用する必要があります。

ただし、 auto数値ではなくキーワードです。そのため、数値とキーワードは計算できないという暗黙のルールの下で、 heightを使用して0pxautoを切り替えると、トランジションやアニメーション効果を形成できません。

CSS のclip-pathプロパティについても同じことが言えます。多くの初心者は none と特定の値の間でアニメーション効果を作成することに慣れていますが、これは不可能です。

したがって、記事の冒頭の効果を実現するために、著者は max-height 属性を推奨します。

<div class="アコーディオン">
	<input id="collapse1" type="radio" name="tap-input" 非表示 />
	<input id="collapse2" type="radio" name="tap-input" 非表示 />
	<input id="collapse3" type="radio" name="tap-input" 非表示 />
	<記事>
		<label for="collapse1">リスト 1</label>
		<p>コンテンツ 1<br>コンテンツ 2<br>コンテンツ 3<br>コンテンツ 4</p>
	</記事>
	<記事>
		<label for="collapse2">リスト 2</label>
		<p>コンテンツ 1<br>コンテンツ 2<br>コンテンツ 3<br>コンテンツ 4</p>
	</記事>
	<記事>
		<label for="collapse3">リスト 3</label>
		<p>コンテンツ 1<br>コンテンツ 2<br>コンテンツ 3<br>コンテンツ 4</p>
	</記事>
</div>
.アコーディオン {
	幅: 300ピクセル;
}
.accordion 記事 {
	カーソル: ポインタ;
}
ラベル {
	表示: ブロック;
	パディング: 0 20px;
	高さ: 40px;
	背景色: #f66;
	カーソル: ポインタ;
	行の高さ: 40px;
	フォントサイズ: 16px;
	色: #fff;
}
p {
	オーバーフロー: 非表示;
	パディング: 0 20px;
	マージン: 0;
	境界線: 1px 実線 #f66;
	上境界線: なし;
	境界線の下部の幅: 0;
	最大高さ: 0;
	行の高さ: 30px;
	遷移: すべて 0.5 秒の緩和;
}
入力:nth-child(1):チェック済み ~ 記事:nth-of-type(1) p,
入力:nth-child(2):checked ~ 記事:nth-of-type(2) p,
入力:nth-child(3):チェック済み ~ 記事:nth-of-type(3) p {
	境界線の下の幅: 1px;
	最大高さ: 130px;
}

CSS では、 min-height/max-heightアダプティブ レイアウトまたはフルイド レイアウトでのみ表示されます。拡張後のmax-height値に関しては、設定された値がコンテンツの高さよりも大きいことを確認するだけで済みます。これは、max-height > height の場合、要素の高さは height 属性に基づいて計算されるためです

ただし、max-height の値をあまり大きく設定しないことをお勧めします。結局のところ、トランジションやアニメーションの時間は「コンテンツを表示する時間」ではなく「アニメーションを完了する時間」です。


引っ張り効果を示す別の方法があります:

スライドダウンアニメーション

マウスをコンポーネントの一部に合わせると、その部分が拡大して隣接する部分を圧迫し、マウスを離すと元の状態に戻るのが特徴です。マウスを素早く動かすと、アコーディオン効果が生成されます。

JS を使用してアコーディオン効果を実現するには、 mouseenterおよびmouseleaveマウス イベントを監視する必要があり、CSS の:hover両方の効果を置き換えることができます。したがって、純粋な CSS でアコーディオン効果を実現するための鍵は:hoverです。コア コードは次のとおりです。

li {
}
li:ホバー{
}

レイアウトに関しては、行内で同じ幅または異なる幅で一列に並んだ要素を拡大または縮小したい場合は、 flex を使用する方がよいでしょう。

<ul class="accordion">
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>
.アコーディオン {
	ディスプレイ: フレックス;
	幅: 600ピクセル;
	高さ: 200px;
}
li {
	フレックス: 1;
	カーソル: ポインタ;
	遷移: すべて 300 ミリ秒;
}
li:n番目の子(1) {
	背景色: #f66;
}
li:n番目の子(2) {
	背景色: #66f;
}
li:n番目の子(3) {
	背景色: #f90;
}
li:n番目の子(4) {
	背景色: #09f;
}
li:n番目の子(5) {
	背景色: #9c3;
}
li:n番目の子(6) {
	背景色: #3c9;
}
li:ホバー{
	フレックス: 2;
	背景色: #ccc;
}

ここで注目すべき点は、アニメーションの遅延などの「特別な」ケースでは、 CSS カスタム変数をインライン スタイルとして HTML に挿入してコードを簡素化できることです。プロジェクト リファクタリングから始めて、プロジェクトで CSS3 カスタム変数がどのように使用されるかについて説明します。

純粋な CSS でページ上のリスト プルダウン効果を実現する方法については、これで終わりです。より関連性の高い CSS ページ リスト プルダウン コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  HTMLのセマンティクスといくつかの簡単な最適化についての簡単な説明

>>:  Apache での ab パフォーマンス テスト結果を分析する

推薦する

Linux の wget コマンドの詳細な紹介

目次まずwgetをインストールするヘルプマニュアルを見る1. wgetを使用して単一のファイルをダウ...

CSSアニメーションを途中で止めて姿勢を維持する方法

序文かつて、難しい問題に遭遇しました。タワークレーンからスイングハウスを落下させる必要がありましたが...

Nginx セッション損失問題の解決策

nginx をリバース プロキシ tomcat として使用する場合、セッション損失が発生する可能性が...

html-webpack-plugin の使用方法の詳細な説明

最近、React プロジェクトで初めてhtml-webapck-pluginプラグインを使用しました...

詳細なアイデアを備えたシンプルな計算機の HTML 実装

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

MySQL のデータ統計に関するヒント

よく使用されるデータベースである MySQL では、多くの操作が必要です。デジタル操作には非常に便利...

vue3 再帰コンポーネントカプセル化の全プロセス記録

目次序文1. 再帰コンポーネント2. 右クリックメニューコンポーネント要約する序文今日、プロジェクト...

Reactにおける不変値の説明

目次不変の値とは何ですか?不変の値を使用するのはなぜですか? Reactのパフォーマンス最適化は不変...

MySQL がテーブルを読み取れないエラー (MySQL 1018 エラー) の解決方法

1. エラーの再現MySQL データベースにはアクセスできますが、データベース テーブルを読み取るこ...

Reactでのこのリファレンスの詳細な説明

目次原因:以下を実行します: 1. コンストラクター2.レンダリング機能3.bind関数とarrow...

ホストサービスにアクセスするDockerでのサービスの実装

目次1. シナリオ2. 解決策3. 結論4. 参考文献1. シナリオ日常の開発およびテスト作業には ...

Vueはページdivボックスのドラッグアンドドロップソート機能を実装します

vue は、ページ上の div ボックスのドラッグ アンド ドロップ ソート機能を実装します。 序文...

Docker でローカルにイメージをインポート/保存/読み込み/削除する方法

1. Dockerはローカルイメージをインポートする場合によっては、イメージをローカルまたは別の友人...

MySQL トリガーの基本的な使い方(作成、表示、削除など)の詳細な説明

目次1. MySQLトリガーの作成: 1. MySQLトリガー作成構文: 2. MySQL作成構文の...

Vueベースのビデオプレーヤーの実装例

既存のビデオ プレーヤーがニーズを満たせない場合は、ビデオを自分でカプセル化する必要があります。ビデ...