CSS で 2 列レイアウトを実現する N 通りの方法

CSS で 2 列レイアウトを実現する N 通りの方法

1. 2 列レイアウトとは何ですか?

2 列レイアウトには、左側が固定幅で右側が適応幅のレイアウトと、両方の列が適応型 (つまり、左側の幅は子要素によって決定され、残りのスペースは右側に埋められる) の 2 種類があります。 CSS面接でもよく聞かれる質問であり、フロントエンド開発エンジニアなら習得しておきたいスキルです。以下で実装方法を紹介します。

2. 左側の固定幅と右側の適応幅を実現するにはどうすればよいですか?

1. 二重インラインブロック

原則: 両方の要素を dislpay:inline-block に設定します。HTML スペースの影響を排除するために、親要素の font-size を 0 に設定し、右側の適応要素の幅を calc 関数を使用して計算する必要があります。 2 つの要素の高さが異なる場合は、vertical-align: top を設定して調整できます。

デメリット: 親要素のフォントサイズが0に設定されているため、子要素のテキストは表示されません。

<!DOCTYPE html>
<html>
	<ヘッド>
		<メタ文字セット="utf-8">
		<タイトル></タイトル>
		<スタイル>
		   *{
			   パディング: 0;
			   マージン: 0;
		   }
			。箱{
				高さ: 600px;
				幅: 100%;
				フォントサイズ:0;
			}
			。左{
				表示: インラインブロック;
				幅: 100ピクセル;
				高さ: 200px;
				背景色: 赤;
				垂直方向の位置合わせ: 上;
				
			}
			。右{
				表示: インラインブロック;
				幅: calc(100% - 100px);
				高さ: 400px;
				背景色: 青;
				垂直方向の位置合わせ: 上;
			}
			
		</スタイル>
	</head>
	<本文>
		<div>
			<div>
				<span>1234</span>
			</div>
			<div>
				<span>1234</span>
			</div>
		</div>
	</本文>
</html>

2. ダブルフローティング

原則:2つの要素をフロートに設定し、右側の適応要素の幅をcalc関数を使用して計算します。

デメリット: 親要素のフロートをクリアする必要がある

<!DOCTYPE html>
<html>
	<ヘッド>
		<メタ文字セット="utf-8">
		<タイトル></タイトル>
		<スタイル>
			*{
				パディング: 0;
				マージン: 0;
			}
			。箱{
				高さ: 600px;
				幅: 100%;

			}
			。左{
				フロート: 左;
				幅: 100ピクセル;
				高さ: 200px;
				背景色: 赤;
			}
			。右{
				フロート: 左;
				幅: calc(100% - 100px);
				高さ: 400px;
				背景色: 青;
			}
		</スタイル>
	</head>
	<本文>
		<div>
			<div>
				<span>
					123だだだだだだだだだだだだだだだだだだだ
				</span>
			</div>
			<div></div>
		</div>
	</本文>
</html>

原則: 左側の固定幅要素はフロートし、右側の適応型要素は margin-left 値を固定幅要素の幅よりも大きく設定します。

デメリット: 親要素のフロートをクリアする必要がある

<!DOCTYPE html>
<html>
	<ヘッド>
		<メタ文字セット="utf-8">
		<タイトル></タイトル>
		<スタイル>
			*{
				パディング: 0;
				マージン: 0;
			}
			。箱{
				高さ: 600px;
				幅: 100%;

			}
			。左{
				フロート: 左;
				幅: 100ピクセル;
				高さ: 200px;
				背景色: 赤;
			}
			。右{
				左マージン: 100px;
				高さ: 400px;
				背景色: 青;
			}
		</スタイル>
	</head>
	<本文>
		<div>
			<div>
				<p>1234</p>
			</div>
			<div>
				<p>1234</p>
			</div>
		</div>
	</本文>
</html>

4. フローティング + BFC

原則: 親要素にoverflow:hiddenを設定し、左側の固定幅要素をフロートし、右側のアダプティブ要素にoverflow:autoを設定してBFCを作成します。

