CSS中級者向けアダプティブレイアウトの5つのソリューションの詳細な説明

CSS中級者向けアダプティブレイアウトの5つのソリューションの詳細な説明

序文

ページを作っていく上で、ページレイアウトに関する内容に遭遇することが多く、面接でも聞かれることも多いので、今日はページレイアウトに関する内容をまとめてみます。

質問: 3 列レイアウト (固定高さ、左・中央・右構造) を実装する方法

高さがわかっていると仮定して、左と右の幅が両方とも 300 ピクセルで、中央が適応型の 3 列レイアウトを記述してください。

上記のトピックを読んだ後、経験豊富な人はそれが非常に簡単だと思うかもしれません。よく考えてみてください。私たちがそれを書き出すとしたら、いくつの解決策を思いつくでしょうか?一般的には、float と position の 2 種類が思い浮かびます。実は、この 2 つに加えて、さらに 3 種類の記述方法があります。1 つずつ紹介します。

ソリューション 1 (フロート)

<セクションクラス='レイアウトフロート'>
         <スタイル>
             .layout.float .left-right-center{
                 高さ: 100px;
             }
             .layout.float .left{
                 フロート: 左;
                 幅: 300ピクセル;
                 背景色: 赤;
             }

             .layout.float .right{
                 フロート: 右;
                 幅: 300ピクセル;
                 背景色: 青;
             }

             .layout.float.center{
                 背景色: 黄色;
             }
         </スタイル>
         <記事クラス="left-right-center">
             <div class="left"></div>
             <div class="right"></div>
             <div class="center">私は真ん中の適応要素、つまり浮遊している要素です</div>
         </記事>
     </セクション>

  • 原則: 左右の 2 つの div がドキュメント フローから外れるため、中央が上に移動し、3 列のレイアウト効果が得られます (高さが同じである場合)
  • 利点: 高い互換性
  • デメリット: 他の要素に影響を与えないようにフロートをクリアする必要がある
  • 高さが固定されていない場合、中央のコンテンツが引き伸ばされ、左右の両側は一緒に引き伸ばされません。

ソリューション2(絶対位置指定)

<セクションクラス="レイアウト絶対">
         <スタイル>
             .layout.absolute .left-center-right div{
                 位置: 絶対;
                 高さ: 100px;
             }

             .layout.absolute.left{
                 左: 0;
                 幅: 300ピクセル;
                 背景色: 赤;
             }

             .layout.absolute.center{
                 左: 300ピクセル;
                 右: 300px;
                 背景色: 黄色;
             }

             .layout.absolute.right{
                 右: 0;
                 幅: 300ピクセル;
                 背景色: 青;
             }
         </スタイル>
         <記事クラス="左-中央-右">
            <div class="left"></div>
            <div class="center">
                私は真ん中の適応要素です - 絶対的な位置付け</div>
            <div class="right"></div>
         </記事>
     </セクション>
  • 原則:絶対位置と幅を使用して左右のdivを固定すると、中央のdivの幅が適応効果を発揮します。
  • 利点: 高速
  • デメリット: 親要素がドキュメント フローの外側にある場合、子要素も必ずドキュメント フローの外側にあるため、使用できるシナリオは多くありません。
  • 中央の要素の高さが増加しても、両側の要素の高さは増加しないため、中央のdivのみが拡大します。

ソリューション3(フレックスレイアウト)

<セクションクラス="レイアウトフレックス">
         <スタイル>
             .layout.flex .left-center-right{
                 ディスプレイ: フレックス;
                 高さ: 100px;
             }

             .layout.flex .left{
                 幅: 300ピクセル;
                 背景色: 赤;
             }

             .layout.flex .center{
                 フレックス: 1;
                 背景色: 黄色;
             }

             .layout.flex .right{
                 幅: 300ピクセル;
                 背景色: 青;
             }
         </スタイル>
         <記事クラス="左-中央-右">
            <div class="left"></div>
            <div class="center">
                私は真ん中の適応要素です - フレックスレイアウト</div>
            <div class="right"></div>
         </記事>
     </セクション>
  • 原則:親要素をフレックスレイアウトに設定し、中間要素のフレックスを1に設定して適応効果を実現します。
  • 利点: 実際の開発でよく使用される
  • デメリット: IE8以下のブラウザではサポートされていない
  • 高さが固定されていない場合、中央のコンテンツの高さが拡大し、それに応じて両側も拡大します。

