目次
問題
高さの固定ソリューション
Flexbox ソリューション
ホームページ ウェブフロントエンド htmlチュートリアル CSS Secret Garden: Sticky footers_html/css_WEB-ITnose

CSS Secret Garden: Sticky footers_html/css_WEB-ITnose

Jun 21, 2016 am 08:51 AM

『CSS Secrets』は @Lea Verou による最新の本で、CSS に関する小さな秘密がいくつか説明されています。これは CSSers にとって読む価値のある本です。一定期間読んだ後、私、@全域と @彦子は、関連する読書感想文を W3cplus で公開し、皆さんと共有します。

問題

Web デザインにおいて、スティッキー フッター デザインは、ほとんどの人が一度は経験したことがある最も古く、最も一般的な効果の 1 つです。これは次のように要約できます。ページのコンテンツが十分な長さでない場合、フッター ブロックはウィンドウの下部に貼り付けられます。コンテンツが十分な長さの場合、フッター ブロックはコンテンツによって押し下げられます。

この効果は遍在していて人気があるだけでなく、驚くほど簡単に達成できるように見えます。しかし、実際の導入には予想以上に時間がかかりました。さらに、CSS 2.1 のソリューションでは、ほとんどの場合、フッターの高さが固定に設定されます。これは非常に脆弱であり、実現可能であることはほとんどありません。実際、この効果を実現するには複雑すぎて、特定のタグといくつかのハック方法を追加する必要もあります。 CSS2.1 にはいくつかの制限がありますが、最新の CSS を使用すると、この効果をさらに向上させることができます。どうすればよいでしょうか?

この効果を見たことがないか、この問題に関する情報に興味がある場合は、Web 開発者の多くのアイデアと解決策を提供する人気の記事を以下に示します。

  • CSS スティッキー フッター レイアウト
  • Ryan Fait の CSS Sticky Footer
  • Sticky Footer
  • Sticky CSS フッター: 柔軟な方法
  • モダンでクリーンな CSS "Sticky Footer"

最後の 2 つは最もクリーンな実装ですが、それでも独自の制限があります。

高さの固定ソリューション

要素の下でいくつかの一般的な HTML タグ要素を使用します。

<header>    <h1>Site name</h1></header><main>    <p>Bacon Ipsum dolor sit amet...    <!-- Filler text from baconipsum.com --></p></main><footer><p>&copy; 2015 No rights reserved.</p><p>Made with ♥ by an anonymous pastafarian.</p></footer>
ログイン後にコピー

ページの基本スタイルをいくつか記述します。表示される効果は次のとおりです。

次に、コンテンツをいくつか減らしてみましょう。以下に示すように、何が起こるかを確認できます。

問題はありますが、どうすれば解決できますか?

フッター テキストがコンテナーからオーバーフローしないと仮定すると、コンテナーの高さを導き出すことができます。

2行 * 行高 + 3 x 段落的margin + 垂直的padding = 2 x 1.5em + 3 x 1em + 1em = 7em
ログイン後にコピー

同様に、ヘッダーの高さは 2.5em です。したがって、ビューポートの相対単位と calc() を使用すると、CSS の 1 行でスティッキー フッター効果を実現できます。

main {    min-height: calc(100vh - 2.5em - 7em);    /* Avoid padding/borders screwing up our height: */    box-sizing: border-box;}
ログイン後にコピー

あるいは、コンテナを使用して

#wrapper {    min-height: calc(100vh - 7em);}
ログイン後にコピー

これは、主に次の理由により、既存の高さ固定ソリューションよりもわずかに優れているように見えます。そのシンプルさ。ただし、レイアウトが単純であることを除けば、これは実用的ではありません。ラッピングするフッターテキストコンテナの高さを毎回計算する必要があるため、コンテナの最小高さを毎回計算する必要があります。タイトルとコンテンツをラップするために HTML コンテナを追加したい場合は別ですが、それは重要です。確かに、この時代では、私たちはもっと良くできるはずですよね?

Flexbox ソリューション

Flexbox は、この種の問題を解決するのに最適なソリューションです。これを完全に実現するには、数行の CSS コードが必要なだけで、奇妙な計算をしたり、余分な HTML 要素を追加したりする必要はありません。まず、 要素に display:flex を設定する必要があります。親要素 ( ) のブロック要素が 3 つあり、レイアウトを切り替えるために Flexbox を使用する場合、 flex-flow:column も設定する必要があります。そうしないと、3 つのブロックが並んでしまいます。以下に示すように:

body {    display: flex;    flex-flow: column;}
ログイン後にコピー

この時点では、各要素が占めるビューポートの高さはそのコンテンツによって決まるため、ページは以前と同じように見えます。このように、Flexbox は真に活用されていないと言えます。

実用的な観点からは、 のコンテンツがウィンドウ全体を占めることができるように、 の min-height 値を 100vh に設定する必要があります。窓の高さ。これは完了していますが、効果は次の図のようになります:

に最小の高さが指定されている場合でも、各ボックスの高さは依然としてボディのサイズに依存します。その内容。

ここではヘッダーとフッターの高さを設定する必要がありますが、コンテンツの高さは残りのスペースに合わせて自動的に調整されます。

body {    display: flex;    flex-flow: column;    min-height: 100vh;}main { flex: 1; }
ログイン後にコピー

の flex 値を 0 より大きく設定できます:

flex プロパティは、flex-grow、flex の 3 つのプロパティの略称です。 -縮小とフレックスベース。いずれかの要素が flex を 0 より大きく設定すると、要素はコンテナーの残りのスペースに合わせてサイズを柔軟に制御します。たとえば、
が flex:2 に設定され、
が flex:1 に設定されている場合、同様に、フッターの高さはメイン コンテンツの高さの半分になります。 4 と 2 と 2 と 1 ではなく、倍数比の値が同じであるため、同じ効果があります。

それだけです。これ以上コードは必要ありません。以下に示すように、スティッキーフッター効果を実現できます:

わずか 4 行のコードで、Flexbox は非常に強力で完璧だと思いませんか?

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

&lt; Progress&gt;の目的は何ですか 要素? &lt; Progress&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? Mar 17, 2025 pm 12:20 PM

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

&lt; datalist&gt;の目的は何ですか 要素? &lt; datalist&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? Mar 17, 2025 pm 12:27 PM

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

&lt; meter&gt;の目的は何ですか 要素? &lt; meter&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? Mar 20, 2025 pm 05:56 PM

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

&lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? &lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? Mar 20, 2025 pm 06:05 PM

この記事では、&lt; iframe&gt;外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

HTMLは初心者のために簡単に学ぶことができますか? HTMLは初心者のために簡単に学ぶことができますか? Apr 07, 2025 am 12:11 AM

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用​​できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

See all articles