デメリット: 左の要素のコンテンツが設定された幅を超えると、右の要素と重なってしまいます。

<!DOCTYPE html>
<html>
	<ヘッド>
		<メタ文字セット="utf-8">
		<タイトル></タイトル>
		<スタイル>
			*{
				パディング: 0;
				マージン: 0;
			}
			。箱{
				高さ: 600ピクセル;
				幅: 100%;
				オーバーフロー: 非表示;
			}
			。左{
				フロート: 左;
				幅: 100ピクセル;
				高さ: 200px;
				背景色: 赤;
			}
			。右{
				オーバーフロー:自動;
				高さ: 400px;
				背景色: 青;
			}
		</スタイル>
	</head>
	<本文>
		<div>
			<div>111111111111111111111111</div>
			<div>111111111111111111111111111111111111111111111</div>
		</div>
		<div></div>
	</本文>
</html>

5.絶対+左余白

原則:親要素は相対的に配置され、左側の要素は絶対的に配置され、右側の適応要素の margin-left の値は固定幅要素の幅よりも大きくなるように設定されます。

デメリット: 親要素が相対配置に設定されている

<!DOCTYPE html>
<html>
	<ヘッド>
		<メタ文字セット="utf-8">
		<タイトル></タイトル>
		<スタイル>
			*{
				パディング: 0;
				マージン: 0;
			}
			。箱{
				高さ: 600px;
				幅: 100%;
				位置: 相対的;
			}
			。左{
				位置: 絶対;
				幅: 100ピクセル;
				高さ: 200px;
				背景色: 赤;
			}
			。右{
				左マージン: 100px;
				高さ: 400px;
				背景色: 青;
			}
		</スタイル>
	</head>
	<本文>
		<div>
			<div></div>
			<div></div>
		</div>
	</本文>
</html>

6.フレックスレイアウト

原則: 親要素はdisplay: flexを設定し、アダプティブ要素はflex: 1を設定します。

デメリット: 互換性の問題があり、IE10以下ではサポートされていません

<!DOCTYPE html>
<html>
	<ヘッド>
		<メタ文字セット="utf-8">
		<タイトル></タイトル>
		<スタイル>
			*{
				パディング: 0;
				マージン: 0;
			}
			。箱{
				高さ: 600px;
				幅: 100%;
				ディスプレイ: フレックス;
			}
			。左{
				幅: 100ピクセル;
				高さ: 200px;
				背景色: 赤;
			}
			。右{
				フレックス: 1;
				高さ: 400px;
				背景色: 青;
			}
		</スタイル>
	</head>
	<本文>
		<div>
			<div></div>
			<div></div>
		</div>
	</本文>
</html>

3. 両側の要素は適応的である

厳密に言えば、どちらの要素も適応的ではありませんが、上記の固定幅は子要素によって拡張されるように変更されます。

1. フローティング + BFC

原理は上記と同じですが、左の要素の幅は設定されず、子要素によって拡張される点が異なります。

2. テーブルレイアウト

原則: 親要素は display:table で、左の要素は div で囲まれています。div は display:table-cell と width:0.1% (最小幅を確保するため) に設定されています。左の要素内に margin-right が設定され、右の要素に display:table-cell が設定されています。

デメリット: IE7 以下ではサポートされていません。display:table を使用すると、padding が無効になり、親要素の line-height プロパティが無効になり、display:table-cell を使用すると margin が無効になります。

<!DOCTYPE html>
<html>
	<ヘッド>
		<メタ文字セット="utf-8">
		<タイトル></タイトル>
		<スタイル>
			。親{
				表示: テーブル;
				幅: 100%;
				
			}
			。箱{
				表示: テーブルセル;
				幅: 0.1%;
			}
			。左{
				右マージン: 20px;
				背景色: 赤;
				高さ: 200px;
			}    
			。右{
				表示: テーブルセル;
				背景色: 青;
				高さ: 300px;
			}
		</スタイル>
	</head>
	<本文>
		<div>
			<div>
				<div>126545453dddddddd453453453</div>
			</div>
			<div>12121</div>
		</div>
	</本文>
