これはなに
React + Tailwind CSSでフッタの位置を画面の最下部に固定する方法のメモ。
なにをつくるか
フッタの位置を画面の最下部に固定する。何もしないと、メインコンテンツが少ないときに。フッタが最下部よりも上に表示されてしまう。それを防ぐ。
この実装のことを"Sticky footers"と呼ぶらしい。
やり方
下記サイトが参考になった。
Grid Layoutを使う
Grid Layoutを使って、フッタを画面の最下部に固定する。コンテンツをラップするdiv要素を作成し、その最小の高さを設定する。そして、grid
を指定し、grid-template-rows
でauto 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を使う
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を使う方法のほうが簡潔である。