例えば、要素の中にテキストがあったとします。
そして複数の要素がありますが、要素ごとに文字数が違います。
その場合、Flexboxで横にしたらこのようになります。
See the Pen
Flexboxで子要素の高さを揃えてコンテンツを上下中央① by junpei (@junpei-sugiyama)
on CodePen.
これはちゃんと行単位では子要素の高さは揃っていますが、このままコンテンツ内を上下中央にすると、このようになります。
See the Pen
Flexboxで子要素の高さを揃えてコンテンツを上下中央② by junpei (@junpei-sugiyama)
on CodePen.
高さがバラバラになりましたね。
これを、上下中央のままで高さを揃える方法を解説します。
(有料になっていたらすいません🙇♂️)
Flexboxで子要素の高さを揃えてコンテンツを上下中央にする方法
まずは冒頭のコードを見てみます。
HTMLはこちら。
<div class="container">
<div class="box">テキストが入ります。</div>
<div class="box">テキストが入ります。テキストが入ります。</div>
<div class="box">テキストが入ります。テキストが入ります。テキストが入ります。</div>
<div class="box">テキストが入ります。テキストが入ります。テキストが入ります。テキストが入ります。</div>
<div class="box">テキストが入ります。テキストが入ります。テキストが入ります。テキストが入ります。テキストが入ります。</div>
</div>
特に変わったところはありません。
CSSはこちら。
.container {
display: flex;
flex-wrap: wrap;
gap: 10px;
max-width: 680px;
width: 100%;
}
.box {
background-color: #ccc;
padding: 10px;
width: 25%;
}
特に変わったところはありませんが、以下補足になります。
- 親要素に
display: flex;
で子要素を横並び - 親要素に
flex-wrap: wrap;
で子要素を折り返し - 親要素に
gap: 10px;
で子要素間に余白
この状態のデモはこちらになります。
See the Pen
Flexboxで子要素の高さを揃えてコンテンツを上下中央① by junpei (@junpei-sugiyama)
on CodePen.
そして、上下中央にするには、親要素にalign-items: center;
を追記します。
そして、デモはこちらになります。
See the Pen
Flexboxで子要素の高さを揃えてコンテンツを上下中央② by junpei (@junpei-sugiyama)
on CodePen.
そして本題ですが、上記のようにコンテンツを上下中央にしたまま、子要素の高さを揃えるコードはこちらです。
.container {
/* align-items: center; */
display: flex;
flex-wrap: wrap;
gap: 10px;
max-width: 680px;
width: 100%;
}
.box {
align-items: center; /* 追記 */
background-color: #ccc;
display: flex; /* 追記 */
padding: 10px;
width: 25%;
}
親要素のalign-items: center;
を削除して、子要素にalign-items: center;
とdisplay: flex;
を追記しました。
そしてデモがこちらです。
See the Pen
Flexboxで子要素の高さを揃えてコンテンツを上下中央③ by junpei (@junpei-sugiyama)
on CodePen.
これでOKです。
まとめ
今回は、Flexboxで子要素の高さを揃えて、コンテンツを上下中央にする方法を解説してきました。
コード自体は難しくありませんが、書く場所がちょっとイメージしにくいかも知れないので、注意しましょう。
以上になります。