Flexbox における align-items プロパティを探る

CSSCSSBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、コンテナ内のフレックス項目の垂直整列を制御するための強力な CSS レイアウト技術である Flexbox のalign-itemsプロパティを調べます。一連の実践的な演習を通じて、stretchflex-startflex-endcenterbaselineなどのさまざまな整列値を使用してフレックス項目を操作する方法を学びます。

この実験では、HTML 構造の作成、さまざまな整列戦略の適用、およびalign-itemsプロパティがフレックスコンテナのレイアウトにどのように影響するかを理解するためのガイドが提供されます。実際の例を使って実験することで、レスポンシブな Web デザインにおける要素の配置とサイズを効果的に制御する方法を学ぶことができます。

align-items 属性の基本を理解する

このステップでは、Flexbox のalign-itemsプロパティの基本概念を学びます。これは、フレックスコンテナ内のフレックス項目の垂直整列を制御するために重要です。

align-itemsプロパティは、フレックス項目がクロス軸(行レイアウトでは垂直方向、列レイアウトでは水平方向)に沿ってどのように整列するかを定義します。デフォルトでは、フレックス項目はコンテナのクロス軸を埋めるように伸縮します。

align-itemsの基本的な使い方を示すために、簡単な HTML と CSS の例を作成しましょう。

<!doctype html>
<html>
  <head>
    <style>
      .flex-container {
        display: flex;
        height: 200px;
        border: 2px solid blue;
      }
      .flex-item {
        width: 100px;
        background-color: lightgreen;
        margin: 5px;
      }
    </style>
  </head>
  <body>
    <div class="flex-container">
      <div class="flex-item">Item 1</div>
      <div class="flex-item">Item 2</div>
      <div class="flex-item">Item 3</div>
    </div>
  </body>
</html>

この例では、3 つのフレックス項目を持つフレックスコンテナを作成しました。デフォルトでは、align-itemsプロパティはstretchに設定されており、項目はコンテナの高さを埋めるように伸縮します。

主なalign-items値は以下の通りです。

  • stretch(デフォルト):項目がコンテナを埋めるように伸縮する
  • flex-start:項目がクロス軸の始端に整列する
  • flex-end:項目がクロス軸の終端に整列する
  • center:項目がクロス軸を中心に整列する
  • baseline:項目がそれぞれのテキストのベースラインに基づいて整列する

デフォルトのstretch整列の例の出力:

[Item 1][Item 2][Item 3]
 ------  ------  ------
 (full   (full   (full
  height) height) height)

WebIDE を開き、~/projectディレクトリに新しいファイルflexbox-align.htmlを作成します。上記の HTML コードをこのファイルにコピーして保存します。その後、このファイルを Web ブラウザで開いて、デフォルトの整列がどのように機能するかを確認できます。

Flexbox レイアウト用の HTML 構造を作成する

このステップでは、Flexbox レイアウトを設定する基本的な HTML 構造を作成する方法を学びます。前のステップを基に、複数のフレックス項目を持つより構造化された HTML ドキュメントを作成します。

WebIDE を開き、~/projectディレクトリに新しいファイルflexbox-layout.htmlを作成します。次の HTML 構造を使用して、典型的な Flexbox レイアウトを示します。

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Flexbox Layout Example</title>
    <style>
      .flex-container {
        display: flex;
        background-color: #f0f0f0;
        padding: 20px;
        border: 2px solid #333;
      }
      .flex-item {
        width: 100px;
        height: 100px;
        margin: 10px;
        background-color: #4caf50;
        color: white;
        text-align: center;
        line-height: 100px;
      }
    </style>
  </head>
  <body>
    <div class="flex-container">
      <div class="flex-item">Item 1</div>
      <div class="flex-item">Item 2</div>
      <div class="flex-item">Item 3</div>
      <div class="flex-item">Item 4</div>
      <div class="flex-item">Item 5</div>
    </div>
  </body>
</html>

この Flexbox レイアウトの主要なコンポーネントを分解してみましょう。

  1. .flex-containerにはdisplay: flexが設定されており、Flexbox レイアウトが有効になっています。
  2. 一貫したスタイルを持つ 5 つのフレックス項目を追加しました。
  3. コンテナには薄い灰色の背景とパディングがあります。
  4. 各項目は固定された幅と高さを持ち、緑色の背景があります。