ソリューション4(テーブルレイアウト)

   <section class="レイアウトテーブル">
        <スタイル>
            .layout.table .left-center-right{
                表示: テーブル;
                高さ: 100px;
                幅: 100%;
            }

            .layout.table .left{
                表示: テーブルセル;
                幅: 300ピクセル;
                背景色: 赤;
            }

            .layout.table .center{
                表示: テーブルセル;
                背景色: 黄色;
            }

            .layout.table .right{
                表示: テーブルセル;
                幅: 300ピクセル;
                背景色: 青;
            }
        </スタイル>
        <記事クラス="左-中央-右">
            <div class="left"></div>
            <div class="center">
                私は真ん中の適応要素です - テーブル
            </div>
            <div class="right"></div>
        </記事>
    </セクション>
  • 原則:親要素をテーブルレイアウトに設定し、各子要素をテーブルセルに設定し、左と右のグリッドに固定幅を設定し、中央のグリッドで適応効果を実現できます。
  • 利点: 互換性が高く、IE8 以前のバージョンではフレックス レイアウトの代替として使用できます。
  • デメリット: 制限
  • 高さが固定されていない場合、中央が伸びると、左右のサイドも伸びます。これはフレックスと同様です。

オプション 5 (グリッド レイアウト)

<セクションクラス="レイアウトグリッド">
        <スタイル>
            .layout.grid .left-center-right{
                表示: グリッド;
                幅: 100%;
                grid-template-rows: 100px;/*各グリッドの高さは100pxです*/
                grid-template-columns: 300px auto 300px;/*左と右のグリッドはどちらも 300px で、中央のグリッドは適応型です*/
            }
            
            .レイアウト.グリッド.左{
                背景色: 赤;
            }

            .レイアウト.グリッド.センター{
                背景色: 黄色;
            }

            .layout.grid .right{
                背景色: 青;
            }
        </スタイル>
        <記事クラス="左-中央-右">
            <div class="left"></div>
            <div class="center">
                私は真ん中の適応要素です - グリッドレイアウト</div>
            <div class="right"></div>
        </記事>
    </セクション>
  • 原則: 親要素をグリッド レイアウトに設定し、各グリッドの高さと幅を指定してから、各グリッドの色を個別に設定します。
  • 利点: 比較的新しい技術、便利
  • デメリット: 互換性があまり良くない
  • 高さが固定されていない場合、中央の要素にテキストを追加しても拡大されません。

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

<<:  Vue.jsはシンプルな折りたたみパネルを実装します

>>:  MySQL Group by最適化の詳細な説明

推薦する

LayUI+Shiroは動的なメニューを実装し、メニュー拡張の例を記憶します

目次1. Maven 依存関係2. メニュー関連クラス1. メインメニュー2. サブメニュー3. S...

Ubuntu 20.04 をインストールした後に行うべきこと (初心者向けガイド)

Ubuntu 20.04 がリリースされ、多くの新機能が導入されましたが、慣れていない機能も多くあ...

MySQL は正常に起動するがポートをリッスンしない場合の解決策

問題の説明MySQL が正常に起動しました。以下に示すように、 ps -ef |grep mysql...

Angularの動的コンポーネントの詳細な説明

目次使用シナリオ達成方法1. 動的コンポーネントを配置する場所2. コンポーネントのインスタンスを取...

Vue3の状態管理の使用方法の詳細な説明

目次背景提供/注入共有状態の抽出データを提供するデータの挿入まとめ反応的な共有状態の抽出共有状態の使...

jQueryの競合問題を解決する方法

フロントエンド開発において、$ は jQuery の関数です。$ のパラメータが異なると、実装される...

VueはPCで写真をアップロードする機能を実現

この記事の例では、PC上で写真アップロード機能を実現するためのVueの具体的なコードを参考までに共有...

vuex で履歴を実装するためのサンプルコード

私は最近、ユーザー操作を元に戻す、またはやり直す機能を備えたビジュアル操作プラットフォームを開発して...

Webデザインチュートリアル(6):デザインへの情熱を持ち続ける

<br />前の記事:Webデザインチュートリアル(5):Webビジュアルデザイン。 1...

体験したい17 404ページ

404 を避けるべきだとどうして言えるのでしょうか? その理由は、ほとんどの 404 ページが粗雑す...

JSが5つ星の賞賛を獲得

この記事では、5つ星の評価を獲得するためのJSの具体的なコードを参考までに共有します。具体的な内容は...

ランダムな文字を生成する Java サンプルコード

サンプルコード: java.util.Random をインポートします。 java.util.UUI...

iframe を使用して Web ページに他の Web ページを埋め込む方法

iframe の使い方:コードをコピーコードは次のとおりです。 <DIV align=cent...

Windows で MySQL のルート パスワードをリセットする方法

今日、WordPress がデータベースに接続できないことがわかりました。ウィンドウ サーバーにログ...

MySQLクエリ文を書き換える3つの戦略

目次複雑なクエリとステップバイステップのクエリクエリステートメントを分割する共同クエリの分解問題のあ...