CSS スティッキーフッターのいくつかの実装

CSS スティッキーフッターのいくつかの実装

「スティッキーフッター」とは

いわゆる「スティッキー フッター」は、新しいフロントエンドの概念や技術ではありません。これは、Web ページの効果を指します。ページ コンテンツの長さが足りない場合は、フッターがブラウザー ウィンドウの下部に固定され、コンテンツの長さが十分であれば、フッターがページの下部に固定されます。ただし、Web ページのコンテンツの長さが十分でない場合は、下部フッターはブラウザ ウィンドウの下部に残ります。

次の例を見てみましょう。コードは次のとおりです。

<div class="header">
    </div>
<div class="main">
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
</div>
<div class="footer">
    <i class="fa fa-copyright" aria-hidden="true"></i>
    <div>下</div>
</div>
.ヘッダー{
    背景色: #3498DB;
    高さ: 50px;
    行の高さ: 50px;
    テキスト配置: 中央;
    色: #fff;
}
。主要 {
    オーバーフロー:自動;
    ボックスのサイズ: 境界線ボックス;
}

.フッター{
    背景色: #ECF0F1;
    高さ: 50px;
    行の高さ: 50px;
    テキスト配置: 中央;
}

注意深い読者なら、この問題に気付いたはずです。フッターの位置は、メインコンテンツの高さに応じて自動的に変わります。メインコンテンツがビューポートの高さよりも小さい場合、フッターは下部に付いていません。では、この問題をどのように解決すればよいのでしょうか?

マイナスマージン

<div class="main">
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
</div>
<div class="footer">
    <i class="fa fa-copyright" aria-hidden="true"></i>
    <div>下</div>
</div>
html,
体 {
    高さ: 100%;
}
。ヘッダ{
    背景色: #3498DB;
    高さ: 50px;
    行の高さ: 50px;
    テキスト配置: 中央;
    色: #fff;
    位置: 固定;
    幅: 100%;
}
。主要 {
    最小高さ: 100%;
    オーバーフロー:自動;
    ボックスのサイズ: 境界線ボックス;
    パディング下部: 50px;
    パディング上部: 50px;
    下マージン: -50px;
}

.フッター{
    背景色: #ECF0F1;
    高さ: 50px;
    行の高さ: 50px;
    テキスト配置: 中央;
}

固定高さソリューション

次のプロパティを使用します

  • 最小高さ
  • 計算

calc() は CSS3 で導入され、CSS プロパティ値を宣言するときに計算を実行できるようになります。

いくつかの数値的な状況で使用できます。詳細については、MDNを参照してください。

vh (ビューポートの高さ): ご想像のとおり、ビューポートの高さを表します。

詳細な情報と互換性については、caniuse をご覧ください。

上記のコードを次のように変更します

。主要 {
    最小高さ: calc(100vh - 50px - 50px);
}

これは期待どおりに機能しますが、欠点の 1 つは、ヘッダーとフッターの高さを毎回計算する必要があることです。

これは明らかに完璧ではありません。DOM 構造のレベルが多ければ多いほど、計算する必要があるコンテンツも増えます。

絶対

絶対値については誰もがよく知っていると思うので、ここでは詳細には触れませんが、絶対値要素の位置はどのような基準で計算され、配置されるかということにだけ注意してください。

<div class="header">
    ヘッダ
<div class="main">
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
    <p>中間部分</p>
</div>
<div class="footer">
    <i class="fa fa-copyright" aria-hidden="true"></i>
    <div>下</div>
</div>
html{
    位置: 相対的;
    最小高さ: 100%;
}
体{
    下部マージン: 50px;
}
.ヘッダー{
    背景色: #3498DB;
    高さ: 50px;
    行の高さ: 50px;
    テキスト配置: 中央;
    色: #fff;
}
。主要 {
    オーバーフロー:自動;
}

.フッター{
    位置: 絶対;
    下:0;
    幅: 100%;
    背景色: #ECF0F1;
    高さ: 50px;
    行の高さ: 50px;
    テキスト配置: 中央;
} 

コードは非常にシンプルです。メインの位置アプリケーションは次のとおりです。

1 デフォルトでは、要素がposition:absoluteに設定されている場合、祖先要素にposition: absolute、fixed、relativeが設定されていない場合は

デフォルトでは、最初の包含ブロックを基準にしたものになります。

2 どの初期化子にブロックが含まれますか?

ルート要素が存在する包含ブロックは、初期包含ブロックと呼ばれる長方形です。連続メディアの場合、ビューポートの寸法を持ち、キャンバスの原点に固定されます。

