インタビューの質問: ホーリー グレイル レイアウトとダブル ウィング レイアウトの違い

インタビューの質問: ホーリー グレイル レイアウトとダブル ウィング レイアウトの違い

序文

今日は、聖杯レイアウトとダブルウィングレイアウト、そしてそれらの違いについてお話しします。この2つの3行レイアウトは、一部の大企業のフロントエンド面接で常に頻繁にテストされるポイントです。大企業の面接の質問についてお話ししましょう。さあ、始めましょう〜

レイアウト効果

ここに画像の説明を挿入

ここに画像の説明を挿入

2 つの 3 行レイアウトは同じ効果があり、その効果は上の図に示されています。それぞれの特徴は次のとおりです。

  • ヘッダーとフッターの高さはブラウザ全体の幅になります。
  • 中央に3列のレイアウトがあり、左右の幅は固定されています。
  • 中央のコンテンツの幅は中央の位置を埋めるように適応し、高さは 3 つの列の最大の高さになります。実際には、聖杯レイアウトとダブル ウィング レイアウトの処理は同じですが、中央の処理には若干の違いがあります。

予備処理

  • 問題を回避するために、まず body に min-width: 600px を設定します。
  • 次に、ヘッダーとフッターの幅を 100% (ブラウザ ページ全体) に設定し、区別しやすいように背景色を追加します。
  • コンテンツでは、左、右、中央に float:left 効果を追加し、左と右の幅と高さを設定します。
  • 真ん中の幅は100%、高さは左右と同じにしています。また、効果が分かりやすいように背景色もつけています。
  • ここで注意すべき点が 1 つあります。コンテンツの高さも設定する必要があります。コンテンツ内の div に float:left 属性を追加したため、それらはすべてテキスト フローの外側にあり、高さが崩れてしまいます。

(追記: この問題を解決するために、コンテンツに overflow: hidden を追加して BFC 領域を形成しました。興味のある友人は自分でそれについて学ぶことができます。もちろん、これを行わない場合は、コンテンツの高さを設定するだけです。)

*{
    マージン: 0;
    パディング: 0;
}
体{
    最小幅: 600px;
}
#ヘッダー、#フッター{
    高さ: 50px;
    幅: 100%;
    背景: グレー;
}
#中央、#左、#右
    フロート: 左;
}
#コンテンツ{
    オーバーフロー: 非表示;
}
#左、#右{
    幅: 200ピクセル;
    高さ: 200px;
    背景: ピンク;
}
#真ん中{
    幅: 100%;
    高さ: 200px;
    背景: 黄緑; 
}

ここに画像の説明を挿入

現在のページは次のようになっていることがわかりましたが、何が起こっているのでしょうか?

答えは簡単です。左、右、中央は一直線になるはずですが、コンテンツの幅が足りないため、左と右のボックスが押し下げられています。

それでは、これら 2 つのレイアウトと、この問題を解決する方法を見てみましょう。

聖杯レイアウト

まず、コンテンツのパディングを 0 200px に設定し、各側に 200px の幅を残します。
次に、2 つの領域に左と右の 2 つのボックスを配置するだけです。
最後に、左と右の余白プロパティをそれぞれ設定して位置を調整します。

#コンテンツ{
    オーバーフロー: 非表示;
    パディング: 0 200px;
}
#左{
    左マージン:-100% ;

} 
#右{
    左マージン: -200px;

もう一度効果を見てみましょう

ここに画像の説明を挿入

チンチンチン、奇跡を目撃する時が来たよ〜

ここに画像の説明を挿入

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

それでは、二重飛行翼レイアウトがこの問題をどのように解決するかを見てみましょう。下を見に来てください

ダブル ウィング レイアウトでは、中央の下に中央内側ボックスを追加し、中央のコンテンツをこのボックス内に配置します (これは何の役に立つのでしょうか? 心配しないでください。読み進めてください)。
Holy Grailレイアウトと同様に、位置を調整するためにfloatとleftのマージン値も設定します。
ただし、このレイアウトでは左右の配置は必要ありません。

#左{
    フロート: 左;
    左マージン: -100%;
}
#右{
    フロート: 左;
    左マージン: -200px;
}
.middle-inner{
    パディング: 0 200px;
}

ここに画像の説明を挿入

この時点で、中央のコンテンツが消えていることがわかります。このとき、前に midlle に追加した midlle-inner ボックスが役立ちます。この時点で、このボックスに 0 200px のマージンを設定するだけで、コンテンツが中央に表示されます。

.middle-inner{
    マージン: 0 200px;
}

効果を見る

ここに画像の説明を挿入

やはり大企業の面接はこんな感じの質問が多いので、今日はこれで終わりにしましょう! ! ! !

総括する

最後にまとめます。Double Wing レイアウトの本質は、実は Holy Grail レイアウトと同じです。どちらも、負のマージンを設定することで要素の配置を実現します。

  • 違いは HTML 構造です。ダブル ウィング レイアウトでは、中央の要素内に mildle-inner を設定し、その左右のマージンを設定します (holy grail レイアウトの padding ではなく)。これにより、両側の要素の重なりがなくなります。
  • ダブルウィングレイアウトでは追加の HTML 構造を持つことができますが、左要素と右要素の位置を設定する必要はありません。

完全なコードは次のとおりです。

聖杯レイアウト

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>ドキュメント</title>
    <link rel="スタイルシート" href="style.css">
