いくつかの一般的な CSS レイアウト (要約)

いくつかの一般的な CSS レイアウト (要約)

まとめ

この記事では、次の一般的なレイアウトを紹介します。

3 列レイアウトを実装する方法は多数あります。この記事では、Holy Grail レイアウトと Double Wings レイアウトに焦点を当てます。 3列レイアウトを実現する他のいくつかの方法

1. シングルカラムレイアウト

一般的な 1 列レイアウトには次の 2 つがあります。

  • ヘッダー、コンテンツ、フッターの幅が等しい単一列レイアウト
  • ヘッダーとフッターの幅が等しく、コンテンツの幅が少し狭い1列レイアウト

1. 実装方法

最初の方法では、まずヘッダー、コンテンツ、フッターの幅を 1000px または max-width: 1000px に設定します (この 2 つの違いは、画面が 1000px より小さい場合、前者にはスクロール バーが表示され、後者には表示されず、実際の幅が表示されることです)。次に、margin: auto を設定して中央揃えを実現します。

<div class="header"></div>
<div class="content"></div>
<div class="フッター"></div>

2 番目のタイプでは、ヘッダーとフッターのコンテンツ幅は設定されておらず、ブロックレベル要素が画面全体を埋め尽くします。ただし、ヘッダー、コンテンツ、フッターのコンテンツ領域は同じ幅に設定され、margin:auto によって中央揃えされます。

。ヘッダ{
    マージン:0 自動; 
    最大幅: 960px;
    高さ:100px;
    背景色: 青;
}
。コンテンツ{
    マージン: 0 自動;
    最大幅: 960px;
    高さ: 400px;
    背景色: アクアマリン;
}
.フッター{
    マージン: 0 自動;
    最大幅: 960px;
    高さ: 100px;
    背景色: 水色;
}

2. 2列の適応レイアウト

2 列のアダプティブ レイアウトでは、1 つの列がコンテンツによって拡張され、もう 1 つの列が残りの幅を埋めます。

1.フロート+オーバーフロー:非表示

通常の2列レイアウトであれば、float + normal要素のmarginで実現できますが、adaptive 2列レイアウトであれば、float + overflow: hiddenで実現できます。この方法は主にoverflowを通じてBFCをトリガーし、BFCはfloat要素と重なりません。 overflow:hidden を設定しても IE6 ブラウザの haslayout プロパティはトリガーされないため、IE6 ブラウザと互換性を持たせるには zoom:1 を設定する必要があります。具体的なコードは次のとおりです。

<div class="parent" style="background-color: lightgrey;">
    <div class="left" style="background-color: lightblue;">
        <p>左</p>
    </div>
    <div class="right" style="background-color: lightgreen;">
        <p>正しい</p>
        <p>正しい</p>
    </div>        
</div>
。親 {
  オーバーフロー: 非表示;
  ズーム: 1;
}
。左 {
  フロート: 左;
  右マージン: 20px;
}
。右 {
  オーバーフロー: 非表示;
  ズーム: 1;
}

注意: サイドバーが右側にある場合は、レンダリングの順序に注意してください。つまり、HTML では、最初にサイドバーを記述し、次にメイン コンテンツを記述します。

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

フレックス レイアウト (エラスティック ボックス レイアウトとも呼ばれます) は、わずか数行のコードでさまざまなページのレイアウトを実現できます。

//HTML部分は上記と同じです。親{
  ディスプレイ:フレックス;
}  
。右 {
  左マージン:20px; 
  フレックス:1;
}

3. グリッドレイアウト

グリッド レイアウトは、ユーザー インターフェイス デザインを最適化するために設計された 2 次元グリッド ベースのレイアウト システムです。

//HTML部分は上記と同じです。親{
  表示:グリッド;
  グリッドテンプレート列:自動 1fr;
  グリッドギャップ:20px
}

3. 3列レイアウト

特徴:中央の列は適応幅を持ち、両側は固定幅を持っています

1. 聖杯レイアウト

①特徴

より特殊な 3 列レイアウトでは、両側の幅が固定され、中央の幅が適応型になります。唯一の違いは、中央の列を最初に読み込むために、DOM 構造で中央の列を最初に書き込む必要があることです。

