React + Tailwind CSSでフッタの位置を画面の最下部に固定する方法のメモ

この記事は最終更新日から1年以上経過しています。

これはなに Link to this heading

React + Tailwind CSSでフッタの位置を画面の最下部に固定する方法のメモ。

なにをつくるか Link to this heading

フッタの位置を画面の最下部に固定する。何もしないと、メインコンテンツが少ないときに。フッタが最下部よりも上に表示されてしまう。それを防ぐ。

この実装のことを"Sticky footers"と呼ぶらしい。

やり方 Link to this heading

下記サイトが参考になった。

Grid Layoutを使う Link to this heading

Grid Layoutを使って、フッタを画面の最下部に固定する。コンテンツをラップするdiv要素を作成し、その最小の高さを設定する。そして、gridを指定し、grid-template-rowsauto 1fr autoを指定する。

src/App.tsx
import React from 'react';

function App(): React.JSX.Element {
  return (
    <>
      <div
        className={[
          'w-full max-w-[100vw]',
          'min-h-[100svh] h-[100svh]',
          'grid grid-rows-[auto_1fr_auto]',
        ].join(' ')}
      >
        <header>header</header>
        <main>main</main>
        <footer>footer</footer>
      </div>
    </>
  );
}

これにより、ヘッダとフッタがautoの高さを持ち、メインコンテンツが残りの高さを持つようになる。

Flexboxを使う Link to this heading

Grid Layoutに対応していないブラウザを対象とする場合は、Flexboxを使う方法もある。コンテンツをラップするdiv要素を作成し、その最小の高さを設定する。そして、flexを指定し、flex-colを指定する。加えて、main要素にflex-1を指定する。

src/App.tsx
import React from 'react';

function App(): React.JSX.Element {
  return (
    <>
      <div
        className={[
          'w-full max-w-[100vw]',
          'min-h-[100svh] h-[100svh]',
          'flex flex-col',
        ].join(' ')}
      >
        <header>header</header>
        <main className="flex-1">main</main>
        <footer>footer</footer>
      </div>
    </>
  );
}

これにより、メインコンテンツがヘッダとフッタの間の高さを持つようになる。

この方法は、毎回flex-1を指定する必要があるため、Grid Layoutを使う方法のほうが簡潔である。

参考文献・URL Link to this heading

Licensed under CC BY-NC-SA 4.0
最終更新 2月 24, 2025
Hugo で構築されています。
テーマ StackJimmy によって設計されています。