【CSS】display: flex;とmargin: auto;を使って要素の高さを揃える方法

CSS

今回は、display: flex;とmargin: auto;を使って要素の高さを揃える方法について紹介します。

高さの違う要素を揃える時の参考にしてみてください。

【CSS】display: flex;とmargin: auto;を使って要素の高さを揃える方法

デモサイトはこちら。

See the Pen
Untitled
by ゆーじろー (@yuji64)
on CodePen.

ブロックの真ん中にあるダミーテキストの高さがそれぞれ違いますが、ボタンの高さが揃っていることが分かるでしょう。

今回はボタンの高さをいつでも揃うような実装方法を紹介します。

HTML

HTMLコードはこちら。

<div class="wrap">
    <div class="item">
        <div class="item__image">
            <img src="https://yujiromx.com/wp-content/uploads/2022/04/freelancer-g73d4de2a5_1280.jpg" alt="">
        </div>
        <h3 class="item__title">タイトルです</h3>
        <p class="item__text">
            ダミーテキストが入る予定です。ダミーテキストが入る予定です。ダミーテキストが入る予定です。ダミーテキストが入る予定です。ダミーテキストが入る予定です。ダミーテキストが入る予定です。ダミーテキストが入る予定です。
        </p>
        <div class="button">
            <a href="">ボタン</a>
        </div>
    </div>
    <div class="item">
        <div class="item__image">
            <img src="https://yujiromx.com/wp-content/uploads/2022/04/freelancer-g73d4de2a5_1280.jpg" alt="">
        </div>
        <h3 class="item__title">タイトルです</h3>
        <p class="item__text">
            ダミーテキストが入る予定です。ダミーテキストが入る予定です。ダミーテキストが入る予定です。ダミーテキストが入る予定です。ダミーテキストが入る予定です。
        </p>
        <div class="button">
            <a href="">ボタン</a>
        </div>
    </div>
    <div class="item">
        <div class="item__image">
            <img src="https://yujiromx.com/wp-content/uploads/2022/04/freelancer-g73d4de2a5_1280.jpg" alt="">
        </div>
        <h3 class="item__title">タイトルです</h3>
        <p class="item__text">
            ダミーテキストが入る予定です。ダミーテキストが入る予定です。ダミーテキストが入る予定です。
        </p>
        <div class="button">
            <a href="">ボタン</a>
        </div>
    </div>
</div>

親要素wrapの中にitemボックスを3つ用意しました。

CSS

CSSコードはこちら。

.wrap {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}

.wrap .item {
  border: 1px solid black;
  padding: 15px;
  text-align: center;
  width: 32%;
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -webkit-flex-direction: column;
      -ms-flex-direction: column;
          flex-direction: column;
}

.wrap .item:not(:first-child) {
  margin-left: 2%;
}

.wrap .item__title {
  font-size: 22px;
  margin-top: 20px;
}

.wrap .item__text {
  font-size: 15px;
  line-height: 1.5;
  margin-top: 20px;
  text-align: left;
  margin-bottom: 15px;
}

.wrap .item .button {
  margin-top: auto;
}

.wrap .item .button a {
  display: inline-block;
  background-color: #264b67;
  color: #fff;
  padding: 15px 30px;
}

上記のコードの中で、ボタンの高さを揃える際には以下のコードがポイントとなります。

まずはボタンの親要素に当たるitemに対して「display: flex;」を指定して、「flex-direction: column;」で縦向きに戻します。

.wrap .item {
  border: 1px solid black;
  padding: 15px;
  text-align: center;
  width: 32%;
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -webkit-flex-direction: column;
      -ms-flex-direction: column;
          flex-direction: column;
}

そして子要素のボタンであるbuttonに対して「margin-top: auto;」を指定することで、margin-topの高さを自動調整し、ボタンの高さが揃うという仕組みです。

フレックスボックスとmarginのautoを使うことで高さを揃えることができるのはかなり便利でした。

まとめ

以上が、display: flex;margin: auto;を使って要素の高さを揃える方法でした。