。容器 {
    padding-left: 220px; // 左列と右列にスペースを確保します padding-right: 220px;
  }
  。左 {
    フロート: 左;
    幅: 200ピクセル;
    高さ: 400px;
    背景: 赤;
    左マージン: -100%;
    位置: 相対的;
    左: -220px;
  }
  。中心 {
    フロート: 左;
    幅: 100%;
    高さ: 500px;
    背景: 黄色;
  }
  。右 {
    フロート: 左;
    幅: 200ピクセル;
    高さ: 400px;
    背景: 青;
    左マージン: -200px;
    位置: 相対的;
    右: -220px;
  }
 <記事クラス="コンテナ">
    <div class="center">
      <h2>聖杯レイアウト</h2>
    </div>
    <div class="left"></div>
    <div class="right"></div>
  </記事>

② 実施手順

3 つの部分はすべて左にフロートするように設定されています。そうしないと、左側と右側のコンテンツは上に移動できず、中央の列と同じ行に配置できなくなります。次に、中央の幅を 100% に設定します (中央の列に適応コンテンツを実現するため)。このとき、左右の部分は次の行にジャンプします。

margin-left を負の値に設定すると、左側と右側の部分が中央部分と同じ行に戻ります。

親コンテナの padding-left と padding-right を設定することで、左右に隙間を残します。

相対的な位置を設定することで、左右のパーツが両側に移動します。

③デメリット

中央部分の最小幅は左部分の幅より小さくすることはできません。そうしないと、左部分が次の行に重なってしまいます。

1 つの列の高さを拡張すると (下図のように)、他の 2 つの列の背景は自動的に塗りつぶされません。 (これは、以下で紹介する等高レイアウトの正のパディング + 負のマージンで解決できます)

2. ダブルウィングレイアウト

①特徴