例の出力は次のようになります。

[Item 1][Item 2][Item 3][Item 4][Item 5]
   ↑       ↑       ↑       ↑       ↑
  Green   Green   Green   Green   Green
  boxes   boxes   boxes   boxes   boxes

ファイルを保存し、Web ブラウザで開いて、Flexbox レイアウトがどのように機能するかを確認しましょう。項目が自動的に等間隔で水平方向に配置される様子に注目してください。

フレックス項目に伸縮整列を適用する

このステップでは、Flexbox のデフォルトの「伸縮」整列を調べ、クロス軸に沿ってフレックス項目を自動的にサイズ調整する方法を理解します。

前のステップで作成したflexbox-layout.htmlファイルを開きます。伸縮整列をより明確に示すために CSS を変更します。

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Stretch Alignment in Flexbox</title>
    <style>
      .flex-container {
        display: flex;
        height: 300px; /* Fixed container height */
        background-color: #f0f0f0;
        padding: 20px;
        border: 2px solid #333;
      }
      .flex-item {
        width: 100px;
        margin: 10px;
        background-color: #4caf50;
        color: white;
        text-align: center;
        /* No explicit height set */
      }
    </style>
  </head>
  <body>
    <div class="flex-container">
      <div class="flex-item">Item 1</div>
      <div class="flex-item">Item 2</div>
      <div class="flex-item">Item 3</div>
      <div class="flex-item">Item 4</div>
      <div class="flex-item">Item 5</div>
    </div>
  </body>
</html>

伸縮整列に関するポイント:

  • デフォルトでは、align-items: stretchがフレックスコンテナに適用されます。
  • フレックス項目は自動的に伸縮してコンテナの高さを埋めます。
  • 項目に明示的な高さが設定されていない場合にこれが発生します。
  • 伸縮はクロス軸に沿って行われます(行レイアウトでは垂直方向)。

例の出力の視覚化:

[Item 1][Item 2][Item 3][Item 4][Item 5]
   ↑       ↑       ↑       ↑       ↑
 Stretched Stretched Stretched Stretched Stretched
 to full   to full   to full   to full   to full
 height    height    height    height    height

個々の項目の高さが指定されていないにもかかわらず、項目が自動的に伸びてフレックスコンテナの 300px の高さを埋める様子に注目してください。これが Flexbox のデフォルトの「伸縮」動作です。

ファイルを保存し、Web ブラウザで開いて、伸縮整列がどのように機能するかを確認しましょう。各項目はコンテナの全高になり、均一な伸縮した外観が形成されます。

さまざまな align-items 値を試す

このステップでは、さまざまなalign-items値を調べ、コンテナ内のフレックス項目の垂直整列にどのように影響するかを見てみましょう。

flexbox-layout.htmlファイルを開き、さまざまなalign-items値を示すように CSS を更新します。

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Align-Items Experiment</title>
    <style>
      .flex-container {
        display: flex;
        height: 300px;
        background-color: #f0f0f0;
        border: 2px solid #333;
        margin-bottom: 20px;
      }
      .flex-item {
        width: 100px;
        margin: 10px;
        background-color: #4caf50;
        color: white;
        text-align: center;
        line-height: 50px;
      }

      /* Different align-items classes */
      .stretch {
        align-items: stretch;
      }
      .flex-start {
        align-items: flex-start;
      }
      .flex-end {
        align-items: flex-end;
      }
      .center {
        align-items: center;
      }
      .baseline {
        align-items: baseline;
      }
    </style>
  </head>
  <body>
    <div class="flex-container stretch">
      <div class="flex-item">Item 1</div>
      <div class="flex-item">Item 2</div>
      <div class="flex-item">Item 3</div>
    </div>
    <div class="flex-container flex-start">
      <div class="flex-item">Item 1</div>
      <div class="flex-item">Item 2</div>
      <div class="flex-item">Item 3</div>
    </div>
    <div class="flex-container flex-end">
      <div class="flex-item">Item 1</div>
      <div class="flex-item">Item 2</div>
      <div class="flex-item">Item 3</div>
    </div>
    <div class="flex-container center">
      <div class="flex-item">Item 1</div>
      <div class="flex-item">Item 2</div>
      <div class="flex-item">Item 3</div>
    </div>
    <div class="flex-container baseline">
      <div class="flex-item" style="font-size: 16px;">Item 1</div>
      <div class="flex-item" style="font-size: 24px;">Item 2</div>
      <div class="flex-item" style="font-size: 32px;">Item 3</div>
    </div>
  </body>
