CSS で 3 列レイアウトを実装するいくつかの方法と利点と欠点

CSS で 3 列レイアウトを実装するいくつかの方法と利点と欠点

序文

3 列レイアウトは、その名前が示すように、両側が固定され、中央が適応します。実際の開発では、3 列レイアウトは非常に一般的です。たとえば、Taobao のホームページは典型的な 3 列レイアウトです。左側の商品ナビゲーションと右側のナビゲーションは固定幅で、中央のメインコンテンツはブラウザの幅に適応します。

次のようなレイアウトを想定してみましょう。高さはわかっていて、左列と右列の幅はそれぞれ 300 ピクセル、中央は適応型です。これを実現する方法はいくつありますか?それぞれの利点と欠点は何でしょうか?

この記事のソースコードは3列レイアウトのソースコードをクリックしてください。スターやフォークも大歓迎です。

1. フローティングレイアウト

<!DOCTYPE html>
<html>
<ヘッド>
    <メタ文字セット="utf-8">
    <title>レイアウト</title>
    <スタイル メディア="スクリーン">
        html * {
            パディング: 0;
            マージン: 0;
        }
        .layout 記事 div {
            最小高さ: 150px;
        }
    </スタイル>
</head>
<本文>
    <!--フローティングレイアウト-->
    <セクションクラス="レイアウトフロート">
        <スタイル メディア="スクリーン">
            .layout.float .left {
                フロート: 左;
                幅: 300ピクセル;
                背景: 赤;
            }
            .layout.float.center {
                背景: 黄色;
            }
            .layout.float .right {
                フロート: 右;
                幅: 300ピクセル;
                背景: 青;
            }
        </スタイル>
        <h1>3列レイアウト</h1>
        <記事クラス="left-right-center">
            <div class="left"></div>
            <div class="right"></div> // 右の列は中央のコンテンツの前に記述する必要があります<div class="center">
                <h2>フローティングソリューション</h2>
                1. これは 3 列レイアウトのフローティング ソリューションです。2. これは 3 列レイアウトのフローティング ソリューションです。3. これは 3 列レイアウトのフローティング ソリューションです。4. これは 3 列レイアウトのフローティング ソリューションです。5. これは 3 列レイアウトのフローティング ソリューションです。6. これは 3 列レイアウトのフローティング ソリューションです。
            </div>
        </記事>
    </セクション>
</本文>
</html>

このレイアウトでは、DOM 構造を最初にフローティング部分で記述し、次に中央のブロックで記述する必要があります。そうしないと、右側のフローティング ブロックが次の行になってしまいます。
フローティングレイアウトの利点は、比較的シンプルで互換性が優れていることです。ただし、フローティング レイアウトには制限があります。フローティング要素はドキュメント フローから分離されるため、クリアする必要があります。これを適切に処理しないと、親コンテナーの高さが崩れるなど、多くの問題が発生します。

