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 の総合概要

推薦する

Linux カーネルの copy_{to, from}_user() に関する考察

目次1. copy_{to,from}_user() とは何か1. copy_{to,from}_u...

Vue で手ぶれ補正を実装するためのサンプルコード

手ぶれ防止: 繰り返しのクリックによるイベントのトリガーを防止まず、揺れとは何でしょうか? 震えるの...

JavaScript でオブザーバー パターンを実装する方法

目次概要オブザーバーパターンの応用シナリオオブザーバーパターンの実装要約する概要オブザーバー パター...

Reactにおける制御されたコンポーネントと制御されていないコンポーネントの簡単な分析

目次制御されていないコンポーネント制御コンポーネント知らせ結論は制御されていないコンポーネントフォー...

nginx を使用した負荷分散モジュールの解釈

目次負荷分散に nginx を使用するための 2 つのモジュール:アップストリームはロードノードプー...

MySQL の左結合操作における on 条件と where 条件の違いの紹介

優先度両方のケースで同じ条件を設定すると、異なる結果セットが生成される可能性があるのは、優先順位のた...

jQuery は呼吸カルーセルを実装します

この記事では、ブレッシングカルーセルを実装するためのjQueryの具体的なコードを参考までに共有しま...

MySQL 8.0.12 簡単インストールチュートリアル

この記事では、MySQL 8.0.12のインストールチュートリアルを参考までに紹介します。具体的な内...

MySQL にテーブルデータを挿入するときに中国語の文字化けが発生する問題を解決する方法

1. 問題開発中に、他のデータベースから MySQL データベース テーブルにデータを挿入すると、次...

Gitlab実践チュートリアルでは、関連する設定操作にgit configを使用します。

この記事では、実際に発生した問題をもとに、git の設定に関する内容を紹介します。コマンド: git...

自己終了XHTMLタグを書くときに注意すべきこと

XHTMLの img タグは、次のように記述する必要があります: <img alt="...

MySQLの外部ネットワークアクセス権を開く方法

以下のように表示されます。主に認証コマンドを実行します: 2つの方法1. 任意のホストがユーザー b...

MySQLで現在の時間間隔の前日のデータをクエリする

1. 背景実際のプロジェクトでは、分散スケジュールされたタスク実行の状況に遭遇することがあります。ス...

MySQL 結合バッファの原理

目次1. MySQL 結合バッファ2. JoinBufferCacheストレージスペースの割り当て3...

MySQL初心者のための基本操作のまとめ

図書館運営クエリ1.SHOW DATABASE; ----すべてのデータベースを照会する2. SHO...