CSS Flexbox(フレックスボックス)は、ウェブページのレイアウトを構築するための強力なツールであり、特に動的でレスポンシブなデザインを作成する際に非常に便利です。この記事では、Flexboxの基本的な概念から、実際の使用方法までを詳しく解説します。これを理解すれば、複雑なレイアウトでも柔軟に対応できるようになります。
Flexboxの基本概念
Flexboxは、CSS3で導入されたレイアウトモデルで、複雑なレイアウトを簡単に構築できるように設計されています。従来のレイアウト手法(例えば、float
やposition
)に比べて、より直感的で効率的に要素を配置できます。

Flexboxは、主に2つの重要な要素で構成されます:
-
フレックスコンテナ(親要素):Flexboxを適用する対象となる親要素です。この親要素の中に、フレックスアイテム(子要素)が並べられます。
-
フレックスアイテム(子要素):親要素であるフレックスコンテナ内に並べられる、実際のコンテンツ要素です。
Flexboxを使うための基本的なスタイル
Flexboxを使用するには、まず親要素に対してdisplay: flex;
またはdisplay: inline-flex;
を指定します。display: flex;
はブロックレベルのコンテナとして動作し、display: inline-flex;
はインライン要素として動作します。
css.container {
display: flex;
}
これで、.container
内のすべての子要素がフレックスアイテムとして扱われます。
フレックスボックスのプロパティ
Flexboxを使用するために、いくつかの重要なプロパティを理解する必要があります。これらは親要素(フレックスコンテナ)と子要素(フレックスアイテム)に分けて設定できます。
1. 親要素(フレックスコンテナ)のプロパティ
-
flex-direction:フレックスアイテムを並べる方向を指定します。デフォルトは
row
(横並び)です。他にも縦並び(column
)、反対方向(row-reverse
、column-reverse
)を選択できます。css.container { flex-direction: row; /* 横並び */ }
-
flex-wrap:フレックスアイテムが親要素の幅を超えた場合に折り返すかどうかを指定します。
nowrap
(折り返さない)、wrap
(折り返す)などがあります。css.container { flex-wrap: wrap; }
-
justify-content:フレックスアイテムを水平方向(またはメイン軸)で配置します。
flex-start
(左揃え)、center
(中央揃え)、space-between
(アイテム間に均等なスペース)、space-around
(アイテム周りに均等なスペース)などがあります。css.container { justify-content: center; }
-
align-items:フレックスアイテムを垂直方向(または交差軸)で配置します。
flex-start
(上揃え)、center
(中央揃え)、stretch
(引き伸ばし)、baseline
(ベースライン揃え)などがあります。css.container { align-items: center; }
-
align-content:複数行にわたるフレックスアイテムの配置方法を制御します。
flex-start
、center
、space-between
などの値があります。css.container { align-content: space-between; }
2. 子要素(フレックスアイテム)のプロパティ
-
flex-grow:フレックスアイテムが余白をどれだけ伸ばすかを指定します。デフォルトは
0
で、1
に設定すると空いているスペースを均等に分け合います。css.item { flex-grow: 1; /* 余白を均等に分け合う */ }
-
flex-shrink:フレックスアイテムが縮小するかどうかを指定します。デフォルトは
1
で、0
にすると縮小しません。css.item { flex-shrink: 0; /* 縮小しない */ }
-
flex-basis:フレックスアイテムの初期の幅(または高さ)を設定します。
auto
(デフォルト)ではアイテムの内容に基づいて幅が決まり、固定のサイズを指定することもできます。css.item { flex-basis: 200px; /* 幅を200pxに設定 */ }
-
flex:
flex-grow
、flex-shrink
、flex-basis
のショートハンドです。例えば、flex: 1 0 100px;
と設定すると、アイテムは100pxの基準幅を持ち、余白を均等に分け合います。css.item { flex: 1; /* 余白を均等に分け合う */ }
-
align-self:個々のフレックスアイテムの垂直方向の位置を調整します。
auto
(デフォルト)では親要素のalign-items
プロパティが適用されますが、個別に設定することもできます。css.item { align-self: flex-start; /* アイテムを上揃え */ }
実際の例
以下に、簡単なFlexboxレイアウトの例を示します。この例では、3つのアイテムを並べ、中央に配置し、アイテムの間に均等にスペースを入れます。
htmlhtml>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flexboxの例title>
<style>
.container {
display: flex;
justify-content: space-between;
align-items: center;
height: 100vh; /* 高さを100%に設定 */
background-color: #f0f0f0;
}
.item {
background-color: #4CAF50;
color: white;
padding: 20px;
font-size: 20px;
}
style>
head>
<body>
<div class="container">
<div class="item">アイテム1div>
<div class="item">アイテム2div>
<div class="item">アイテム3div>
div>
body>
html>
このコードを実行すると、3つのアイテムが横並びに配置され、それぞれのアイテムの間に均等にスペースが入ります。height: 100vh
によって、画面全体の高さを占めるようにしています。
Flexboxの応用
Flexboxは、シンプルなレイアウトだけでなく、複雑なレスポンシブデザインにも活用できます。例えば、画面サイズに応じてアイテムの順番を変えることも可能です。order
プロパティを使うと、フレックスアイテムの表示順序を変更できます。
css.item:first-child {
order: 2; /* 最初のアイテムの順番を2番目に変更 */
}
このように、Flexboxは非常に柔軟で強力なツールであり、ウェブデザインをより簡単に、効率的に実現するための方法を提供します。