これは W3C による包含ブロックの紹介です。この段落の一般的な意味は、ルート要素 (ドキュメント) がデフォルトの初期包含ブロックであり、その初期化ブロックのサイズがビューポートのサイズであるということです。

これらの概念を理解した後、上記のコードを見てみましょう。一目でわかります。

    html{
        位置: 相対的;
        最小高さ: 100%;
    }

    体{
        下部マージン: 50px;
    }
  • position:relative は、絶対要素が HTML 要素に対して相対的に配置されるように包含ブロックを変更します。
  • min-height: コンテンツがビューポートに収まらない場合に、フッターが下部に固定されるようにします。
  • margin-bottom 値はフッター要素の高さであり、コンテンツ領域がフッターによって覆われないようにします。

フレックスボックス

Flexbox は完璧なソリューションです。これは数行の CSS で実現でき、上記のような HTML 要素を計算したり追加したりする必要はありません。

コードを次のように変更します。

<div class="コンテナ">
    <div class="header">
        </div>
    <div class="main">
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
        <p>中間部分</p>
    </div>
    <div class="footer">
        <i class="fa fa-copyright" aria-hidden="true"></i>
        <div>下</div>
    </div>
</div>
html,
体 {
    高さ: 100%;
}
。容器 {
    ディスプレイ: フレックス;
    flex-direction: 列;
    最小高さ: 100%;
}
.ヘッダー{
    背景色: #3498DB;
    高さ: 50px;
    行の高さ: 50px;
    テキスト配置: 中央;
    色: #fff;
}

。主要 {
    オーバーフロー:自動;
    ボックスのサイズ: 境界線ボックス;
    フレックス: 1;
}

.フッター{
    背景色: #ECF0F1;
    高さ: 50px;
    行の高さ: 50px;
    テキスト配置: 中央;
}

最終的な効果は次のようになります。

負の =margin、固定幅、絶対値はすべて、下部の高さが固定されていることを前提としています。

一般的には absolute および flex 実装を使用することをお勧めします。使用する具体的な実装は、特定のシナリオによって異なります。

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

<<:  HTML フレーム、Iframe、フレームセットの違い

>>:  MySQL GTID の総合概要

推薦する

SpringBoot と Vue の相互作用におけるクロスドメイン問題の解決策

目次ブラウザ同一生成元ポリシー1. VUEフロントエンド構成プロキシはクロスドメインの問題を解決しま...

MySQL の null (IFNULL、COALESCE、NULLIF) に関する知識ポイントのまとめ

この記事では、MySQL の null (IFNULL、COALESCE、NULLIF) に関連する...

dockerプライベート倉庫の構築と利用の詳細説明

1. リポジトリイメージをダウンロードする docker プルレジストリ 2. プライベートウェアハ...

Docker の 4 つのネットワーク タイプの主な例

4 つのネットワーク タイプ:なし: コンテナのネットワーク機能を一切設定しません。--net=no...

JavaScript キャンバスで動的な点と線の効果を実現

この記事では、動的な点と線の効果を実現するためのJavaScriptキャンバスの具体的なコードを参考...

JavaScript を使用してソートアルゴリズムを実装する方法

目次バブルソート選択ソート挿入ソート要約するバブルソートバブルソートは、シーケンスの右側から始めて、...

外部キー制約を持つテーブルデータを削除する MySQL メソッドの紹介

MySQLでテーブルやデータを削除する場合、 [エラー] 1451 - 親行を削除または更新できませ...

JavaScript offsetParent のケーススタディ

1. offsetParentの定義: offsetParentは子要素に最も近い位置に配置された親...

MySQL コード実行構造例の分析 [シーケンス、分岐、ループ構造]

この記事では、例を使用して MySQL コード実行構造について説明します。ご参考までに、詳細は以下の...

MySQLパスワード変更例の詳細な説明

MySQLパスワード変更例の詳細な説明長い間 MySQL を使用していませんでした。今日、MySQL...

MySQL 8.0はJSONを扱えるようになりました

目次1. 概要2. JSON基本ツール3. JSONパス式4. JSONを検索して変更する序文:長い...

ピクセルを包括的なブランド体験に変えるヒント

編集者:この記事では、インタラクティブデザインがブランドコミュニケーションチェーン全体で果たすべき役...

Vue3 スロットの使用状況の概要

目次1. Vスロットの紹介2. 匿名スロット3. 名前付きスロット4. スコープ付きスロット5. 動...

アルバムと写真をアルバムに保存するためのWeChatアプレット

私は現在、Xiao Nian Gao に似たビデオおよびツール アプリを開発しています。ユーザーが作...

MySQL のインデックスとビューの使用方法と違いの詳細な説明

序文この記事では主に、MySQL のインデックスとビューの使用方法と違いを紹介し、参考と学習のために...