コンテンツが少ない時、普通フッターはコンテンツ量に影響されるので、フッターとウインドウの下部に隙間ができてしまい、中途半端な位置に設置されてるような感じになってしまいます。
これをコンテンツ量が少ない時はウィンドウの最下部にフッターを固定させて、スクロールが出るくらいのコンテンツ量が多いときはウィンドウ最下部に固定させずに、そのコンテンツ量に合わせて成り行きにさせる為にはどうしたらいいのか?というのをメモ。
今回は2パターンの方法をメモ。2パターンともFlexbox
を使用した方法です。Flexbox
を利用することで高さの指定をする必要がない点がメリットです。
Flexboxとフッターのマージンを設定する
まずは、Flexbox
とフッターにmargin
を設定する方法です。
ここはヘッダー
ここはコンテンツ
上記のようにheader
要素、main
要素、footer
要素のみと簡潔にしています。
body{
display: flex;
flex-direction: column;
min-height: 100vh;
}
footer{
margin-top:auto;
}
まずは、body要素にdisplay:flex;
を指定します。このままだとコンテンツ全体が横並びになってしまうので、flex-direction: column;
で縦並びにします。min-height:100vh;
を指定します。
最小の高さを100vh
とすることでビューポートの高さに対する割合になるので画面いっぱいになります。
ここで、footer
要素にmargin-top:auto;
を指定することでウィンドウの最下部に表示されるようになります。
See the Pen コンテンツが少ない時、フッターを下に固定 by kiriyama (@kirikirimai) on CodePen.
Flexboxとフッターの直前の要素に対して設定する
続いてはフッターの直前の要素、、今回の例でいえば、main
要素です。
こちらに対してCSSの設定をしていきますが、body
要素に対するCSSは同じです。
ここはヘッダー
ここはコンテンツ
html
は前回と同様です。
body{
display: flex;
flex-direction: column;
min-height: 100vh;
}
main{
flex:1;
}
今回は、main
要素にflex:1;
の設定をしました。
これだけでコンテンツが少なくてもfooter
要素がウィンドウの最下部に表示されるようになります。
flexプロパティについて
flexプロパティは、 flex-grow/flex-shrink/ flex-basisのプロパティをまとめて指定でき、フレックスコンテナ内の子要素であるフレックスアイテムの幅をまとめて指定する時に使用します。詳しくは下記のサイトを参考にしてください。
http://www.htmq.com/css/flex.shtml
flex:1;
についてですが、こちらはフレックスコンテナ(今回の例だとbody
要素)の横幅もしくは縦(flex-direction:column
にしてる)に対してフレックスアイテム(header
/main
/footer
要素)の伸び方の比率を指定するプロパティで、フレックスコンテナの横幅・縦に対してフレックスアイテムの合計の横幅・縦が短い場合はそのスペースを自動的に埋めます。
ただ全てのフレックスアイテムに対してflex:1;
を設定すると各フレックスアイテムが均等に伸びてしまう為、今回はmain
要素のフレックスアイテムにだけ設定することで、ウィンドウの高さとフッターとのスペースを埋めようとmain
要素が伸びるわけです。下記のサンプルでmain
要素だけが高さが伸びるので背景色がfooter
要素まで続いてることが分かるかと思います。
See the Pen コンテンツが少ない時、フッターを下に固定 ver2 by kiriyama (@kirikirimai) on CodePen.
まとめ
今回は、Flexboxを使ったフッターを最下部に設置するCSSの方法を記事にしましたが、他にもやり方はあります。以下参考サイトです。