</head>
<本文>
    <div class="wrap">
        <div id="header">ヘッダー</div>
        <div id="コンテンツ">
            <div id="middle">
                真ん中
            </div>
            <div id="left">左</div>         
            <div id="right">右</div>
        </div>
        <div id="footer">フッ​​ター</div>
    </div>
</本文>
</html>

*{
    マージン: 0;
    パディング: 0;
}
体{
    最小幅: 600px;
}
#ヘッダー、#フッター{
    高さ: 50px;
    幅: 100%;
    背景: グレー;
}
#中央、#左、#右
    フロート: 左;
}
#コンテンツ{
    オーバーフロー: 非表示;
    パディング: 0 200px;
}
#左、#右{
    幅: 200ピクセル;
    高さ: 200px;
    背景: ピンク;
}
#真ん中{
    幅: 100%;
    高さ: 200px;
    背景: 黄緑; 
}
 #左{
    左マージン:-100% ;
    位置: 相対的;
    左:-200px;
} 
#右{
    左マージン: -200px;
    位置: 相対的;
    左:200px; 
}


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

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>ドキュメント</title>
    <link rel="スタイルシート" href="style.css">
</head>
<本文>
    <div class="wrap">
        <div id="header">ヘッダー</div>
        <div id="コンテンツ">
            <div id="middle">
                <div class="middle-inner">
                    真ん中
                </div>
            </div>
            <div id="left">左</div>         
            <div id="right">右</div>
        </div>
        <div id="footer">フッ​​ター</div>
    </div>
</本文>
</html>
*{
    マージン: 0;
    パディング: 0;
}
。包む{
    最小幅: 600px;
}
#ヘッダー、#フッター{
    高さ: 50px;
    幅: 100%;
    背景:グレー;
}
#左、#右{
    幅: 200ピクセル;
    高さ: 200px;
    背景: 緑;
}

#真ん中{
    背景: ピンク;
    幅: 100%;
    フロート: 左;
    高さ:200px;
}
#コンテンツ{
    オーバーフロー: 非表示;
}
#左{
    フロート: 左;
    左マージン: -100%;
}
#右{
    フロート: 左;
    左マージン: -200px;
}
.middle-inner{
    マージン: 0 200px;
}

インタビューで必ず聞かれる質問「ホーリー グレイル レイアウトとダブル フライング ウィング レイアウトの違い」についての記事はこれで終わりです。ホーリー グレイル レイアウトとダブル フライング ウィング レイアウトの違いについてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  div+css3 を使用して背景グラデーション ボタンを実装するためのサンプル コード

>>:  HTML 要素の高さ、offsetHeight、clientHeight、scrollTop などの詳細な説明。

推薦する

Pythonの関数知識についての簡単な説明

目次関数パラメータの2つの主要なカテゴリ位置パラメータ可変長パラメータ名前空間要約する関数パラメータ...

iview権限管理の実装

目次iview-admin2.0 組み込み権限管理権限に基づいてコンポーネントの表示を制御するカスタ...

Centos6にMysql5.7をインストールする方法

環境セントロス6.6 MySQL 5.7インストールシステムがインストールされている場合は、まずアン...

Vueはファイルのアップロードとダウンロード機能を実装します

この記事では、ファイルのアップロードとダウンロード機能を実装するためのVueの具体的なコードを例とし...

HTML/XHTML における img 画像タグの基本的な使用法の詳細な説明

画像タグは、Web ページに画像を表示するために使用されます。 HTML/XHTML 画像 <...

Node.js における非同期プログラミングの知識ポイントの詳細な説明

導入JavaScript はデフォルトでシングルスレッドであるため、コードは並列実行するための新しい...

MySql8.023 インストール プロセスの詳細なグラフィック説明 (初回インストール)

まず、MySQL公式サイトからインストールパッケージをダウンロードします。MySQLはオープンソース...

Tomcatを自動的に開始するサービスとして設定するにはどうすればいいでしょうか?最も簡単な方法

Tomcat が自動的にサービスを開始するように設定します。最近、問題が発生しました。サーバー上のプ...

CSS が複数のクラスに一致する方法のサンプルコード

CSSは複数のクラスにマッチする次の HTML タグ li、クラスはオープン スタイルです。私の要件...

MySQL Community Server 8.0.12 のインストールと設定方法のグラフィックチュートリアル

MySQL 8 は、NoSQL、JSON などのサポートなど、まったく新しいエクスペリエンスをもたら...

cocoscreatorプレハブの詳しい説明

目次プレハブプレハブの作り方プレハブの役割1. 同じタイプのノードをバッチで作成する2. 特定の時間...

レスポンシブWebデザイン学習(3) - モバイルデバイスでのWebページのパフォーマンスを向上させる方法

序文モバイル デバイスでは、帯域幅とプロセッサ速度の制限により、Web ページのパフォーマンスに対す...

CSS フロントエンドページレンダリング最適化属性 will-change の具体的な使用法

序文スクロールやサイズ変更などのスクロール イベントがトリガーされると、トリガーの頻度が非常に高くな...

Dockerはクロスプラットフォーム機能を実現するためにnet5プログラムを導入

展開環境: ここでは docker コンテナ、Linux システム、VmWare 仮想マシンが使用さ...

JavaScript BOM ロケーション オブジェクト + ナビゲーター オブジェクト + 履歴オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...