</html>

3.フレックスレイアウト

原理と欠点は上記のフレックスレイアウトと同じです。

4. グリッドレイアウト

原則: 親要素は display: grid、grid-template-columns: auto 1fr; を設定します (この属性は列の幅を定義します。auto キーワードは、ブラウザーが長さを独自に決定することを意味します。fr は相対的なサイズ単位で、残りのスペースが均等に分割されることを示します) grid-gap: 20px (行間隔)

デメリット: 互換性が低い、IE11 はサポートしていない、Google 57 以上のみサポート可能

<!DOCTYPE html>
<html>
	<ヘッド>
		<メタ文字セット="utf-8">
		<タイトル></タイトル>
		<スタイル>
			。親{
				表示:グリッド;
				グリッドテンプレート列:自動 1fr;
				グリッドギャップ:20px
			}  
			。左{
				背景色: 赤;
				高さ: 200px;
			}
			。右{
				高さ:300px;
				背景色: 青;
			}
		</スタイル>
	</head>
	<本文>
		<div>
			<div>111111111111111111111111</div>
			<div></div>
		</div>
	</本文>
</html>

CSS で 2 列レイアウトを実現する N の方法についての記事はこれで終わりです。CSS 2 列レイアウトに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  HTML+CSS+JSはナビゲーションバーのスクロールグラデーション効果を実現します

>>:  HTML と JavaScript を使用してローカル メディア (ビデオとオーディオ) ファイルを再生する方法

推薦する

MySQL構成SSL証明書ログインの実装

目次序文1. MySQLはSSL構成を有効にする1.1 SSLが有効になっているかどうかを確認する1...

HTML で中国語を UTF-8 に変換する方法

HTMLでは、中国語のフレーズ「學好好學」は「學好好學」と表現できます。プロジェクトでは、SMSアラ...

iframe に関するいくつかの発見と考察

この物語は、今日の予期せぬ発見から始まります。同社には複数のウェブサイトがある。友達リンクにはお互い...

MySQL のクラスター化インデックスとクラスター化インデックスの成長の仕組みを理解する

このノートでは、 MySQL の B+Tree インデックスとは何ですか?クラスター化インデックスは...

Vueのアイデアを使ってストレージをカプセル化する方法

目次背景関数目的アイデアの源成し遂げるセット得るプロパティの削除拡張機能を禁止するもっている要約する...

Promiseの紹介と基本的な使い方の簡単な分析

Promise は、ES6 で導入された非同期プログラミングのための新しいソリューションです。 Pr...

ページ下部のフッターを修正する方法(複数の方法)

フロントエンド Web エンジニアとして、ページ効果を作成するときに次の現象に遭遇したことがあるはず...

Nginx設定ファイルの詳細な説明

Nginx の主な設定ファイルは nginx.conf で、グローバル ブロック、イベント ブロック...

JavaScript 改ざん防止オブジェクトの使用例

目次JavaScript 改ざん防止オブジェクト1. 拡張不可能なオブジェクト2. 封印された物体3...

VUEはトークンログイン認証を実装

この記事では、トークンログイン認証を実装するためのVUEの具体的なコードを例として紹介します。具体的...

JavaScript Promise の徹底解説

目次1. Promise とは何ですか? 2. なぜ Promise が存在するのでしょうか? 3つ...

CSS3入力ボックスの実装コードはGoogleログインのアニメーション効果に似ています

CSS3を使用して、Googleログインページと同様の入力ボックスをアニメーション化します。効果1 ...

MySQL 文字列分割操作 (区切り文字を含む文字列のインターセプション)

区切り文字なしの文字列抽出質問の要件データベース内のフィールド値:実装効果: 1行のデータを複数行に...

CSS リセットスタイルリセットの実装例

はじめに: すべてのブラウザには、「ユーザー エージェント スタイル シート」と呼ばれる、すべてのペ...

MySQL 圧縮の使用シナリオとソリューション

導入圧縮トランスポート プロトコル、圧縮列ソリューション、圧縮テーブル ソリューションなど、MySQ...