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

推薦する

Uniapp WeChatアプレット: キー障害の解決策

ユニアプリコード <テンプレート> <表示> <image v-for...

Vue プロジェクトでブラウザ キャッシュ設定を無効にする例

プロジェクトをリリースするときに、キャッシュをクリーンアップする必要があるという問題に遭遇することが...

MySQL でのワイルドカードを使用したファジークエリの実装に関する簡単な説明

MySQL データベースでは、あいまいクエリが必要な場合にワイルドカードを使用します。まず、演算子と...

MySQL 5.7.18 無料インストール版ウィンドウ設定方法

初めてのブログです。データベースの勉強を始めた頃のことを書いています。自分でダウンロードしたのですが...

この記事は、JQueryの基本的な操作を理解し、始めるのに役立ちます。

目次1. Jquery を使用する手順: (1)jsライブラリをインポートする(2)ページ読み込みイ...

ユーザーエクスペリエンスの76の経験ポイントの要約

ウェブサイト体験の分類1. 感覚体験:快適性を重視した視聴覚体験をユーザーに提供します。 2. イン...

Spring Boot 2.4 の新機能、ワンクリックビルド、Docker イメージプロセスの詳細説明

背景開発プロセス中に Docker コンテナ化をサポートするために、通常は Maven を使用してコ...

MySQL 結合クエリ構文と例

接続クエリ:これは、2 つのクエリ (またはテーブル) の各行をペアで接続した結果です。つまり、1 ...

複数の X 軸を使用して 7 日間の天気予報を実現するための Echarts サンプル コード

目次UIデザインEcharts の例の効果序文サンプルコード最終結果UIデザイン Echarts の...

Linux で同じバージョンの R を使用して Seurat2 と Seurat3 を同時にインストールするチュートリアル

Seurat は、単一細胞解析用の重量級の R パッケージです。使用したことがある人なら誰でも、その...

JavaScript スタイル オブジェクトと CurrentStyle オブジェクトのケース スタディ

1. スタイルオブジェクトスタイル オブジェクトは単一のスタイル宣言を表し、スタイルが適用されている...

経験者のHTMLの書き方と理由の分析

1. ナビゲーション: 順序なしリストとその他のラベル要素ナビゲーションを記述するために最も一般的に...

WeChatアプレットが左右連携を実現

この記事では、WeChatアプレットの左右連動を実現するための具体的なコードを参考までに紹介します。...

HTML a タグの href 属性を使用して相対パスと絶対パスを指定する方法

実際のWeb開発では、画像の挿入やCSSファイルなどすべてパスが必要となります。ファイルパスを誤って...

ネイティブ js を使用してライブ バレット スクリーンのスクロール効果をシミュレートします。

目次1. 基本原則2. 特定のコード要約する1. 基本原則まず、生放送エリアを10の部分に分割し(個...