flexboxで下に余白ができてしまう現象と対策
はじめに
先日、flexboxを使用して縦並びのレイアウトのページを作成していた時、margin
やpadding
など余白の設定をしていないのに画像の下部に余白(スペース)ができてしまいました。
flexboxで意図しない余白が発生してしまった場合の対処法を調べたのでご紹介します。
目次
現象を再現してみる
下記HTMLソースのように、画像<img src="画像パス">
だけだと余白はできないようです。
2つの画像等をリンクタグ<a href="">
等で囲むと画像の下に余白ができてしまいます。
HTML(余白ができない場合)
まずは正常(余白ができない)場合です。
img
タグだけを記述すると余白はできません。
- <div class="test">
- <img src="画像パス">
- <img src="画像パス">
- </div>
HTML(余白ができる場合)
上記のとおり、img
をリンクタグa
で囲ってみました。
figure
で囲ってみても同じ結果になりました。
- <div class="test01">
- <a href="#"><img src="画像パス"></a>
- <a href="#"><img src="画像パス"></a>
- </div>
CSS
CSSはどちらの場合も同じ物を使用しています。
画像を縦並びにするためにflex-direction: column;
を設定していますが、使用しなくても結果は同じでした。
余白が分かりやすいように<background:#ff0000>
を設定しています。
- .test {
- display: flex;
- align-items: center;
- justify-content: center;
- flex-direction: column;
- background: #ff0000;
- }
できあがったもの(余白ができない場合)
写真は、以前参拝した賣布神社(島根県松江市)の物を使用してみました。


できあがったもの(余白ができる場合)
この場合だと、1枚目・2枚目の画像それぞれに下に余白(スペース)ができています。
flexbox下部の余白を無くす方法
ではどうすればflexbox下部の余白を無くなるのか、というと、flexbox
の子要素(今回の場合a
タグ)にもdisplay: flex
を設定すれば良いです(孫要素(今回の場合img
タグ)に設定しても余白が無くなりました)。
HTML
- <div class="test01">
- <a href="#"><img src="画像パス"></a>
- <a href="#"><img src="画像パス"></a>
- </div>
CSS
- .test {
- display: flex;
- align-items: center;
- justify-content: center;
- flex-direction: column;
- background: #ff0000;
- }
- .test a {
- display: flex;
- }
できあがったもの
原理はよく分かりませんが、子要素もflex
を設定することで、余白が無くなります。
余談ですが、display: block
などでも試してみましたが、余白が無くなる物と無くならない物がありましたので、少しまとめてみました。
displayの値と余白
displayの値 | 余白 |
---|---|
inline | 無くならなかった |
block | 無くならなかった |
inline-block | 無くならなかった |
flex | 無くなった |
inline-flex | 無くなった |
contents | 無くなった |