また、3 列レイアウトも備えており、これは Holy Grail レイアウトに基づいてさらに最適化されており、Holy Grail レイアウトの乱れの問題を解決し、コンテンツとレイアウトの分離を実現します。どの列も問題なく最上位の列になることができます。

 。容器 {
        min-width: 600px; // 中央のコンテンツが左幅の 2 倍 + 右幅で表示できることを確認します}
    。左 {
        フロート: 左;
        幅: 200ピクセル;
        高さ: 400px;
        背景: 赤;
        左マージン: -100%;
    }
    。中心 {
        フロート: 左;
        幅: 100%;
        高さ: 500px;
        背景: 黄色;
    }
    .center .inner {
        margin: 0 200px; //新しく追加された部分}
    。右 {
        フロート: 左;
        幅: 200ピクセル;
        高さ: 400px;
        背景: 青;
        左マージン: -200px;
    }
   <記事クラス="コンテナ">
        <div class="center">
            <div class="inner">ダブルウィングレイアウト</div>
        </div>
        <div class="left"></div>
        <div class="right"></div>
    </記事>

② 実装手順(最初の2つの手順はHoly Grailレイアウトと同じです)

  • 3 つの部分すべてを左にフロートするように設定し、中央の幅を 100% に設定します。このとき、左と右の部分は次の行にジャンプします。
  • margin-left を負の値に設定すると、左側と右側の部分が中央部分と同じ行に戻ります。
  • 中央部分に内側の div を追加し、margin: 0 200px; を設定します。

③デメリット

DOM ツリー ノードのレイヤーを 1 つ追加すると、レンダリング ツリーの生成に必要な計算量が増加します。

3. 2つのレイアウト実装方法の比較:

  • どちらのレイアウト方法でも、メイン列がドキュメント フローの先頭に配置され、メイン列が最初に読み込まれるようになります。
  • 2 つのレイアウト方法は実装も似ており、どちらも 3 つの列をフロートさせ、負のマージンによって 3 列のレイアウトを形成できます。
  • 2 つのレイアウト方法の違いは、中央のメイン列の位置の処理方法にあります。Holy Grail レイアウトでは、親コンテナーの左右のパディングと、2 つの従属列の相対的な配置が使用されます。

ダブルウィングレイアウトは、メイン列を新しい親ブロックにネストし、メイン列の左余白と右余白を使用してレイアウトを調整することです。

4. 等高レイアウト

等高レイアウトとは、親要素内で子要素の高さが等しくなるレイアウト方法を指します。次に、いくつかの一般的な実装方法を紹介します。

1. 正のパディングと負のマージンを使用する

Holy Grail レイアウトの 2 番目の欠点は、背景がパディング領域に表示されるため、均等レイアウトを使用することで解決できます。大きな padding-bottom を設定し、同じ値の負の margin-bottom を設定し、すべての列の外側にコンテナーを追加し、overflow:hidden を設定してオーバーフローした背景を切り取ります。この方法は、複数列の等高レイアウトを実現でき、列間のセパレーターの効果も得られます。構造がシンプルで、すべてのブラウザと互換性があります。新しいコードは次のとおりです。

   。中心、
      。左、
      。右 {
        パディング下部: 10000px;
        下マージン: -10000px;
      }
      。容器 {
        左パディング: 220px;
        右パディング: 220px;
        overflow: hidden; //オーバーフローの背景を切り取る} 

2. 背景画像を使用する

この方法は、等高列を実現するために使用した最も古い方法です。背景画像を使用し、この背景画像を列の親要素で使用して Y 軸をレイアウトすることで、等高列の錯覚を作り出します。実装方法はシンプルで互換性が高く、CSS スタイルをあまり使用せずに簡単に実装できますが、この方法は流動的なレイアウトなどの高列レイアウトには適していません。

スタイルを作成する前に、次のような背景画像が必要です。

<div class="コンテナクリアフィックス">
    <div class="left"></div>
    <div class="content"></div>
    <div class="right"></div>
</div>
。容器 {
  背景: url("column.png") repeat-y;
  幅: 960ピクセル;
  マージン: 0 自動;
}
。左 {
  フロート: 左;
  幅: 220ピクセル;
}
。コンテンツ {
  フロート: 左;
  幅: 480ピクセル;
}
。右 {
  フロート: 左;
  幅: 220ピクセル;
}

3. テーブルレイアウトを模倣する

これは非常にシンプルで、実装が簡単な方法です。ただし、互換性が悪く、IE6~7では正常に動作しません。

 <div class="コンテナテーブル">
      <div class="コンテナ内部テーブル行">
        <div class="列 テーブルセル セル1">
          <div class="left aside">
            ....
          </div>
        </div>
        <div class="列 テーブルセル セル2">
          <div class="コンテンツセクション">
            ...
          </div>
        </div>
        <div class="列 テーブルセル セル3">
          <div class="右側">
            ...
          </div>
        </div>
      </div>
    </div>
。テーブル {
  幅: 自動;
  最小幅: 1000px;
  マージン: 0 自動;
  パディング: 0;
  表示: テーブル;
}
.tableRow {
  表示: テーブル行;
}
.tableCell {
  表示: テーブルセル;
  幅: 33%;
}
.セル1 {
  背景: #f00;
  高さ: 800ピクセル;
}
.セル2 {
  背景: #0f0;
}
.セル3 {
  背景: #00f;
}

4. 境界線と位置を使用する

このアプローチでは、境界線と絶対配置を使用して、等高列の擬似効果を実現します。構造がシンプルで、すべてのブラウザと互換性があり、簡単に習得できます。サイドバーの高さがメインコンテンツの高さと同じになる、2 列の等高レイアウトを実装する必要があるとします。

#ラッパー{
  幅: 960ピクセル;
  マージン: 0 自動;
}
#メインコンテンツ{
  右境界線: 220px 実線 #dfdfdf;
  位置: 絶対;
  幅: 740ピクセル;
  高さ: 800ピクセル;  
  背景: 緑;
}
#サイドバー {
  背景: #dfdfdf;
  左マージン: 740px;
  位置: 絶対;
  高さ: 800ピクセル;
  幅: 220ピクセル;
}

5. スティッキーレイアウト

