問題1: align-itemsが効かない

問題

以下のコードで、子要素を縦方向の中央に配置したいのですが、align-items: centerを指定しても中央に配置されません。なぜでしょうか?

HTML

<div class="container">
  <div class="item">アイテム1</div>
  <div class="item">アイテム2</div>
  <div class="item">アイテム3</div>
</div>

CSS

.container {
  display: flex;
  align-items: center;
  background-color: #f0f0f0;
}

.item {
  padding: 10px;
  margin: 5px;
  background-color: #4CAF50;
  color: white;
}

実行結果

アイテム1
アイテム2
アイテム3

※ コンテナに高さがないため、中央配置が効いていないように見えます(コンテンツの高さ = コンテナの高さ)

🔧 実際に試してみよう(リアルタイム更新)

上部でHTMLまたはCSSタブを選択して編集すると、下部の結果エリアがリアルタイムで更新されます。

📺 ライブプレビュー
更新中

ヒント

クリックしてヒントを表示

align-itemsは、フレックスコンテナの交差軸(cross axis)に沿って配置を制御します。

縦方向の中央配置が効いていないように見える原因は、コンテナの高さにあります。

コンテナに明示的な高さが指定されていない場合、コンテンツの高さに合わせて自動調整されるため、見た目上は中央配置されていないように見えます。

解答

クリックして解答を表示

問題の原因

align-itemsプロパティは正しく動作していますが、フレックスコンテナに高さが指定されていないため、コンテナの高さがコンテンツの高さと同じになっています。

技術的な説明

  • フレックスコンテナdisplay: flexが指定された要素
  • 主軸(main axis):デフォルトでは水平方向(左から右)
  • 交差軸(cross axis):主軸に垂直な軸(デフォルトでは垂直方向)
  • align-items:交差軸に沿ったアイテムの配置を制御

コンテナの高さが自動(auto)の場合、コンテンツの高さに合わせて収縮するため、縦方向の余白がなくなり、中央配置の効果が視認できません。

修正コード

CSS(修正版)

.container {
  display: flex;
  align-items: center;
  background-color: #f0f0f0;
  height: 200px;  /* 高さを明示的に指定 */
}

.item {
  padding: 10px;
  margin: 5px;
  background-color: #4CAF50;
  color: white;
}

修正後の実行結果

アイテム1
アイテム2
アイテム3

※ 高さを指定することで、縦方向の中央配置が確認できます

その他の解決方法

  1. min-heightを使用
    .container {
      min-height: 200px;  /* 最小高さを指定 */
    }
  2. ビューポート単位を使用
    .container {
      height: 100vh;  /* ビューポートの高さいっぱい */
    }
  3. 親要素から高さを継承
    .parent {
      height: 400px;
    }
    .container {
      height: 100%;  /* 親要素の高さを継承 */
    }

覚えておくポイント

Flexboxのalign-itemsが効かないと感じたら、まずコンテナの高さを確認しましょう。高さが自動調整されている場合、配置効果が見えないことがよくあります。