Tailwind で footer を下に固定する

要約
footer が上に上がる問題は、header、main、footer を囲む要素に、「grid min-h-[100lvh] grid-rows-[auto_1fr_auto]」を指定することで解決できます。`lvh`を使うのでモバイルブラウザも影響を受けにくいです。
意見はこのエリアに表示されます

結構、手薄になりがちなところですが、html もしくは、Next.js や React でページを構成しているときに、Tailwind CSS を使用して headermainfooter でページを分けた場合、コンテンツの高さによって footer が途中で「上がってしまう」問題に悩まされたことはありませんか?この問題は Tailwind の簡単なテクニックで解決できます。

結論として、下記のように親要素に grid レイアウト と lvh を組み合わせることで、PC及びモバイルブラウザに対応したレイアウトを作ることができます。

headermainfooter の順にコンテンツが配置されるページで、以下のように grid レイアウトを使用すると、 footer がコンテンツ量に関係なくページの下に固定されるようになります。

React でなく、html で書く場合は以下のように class を指定します。

min-h-[100lvh] はページ全体の高さを確保するために使います。この指定によって、ページの高さが少なくともビューポートの高さ( 100lvh )になるように調整されます。

grid-rows-[auto_1fr_auto] は、 headermainfooter の高さの関係を定義しています。 auto でヘッダーとフッターの高さはそれぞれのコンテンツに合わせ、 1fr でメインコンテンツが余ったスペースを占めるようにしています。

なぜ lvh を使うのか?

lvh はビューポートの高さを示す単位です。従来の vh と異なり、モバイルブラウザでの UI 要素(アドレスバーなど)による高さ変動の影響を受けにくいのが特徴です。これにより、ページ全体の高さが安定し、フッターが常にビューポートの下部に表示されることを確保します。

grid-template-rows とは

grid-template-rows は CSS Grid のプロパティで、各行の高さを指定するために使います。この例では、auto 1fr auto という設定で、headerfooter がそれぞれの内容に応じた高さを持ち、main が残りのスペースを埋めるようにしています。これにより、メインコンテンツの量が少なくてもフッターはページの最下部に固定されます。

まとめ

Tailwind CSS で footer が上がってしまう問題は、 grid レイアウトと min-h-[100lvh] の組み合わせで簡単に解決できます。 footer が常にページ下部に固定されることで、見た目が安定し、ユーザー体験も向上します。

参考

Explore More
関連記事はありません。