</html>

重要なalign-items値の説明:

  1. stretch(デフォルト):項目がコンテナの高さを埋めるように伸縮する
  2. flex-start:項目がコンテナの上部に整列する
  3. flex-end:項目がコンテナの下部に整列する
  4. center:項目が垂直方向に中央に整列する
  5. baseline:項目がそれぞれのテキストのベースラインに基づいて整列する

例の出力の視覚化:

Stretch:    [Item 1][Item 2][Item 3] (full height)
Flex-Start: [Item 1][Item 2][Item 3] (top-aligned)
Flex-End:   [Item 1][Item 2][Item 3] (bottom-aligned)
Center:     [Item 1][Item 2][Item 3] (vertically centered)
Baseline:   [Item 1][Item 2][Item 3] (text-baseline aligned)

ファイルを保存し、Web ブラウザで開いて、さまざまな整列スタイルを確認しましょう。各コンテナがどのようにフレックス項目の独特な垂直整列を示すかに注目してください。

フレックスコンテナの整列をカスタマイズする

このステップでは、さまざまな整列技術を組み合わせ、個々の項目のカスタマイズを加えることで、より複雑な Flexbox レイアウトを作成する方法を学びます。

flexbox-layout.htmlファイルを開き、次の高度な例で更新します。

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Advanced Flexbox Alignment</title>
    <style>
      .flex-container {
        display: flex;
        height: 300px;
        background-color: #f0f0f0;
        border: 2px solid #333;
        margin-bottom: 20px;
        padding: 10px;
      }
      .flex-item {
        width: 100px;
        margin: 10px;
        background-color: #4caf50;
        color: white;
        text-align: center;
        line-height: 50px;
      }

      /* Custom alignment scenarios */
      .mixed-alignment {
        align-items: center;
      }
      .mixed-alignment.special-item {
        align-self: flex-end;
      }
      .mixed-alignment.tall-item {
        align-self: stretch;
        height: auto;
      }
    </style>
  </head>
  <body>
    <div class="flex-container mixed-alignment">
      <div class="flex-item">Normal</div>
      <div class="flex-item special-item">Special</div>
      <div class="flex-item tall-item">Tall Item</div>
    </div>
  </body>
</html>

重要なカスタマイズ技術:

  1. align-items: centerは、デフォルトの垂直中央配置を設定します。
  2. align-self: flex-endは、特定の項目に対してコンテナの整列を上書きします。
  3. align-self: stretchは、個々の項目が異なる方法で伸縮するように許可します。

例の出力の視覚化:

[Normal Item]  [Special Item]  [Tall Item]
    ↑             ↓              ↑
  Centered    Bottom-aligned   Stretched

この例は、次のことができる方法を示しています。

  • すべての項目に対するデフォルトの整列を設定する
  • 特定の項目の整列を上書きする
  • よりダイナミックで柔軟なレイアウトを作成する

ファイルを保存し、Web ブラウザで開いて、カスタマイズされた整列がどのように機能するかを確認しましょう。

まとめ

この実験では、参加者は Flexbox のalign-itemsプロパティを調べ、コンテナ内のフレックス項目の垂直整列を制御する方法を学びます。この実験では、デフォルトの「伸縮」動作から始まり、flex-startflex-endcenterbaselineなどの値を使用してフレックス項目を配置する方法を示すことで、さまざまな整列戦略について包括的な紹介を行います。

実際の HTML と CSS の例を通じて、学習者はフレックスコンテナのレイアウトを操作する実践的な経験を得、align-itemsプロパティがクロス軸に沿った要素の配置にどのように影響するかを理解します。この実験は、応答性が高く視覚的にバランスの取れたウェブデザインを作成する際のこのプロパティの重要性を強調し、参加者により洗練された柔軟なレイアウト技術を開発することができるようにします。