こんにちは、さち です。
以前、ウェブサイトを作る時に、CSS だけで「フッター」をウィンドウの下部に追従する(貼り付くようにする)方法についての記事を書きました。
当時は display: flex;(フレックスボックス) を使った方法でしたが、今回は display: grid;(グリッドレイアウト) を使った方法を紹介します。
個人的には、「グリッドレイアウト」の方がシンプルで分かりやすいと思います。
サンプル・完成予想図
このような HTML を準備しました。
<div id="wrapper">
<header>header</header>
<main>
ここから<br>
main<br>
ここまで<br>
</main>
<footer>footer</footer>
</div>
ウィンドウのサイズがページの全長より大きい時に、「フッター(footer)」がウィンドウの下部に追従するようにしてみましょう。
イメージとしてはこんな感じ。(ウィンドウのサイズの変化を再現するため、body の高さを動かしています)
ウィンドウのサイズがページの全長( header,main,footer の高さの合計値)より大きくなると、「フッター」がウィンドウの下部に追従します。
逆に、ウィンドウのページの全長より小さくなると、「フッター」は「メイン」のデフォルトの高さで止まり、ウィンドウにスクロールバーが表示されます。
これを CSS だけで実装してみましょう。
ちなみに、position: sticky; ではできません。(「スクロール」に追従する機能なので、ウィンドウサイズに合わせたい今回とは異なる)
「グリッドレイアウト」を使って解決
フレックスボックスは、display: grid; を記述することで利用できます。
これを適用した要素は「グリッドレイアウト」となり、直下の子要素は幅・高さが連動して整列されるようになります。
実際にグリッドレイアウトを使って「フッター」をウィンドウ下部に追従させてみましょう。
CSS
CSS はこんな感じ。
html, body, #wrapper {
width: 100%;
height: 100%;
}
#wrapper {
display: grid;
grid-template-rows: auto 1fr auto;
}
header {
background-color: red;
height: 40px;
}
main {
background-color: orange;
}
footer {
background-color: green;
height: 40px;
}
解説
とりあえずできれば良いという人は、前述の CSS をコピペして使うだけでOKです。
「グリッドレイアウト」の仕組みや挙動を理解したい人は、ここから先も読んでみて下さい。
「行」の高さを指定
「グリッドレイアウト」では、「行」と「列」に並んでいる「子要素」のサイズを指定できます。
「行」の高さは grid-template-rows 、「列」の幅は grid-template-columns で調整します。(今回必要なのは「行」なので grid-template-rows を使っています)
例えば、display: grid; である「親要素」に grid-template-rows: auto 1fr; を設定したとします。
この状態で「親要素」の高さが変わると、1行目の「子要素」の高さはデフォルトのまま、2行目の「子要素」の高さは「親要素」に合わせて伸び縮みします。
この機能を使って「メイン」だけを伸び縮みさせることで、「フッター」を常に下部に追従させることができます。
min-height や min-width で最小値を設定している場合は、grid-template-rows や grid-template-columns を設定しても最小値より小さくなることはありません。CSS の詳細
#wrapper に設定した grid-template-rows: auto 1fr auto; によって、2行目の要素である main の高さだけが伸び縮みします。
#wrapper {
display: grid;
grid-template-rows: auto 1fr auto;
}
header footer の高さはデフォルトのまま変わらず、main だけが伸びることで、「フッター」がウィンドウ下部に追従してくれます。
関連記事
この記事と同じ内容を「フレックスボックス」で実装する方法です。



コメント