2. 絶対レイアウト

   <!--絶対レイアウト-->
    <セクションクラス="レイアウト絶対">
        <スタイル>
            .layout.absolute .left-center-right>div{
                position: absolute; // 3 つのブロックはすべて絶対配置されます}
            .layout.absolute.left {
                左:0;
                幅: 300ピクセル;
                背景: 赤;
            }
            .layout.absolute.center {
                右: 300px;
                left: 300px;//左右に300px background: yellow;
            }
            .layout.absolute.right {
                右: 0;
                幅: 300ピクセル;
                背景: 青;
            }
        </スタイル>
        <h1>3列レイアウト</h1>
        <記事クラス="左-中央-右">
            <div class="left"></div>
            <div class="center">
                <h2>絶対位置決めソリューション</h2>
                1. これは 3 列レイアウトのフローティング ソリューションです。2. これは 3 列レイアウトのフローティング ソリューションです。3. これは 3 列レイアウトのフローティング ソリューションです。4. これは 3 列レイアウトのフローティング ソリューションです。5. これは 3 列レイアウトのフローティング ソリューションです。6. これは 3 列レイアウトのフローティング ソリューションです。
            </div>
            <div class="right"></div>
        </記事>
    </セクション>

絶対位置レイアウトの利点は、高速でセットアップが簡単で、問題が発生しにくいことです。欠点は、コンテナーがドキュメント フローの外側にあり、子孫要素もドキュメント フローの外側にあることです。高さが不明な場合は問題が発生し、この方法の有効性と使いやすさが低下します。

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

    <!--フレックスボックスレイアウト-->
    <section class="レイアウトフレックスボックス">
        <スタイル>
            .layout.flexbox .left-center-right{
                ディスプレイ: フレックス;
            }
            .layout.flexbox .left {
                幅: 300ピクセル;
                背景: 赤;
            }
            .layout.flexbox.center {
                背景: 黄色;
                フレックス: 1;
            }
            .layout.flexbox .right {
                幅: 300ピクセル;
                背景: 青;
            }
        </スタイル>
        <h1>3列レイアウト</h1>
        <記事クラス="左-中央-右">
            <div class="left"></div>
            <div class="center">
                <h2>Flexbox ソリューション</h2>
                1. これは 3 列レイアウトのフローティング ソリューションです。2. これは 3 列レイアウトのフローティング ソリューションです。3. これは 3 列レイアウトのフローティング ソリューションです。4. これは 3 列レイアウトのフローティング ソリューションです。5. これは 3 列レイアウトのフローティング ソリューションです。6. これは 3 列レイアウトのフローティング ソリューションです。
            </div>
            <div class="right"></div>
        </記事>
    </セクション>

Flexbox レイアウトは CSS3 の新しいレイアウトです。上記の 2 つの方法の欠点を解決するように設計されており、より完璧なレイアウトです。現在、モバイル端末のレイアウトにもflexboxが使用されています。 flexbox の欠点は、IE10 でのみサポートされていることですが、IE10 バージョンは -ms 形式です。

4. テーブルレイアウト

<!--テーブルレイアウト-->
    <section class="レイアウトテーブル">
        <スタイル>
            .layout.table .left-center-right {
                表示: テーブル;
                高さ: 150px;
                幅: 100%;
            }
            .layout.table .left-center-right>div {
                表示: テーブルセル;
            }
            .layout.table .left {
                幅: 300ピクセル;
                背景: 赤;
            }
            .layout.table .center {
                背景: 黄色;
            }
            .layout.table .right {
                幅: 300ピクセル;
                背景: 青;
            }
        </スタイル>
        <h1>3列レイアウト</h1>
        <記事クラス="左-中央-右">
            <div class="left"></div>
            <div class="center">
                <h2>テーブルレイアウトソリューション</h2>
                1. これは 3 列レイアウトのフローティング ソリューションです。2. これは 3 列レイアウトのフローティング ソリューションです。3. これは 3 列レイアウトのフローティング ソリューションです。4. これは 3 列レイアウトのフローティング ソリューションです。5. これは 3 列レイアウトのフローティング ソリューションです。6. これは 3 列レイアウトのフローティング ソリューションです。
            </div>
            <div class="right"></div>
        </記事>
    </セクション>

テーブルレイアウトの互換性は非常に良好です (下図を参照)。フレックスレイアウトに互換性がない場合は、テーブルレイアウトを試すことができます。コンテンツがオーバーフローすると、親要素が自動的に拡張されます。

表のレイアウトにも欠点があります。①列の余白を設定できない。②SEOに適していない。③1つのセルの高さが制限を超えると、両側のセルも高くなりますが、これが望んでいる効果ではない場合があります。


5. グリッドレイアウト

    <!--グリッドレイアウト-->
    <セクションクラス="レイアウトグリッド">
        <スタイル>
            .layout.grid .left-center-right {
                表示: グリッド;
                幅: 100%;
                グリッドテンプレート列: 300px 自動 300px;
                grid-template-rows: 150px; //行の高さ}
            .layout.grid .left {
                背景: 赤;
            }
            .layout.grid .center {
                背景: 黄色;
            }
            .layout.grid .right {
                背景: 青;
            }
        </スタイル>
        <h1>3列レイアウト</h1>
        <記事クラス="左-中央-右">
            <div class="left"></div>
            <div class="center">
                <h2>グリッドレイアウトソリューション</h2>
                1. これは 3 列レイアウトのフローティング ソリューションです。2. これは 3 列レイアウトのフローティング ソリューションです。3. これは 3 列レイアウトのフローティング ソリューションです。4. これは 3 列レイアウトのフローティング ソリューションです。5. これは 3 列レイアウトのフローティング ソリューションです。6. これは 3 列レイアウトのフローティング ソリューションです。
            </div>
            <div class="right"></div>
        </記事>
    </セクション>

CSS グリッドは、グリッド レイアウトを作成するための最も強力で簡単なツールです。テーブルと同様に、グリッド レイアウトを使用すると、Web デザイナーは要素を列または行に配置できますが、テーブルとは異なり、グリッド レイアウトにはコンテンツ構造がないため、テーブルのようなさまざまなレイアウトを作成することはできません。たとえば、グリッド レイアウト内の子要素はすべて、重なり合って同じように配置されるように配置できます。

しかし、グリッドレイアウトの互換性は良くありません。 IE10 以降でサポートされていますが、一部のプロパティのみがサポートされています。

VI. 結論

上記で詳しく紹介した 5 つのレイアウトの長所と短所を踏まえて、実際の開発ではどのレイアウトが最適な選択でしょうか?読者はそれぞれの心の中に答えを持っていると信じています。
実際の開発では、フレックス レイアウトとグリッド レイアウトでレイアウトを処理できると思います。両方のブラウザーがこれら 2 つのモジュールをサポートしていると仮定すると、ページのレイアウトにはグリッドとフレックスボックスのどちらを選択しますか? Flexbox は 1 次元レイアウトであり、コンテンツ ブロックを直線上にのみ配置できます。一方、グリッドは 2 次元レイアウトです。前に簡単に述べたように、デザイン要件に応じて、コンテンツ ブロックを任意の場所に配置できます。したがって、これ以上苦労せずに、どちらがレイアウトに適しているかがわかるはずです。さらに、IE の下位バージョン (IE8+ など) との互換性を確保したい場合は、テーブル レイアウトを検討できます。

最後に皆さんに質問です。中央部分がコンテンツの高さによって引き伸ばされる場合、左右の列も引き伸ばす必要があります。これらの 5 つのレイアウトのうちどれがまだ使用できますか?

答え: フレックスレイアウトとテーブルレイアウト

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  VMware仮想マシンブリッジによるインターネット相互接続を実現する方法

>>:  Vue3のいくつかの利点についての簡単な説明

ブログ    

推薦する

フロントエンド例外 502 不正なゲートウェイの原因と解決策

目次502 不正なゲートウェイ エラーの発生1. 502 不正なゲートウェイ エラーとは何ですか? ...

Nodejs のグローバル変数とグローバルオブジェクトの知識ポイントと使用方法の詳細

1. グローバルオブジェクトすべてのモジュールは呼び出すことができます1) global: ブラウザ...

CSS3で跳ねるボールのアニメーションを実現

私は通常、大手ウェブサイトの特別ページや製品リリースページを訪問するのが好きです。なぜなら、たくさん...

Linuxシステムにおける重要なサブディレクトリの問題について話す

/etc/fstabパーティション/ディスクを自動的にマウントし、マウントするパーティション/デバイ...

Vue.js スタイルレイアウト Flutter ビジネス開発共通スキル

シャドウスタイルにおけるフラッターとCSSの対応UIによって指定されたCSSスタイル 幅: 75px...

Windows Server 2012 でファイル サーバーを構築するための詳細な手順

ファイル サーバーは、企業内で最も一般的に使用されるサーバーの一つであり、主にファイル共有を提供する...

Vue.jsでタブ切り替えと色変更操作を実装する解説

この機能を実装するにあたり、本家ブロガーさんから拝借した方法では色の切り替えが実現できず、長い間考え...

CSS3はテキストのレリーフ効果、彫刻効果、炎のテキストを実現します

この効果を実現するには、まず CSS のプロパティを知っておく必要があります。 text-shado...

Dockerがコンテナを起動するたびに、IPとホストが指定した操作が実行されます。

序文Dockerを使ってHadoopクラスタを起動するたびに、ネットワークカードの再バインド、IPの...

MySQL 8.0 における非同期レプリケーションの 3 つの方法について簡単に説明します。

この実験では、空のデータベース、オフライン、オンラインの 3 つのモードで、1 つのマスターと 2 ...

マージンのマージの問題を解決する

1. 兄弟要素の余白を結合する効果は次のようになります: (2 つの間の間隔は 150 ピクセルでは...

花火効果を実現するJavaScript(オブジェクト指向)

この記事では、花火効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。具...

Centos7 ベースの Varnish キャッシュ プロキシ サーバーを展開する

1. ワニスの概要1. ワニスの紹介Varnish は、新しいソフトウェア アーキテクチャを使用し、...

Win10 の組み込み Linux システムを使用して Spring Boot プロジェクトを開始する方法

1. Windows10の組み込みLinuxサブシステムをインストールする1.1. Linuxサブシ...

HTML コード例: ハイパーリンクの詳細な説明

ハイパーリンクは、Web サイト上のすべてのページがハイパーリンクで接続され、ページ間を移動できるた...