CSS
 Computer >> コンピューター >  >> プログラミング >> CSS

Flexboxで子要素が縦に伸びるのを防ぐ方法|CSSで高さのストレッチを解消する3つのテクニック

Flexboxコンテナの中にボタンが入っているケースを考えてみましょう。

<div class="container">
  <button class="button">Button</button>
</div>

このボタン(子要素)を、justify-contentプロパティを使って水平方向に中央揃えしてみます。

.container {
  height: 300px;
  display: flex;
  justify-content: center;
}

すると、ボタンの高さが親要素の高さ(この場合は300px)いっぱいに引き伸ばされてしまいます。

Flexboxで子要素が縦に伸びるのを防ぐ方法|CSSで高さのストレッチを解消する3つのテクニック

これはおそらく意図した動作ではないはずです。

Flexコンテナの子要素(Flexアイテム)が垂直方向に引き伸ばされるのを防ぐには、いくつかの方法があります。それぞれ詳しく見ていきましょう。

方法1: align-itemsで中央揃えする

align-itemsプロパティを使ってFlexアイテムを垂直方向に中央揃えすると、ストレッチは自動的に解除されます。

.container {
  height: 300px;
  display: flex;
  justify-content: center;

  /* 垂直方向の中央揃え */
  align-items: center;
}
Flexboxで子要素が縦に伸びるのを防ぐ方法|CSSで高さのストレッチを解消する3つのテクニック

ただし、この方法は「Flexアイテムを垂直方向に中央揃えしたい場合」にしか使えません。中央揃え以外の配置にしたいときは、次の方法を検討しましょう。

方法2: height: max-content を指定する

Flexアイテムを垂直方向に中央揃えしたくない場合は、Flexアイテム側のCSSでheightプロパティにmax-contentという値を指定します。

.button {
  height: max-content;
}
Flexboxで子要素が縦に伸びるのを防ぐ方法|CSSで高さのストレッチを解消する3つのテクニック

これにより、Flexアイテムの高さはそのコンテンツによって決まるようになります。このボタンの例ではテキストがコンテンツにあたるため、文字サイズ14px(+ボタンのデフォルトのパディング)が高さとなります。

方法3: align-self を使う

もうひとつの方法として、Flexアイテム側にalign-selfプロパティを指定することもできます。

.button {
  align-self: flex-start;
}

シンプルなユースケースであれば、max-contentを使った場合と同じ結果が得られます。ただし、どちらの方法が適切かは具体的な状況によって異なるため、両方試して比較してみるのがおすすめです。

  1. CSSで要素をブラウザウィンドウの高さ全体に広げる方法をわかりやすく解説

    CSSを使って要素をブラウザウィンドウの高さ全体に広げるには、html 要素と body 要素の高さを 100% に設定した上で、対象の要素にも height: 100% を指定します。以下に具体的な実装例を示します。 コード例 <!DOCTYPE html> <html> <head> <title>Page Title</title> <style> *{ box-sizing: border-box; } html, body { height: 100%;

  2. CSSで子要素を選択する方法|子結合子と子孫結合子の違いを解説

    CSSの子結合子(child combinator)は、親要素の直下にある子要素のみを選択するために使用します。記号「>」を用いて表現します。子結合子の基本的な構文は以下の通りです。セレクタ > セレクタ { プロパティ: /*値*/; }一方、子孫結合子(descendant combinator)は、親要素に含まれるすべての子孫要素(子・孫・ひ孫など、階層の深さに関係なく)を選択します。セレクタ同士を半角スペースで区切って記述します。子孫結合子の基本的な構文は以下の通りです。セレクタ セレクタ { プロパティ: /*値*/; }使用例1:子結合子の基本的な使い方