【CSS】Flexbox、flex-direction: column;とflex-grow: 1;を使ってボタンの位置を合わせる

ボタンの位置を揃えたいですー
flex-directionとflex-growの組み合わせで揃いますよー

実装してみる

「詳しくはこちら」のボタンの位置を同じにしてみます。これ、なにげに難しいです。

ポイントは

flex-directionで整えて、flex-growで揃える。

コードを見る(HTML・CSS)

HTML

<div class="oneArea">
  <div class="oneBox">
    <p class="one_title">1</p>
    <div class="one_inner">
      <div class="one_img"><img src="https://125naroom.com/wp/wp-content/themes/design125naroom/img/kinoko_pan.png" alt=""></div>
      <p class="one_text">テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト<strong class="one_underline">テキストテキスト</strong>テキストテキストテキストテキストテキスト</p>
    </div>
    <div class="one_btn"><a href="#" class="btn"><span class="b__text">詳しくはこちら</span></a></div>
  </div>
  <div class="oneBox">
    <p class="one_title">2</p>
    <div class="one_inner">
      <div class="one_img"><img src="https://125naroom.com/wp/wp-content/themes/design125naroom/img/kinoko_pan.png" alt=""></div>
      <p class="one_text">テキストテキストテキストテキストテキストテキストテキストテキスト<strong class="one_underline">テキストテキスト</strong>テキストテキスト</p>
    </div>
    <div class="one_btn"><a href="#" class="btn"><span class="b__text">詳しくはこちら</span></a></div>
  </div>
  <div class="oneBox">
    <p class="one_title">3</p>
    <div class="one_inner">
      <div class="one_img"><img src="https://125naroom.com/wp/wp-content/themes/design125naroom/img/kinoko_pan.png" alt=""></div>
      <p class="one_text">テキストテキストテキスト<strong class="one_underline">テキストテキスト</strong>テキストテキストテキスト</p>
    </div>
    <div class="one_btn"><a href="#" class="btn"><span class="b__text">詳しくはこちら</span></a></div>
  </div>
</div>

CSS

/* ---------- 01 ボタンの位置を合わせる ---------- */
.oneArea {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  max-width: 1024px;
  margin: 0 auto;
}
.oneArea .oneBox {
  width: 32%;
  padding: 20px;
  background: #fff;
  border: 2px solid #2b2a27;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
}
.oneArea .oneBox p {
  margin: 0;
}
.oneArea .oneBox p.one_title {
  font-size: 20px;
  text-align: center;
}
.oneArea .oneBox .one_inner {
  flex-grow: 1;
}
.oneArea .oneBox .one_inner .one_img {
  text-align: center;
  margin-bottom: 10px;
}
.oneArea .oneBox .one_inner .one_img img {
  max-width: 100%;
}
.oneArea .oneBox p.one_text {
  font-size: 14px;
}
.oneArea .oneBox .one_underline {
  background: linear-gradient(transparent 60%, #e8dc6a 0%);
}
.oneArea .oneBox > *:not(:last-child) {
  margin-bottom: 15px;
}

/* ボタン */
a.btn {
  display: flex;
  align-items: center;
  max-width: 500px;
  margin: 0 auto;
  padding: 1.0rem;
  border: 2px solid #2b2a27;
  background: #fff;
  text-decoration: none;
  transition: 0.3s;
}
a.btn:hover {
  background-color: #f3efe6;
}
a.btn .b__text {
  display: block;
  flex-grow: 1;
  color: #2b2a27;
  font-weight: bold;
  text-align: center;
  position: relative;
  padding-right: 15px;
  font-size: 14px;
}
a.btn .b__text::after {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  margin: auto;
  transform: rotate(45deg);
  border-top: 2px solid #2b2a27;
  border-right: 2px solid #2b2a27;
  box-sizing: border-box;
  width: 8px;
  height: 8px;
  transition: 0.3s;
}

/* 動きを減らす設定のとき */
@media (prefers-reduced-motion: reduce) {
  a.btn, a.btn .b__text::after { transition: none; }
}

制作メモ

flex-growは、IEでも問題ないですね。(2021年4月現在)

さいごに

おー、揃ったー
ちなみに代替案は、【jQuery】横並びの高さを揃える『matchHeight.js』ですー

関連記事

デザコトauthor

あ、いいな、と思うWebデザインを紹介しています。デザインの参考に。やさしいデザインが多いです。Webデザインギャラリー『デザインのこと - Web design gallery』を運営しています。