1. 特徴

  • コンテンツ ブロック<main>があります。 <main>の高さが十分に長い場合、 <main>に続く要素<footer><main>要素の後になります。
  • <main>要素が短い場合 (たとえば、画面の高さよりも小さい場合)、 <footer>要素は画面の下部に「固定」されることが想定されます。

具体的なコードは次のとおりです。

 <div id="wrap">
      <div class="main">
        メイン<br />
        メイン<br />
        メイン<br />
      </div>
    </div>
    <div id="footer">フッ​​ター</div>
  * {
        マージン: 0;
        パディング: 0;
      }
      html,
      体 {
        height: 100%; //高さはレイヤーごとに継承されます}
      #包む {
        最小高さ: 100%;
        背景: ピンク;
        テキスト配置: 中央;
        オーバーフロー: 非表示;
      }
      #wrap .main {
        パディング下部: 50px;
      }
      #フッター{
        高さ: 50px;
        行の高さ: 50px;
        背景: 濃いピンク;
        テキスト配置: 中央;
        上マージン: -50px;
      }

2. 実装手順

(1)フッターは独立した構造でなければならず、ラップとネスト関係を持たない

(2)ラップエリアの高さは、min-heightを設定することでビューポートの高さに変更される。

(3)フッターの位置は負のマージンで決定する

(4)メインエリアにpadding-bottomを設定する必要があります。これは、負のマージンによってフッターが実際のコンテンツを覆ってしまうのを防ぐためでもあります。

2019.1.2に改訂されました。この記事が役に立ったと思われた方は、私のGitHubブログを「いいね!」してフォローしてください。どうもありがとうございます!

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

<<:  Google 翻訳ツール: 多言語ウェブサイトを素早く実装

>>:  Vmware + Ubuntu18.04 に Hbase 2.3.5 をインストールするための詳細なチュートリアル

推薦する

CentOS 8 仮想マシンから Windows 10 ホスト フォルダーにアクセスする方法の簡単な分析

VMware Toolsをインストールすると、仮想マシンホスト間で①テキストをコピーして貼り付けるこ...

Nginx を使用して IP アドレスが悪意を持って解決されるのを防ぐ方法

Nginxを使用する目的Alibaba Cloud ECS クラウド サーバーを使用して、まずは著者...

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

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

js は複数の画像を zip にパッケージ化します

目次1. ファイルをインポートする2. HTMLページ3. メインコード4. 画像をbase64に変...

CentOS の MySQL に MariaDB をインストールするときに発生する方法と問題

以前にインストールしたmariadbを削除する1. rpm -qa | grep mariadb を...

相同性とクロスドメイン、jsonp(関数カプセル化)、CORS原則の詳細な分析

目次同一起源ポリシーAjax リクエストの制限: Ajaxは自身のサーバーにのみリクエストを送信でき...

mysql 8.0.15 winx64 解凍バージョン グラフィック インストール チュートリアル

システムをインストールした後、毎回いくつかのソフトウェアを再インストールする必要があります。ソフトウ...

Docker CPU 制限の実装

1. --cpu=<値> 1) コンテナが使用できるCPUリソースの量を指定しますが、コ...

Tomcat で静的リソースを処理するチュートリアル

序文Tomcat 内のすべてのリクエストは Servlet によって処理され、静的リソースも例外では...

SQL と NoSQL の違いのまとめ

主な違い: 1. タイプSQL データベースは主にリレーショナル データベース (RDBMS) とし...

MySQLビューの原理と使用法の詳細な説明

この記事では、例を使用して MySQL ビューの原理と使用方法を説明します。ご参考までに、詳細は以下...

React-Native環境のセットアップと基本的な紹介

環境の準備1. 環境構築React Native 中国語ウェブサイト2. 開発ツール フロントエンド...

Vue3 における ref と reactive の詳細な説明と拡張

目次1. 参照と反応1. 反応的2.参照2. shallowRef と shallowReactiv...

DockerにrockerChatをインストールし、チャットルームを設定するための詳細な手順

包括的なドキュメントgithubアドレスhttps://github.com/RocketChat/...

この記事ではMySQLのNULLについて説明します。

目次序文MySQL の NULL 2 NULL占有長3 NULL値の比較4SQLはNULL値を処理す...