• 投稿日 2021.03.05
  • 最終更新日 2023.03.27

広告・PRあり

[IE11]flex-direction columnでmargin autoをやったら空白ができた

[IE11]flex-direction columnでmargin autoをやったら空白ができた

むったん
親要素たちの高さ揃えたいからflexbox使って、子要素を縦配置にしたいからflex-direction使って…親要素の下に子要素くっつけたいからmargin:0 auto auto;にして…できた!
パンダくん
ねぇ…それ、IEでできてる?
むったん
いやいや、こんな簡単なことできて…いやぁぁぁ!なにこの空白!なんで下に伸びてるの!!
パンダくん
言わんこっちゃない。他のブラウザは大丈夫そうだし、IE11のために1行追加しよう!

ども、むったん(@6ttan)です。

flexboxって、とっても便利ですよね!
一昔前にfloatで対応していたあれやこれやが、シュパっとできちゃうのだから(擬音語w

でも油断してるとIE11で未対応だったりで、崩れてることがざらにあります。
今回はその崩れてた事例と解決方法について書いていきます。

謎の余白ができた

ソースコード

やりたかったことはこんな感じです。

See the Pen WNoKexe by むったん (@6ttan) on CodePen.

コードの説明

親要素.flexboxを横並びに。
子要素.content01.content02の高さを揃えて。
尚且つ孫要素にあたる見出しやリストの高さが異なっても一番下のイメージに模した.imageを下揃えにしたかったんです。

孫要素の見出しやリストの高さが異なっても一番下のイメージを下揃えにしたい箇所は、まず子要素でflex-direction: column;を指定します。
孫要素.imageにはmargin: auto auto 0;を指定してあげれば、上記のようにリスト部分の高さが異なっても下に配置されるようになります。
※子要素でflex-direction: column;を指定したのは、見出しやリストに横幅を設定したくなかったから縦配置にしました。

期待を裏切らないIE11

これを実装して、Chrome、Firefox、Safari、Edgeでは問題なく配置されていましたが…やはり期待を裏切らないのがIE11。
flex-direction: column;をもしくはflex-direction: column-reverse;を使用するとバグが発生するらしく、以下のようになるらしい。
というか、なった。

「この空白なんなんだよぉぉ😱」ってヒステリックに叫んでしまったけど、とりあえず落ち着こう。
先人たちは既に解決方法を見つけていました(ありがたや〜🙏

解決方法

flex-direction: column;をもしくはflex-direction: column-reverse;の子要素に対してmin-height: 0%;を入れてあげれば万事解決でした👏

See the Pen flex-directionの使い方(IE11対応) by むったん (@6ttan) on CodePen.

今回で言えば謎の空白ができた.imageの部分に追加しました。
IE11の謎の空白が無くなるし、他ブラウザにも影響ありませんでした。

めでたし、めでたし👏

About Me

むったん
フロントエンドエンジニア | webデザイナー | ブロガー

日々webサイト制作などを行っているフリーランスです。
ブログでは制作の備忘録からゲーム、愛犬トイについて書いています。
お仕事のご依頼はお問い合わせからお願いします。