CSS3 フレキシブルボックス

❮ 前章へ 次章へ ❯

CSS3 フレキシブルボックス

Flexible boxes または flexbox は、CSS3 における新しいレイアウトモードです。

ページ・レイアウトを異なる画面サイズと異なる表示デバイスに適応しなければならないときに、 フレックスボックスを使用すると、要素が予想どおりに動作することが保証されます。

多くのアプリケーションに対し、フレキシブル・ボックス・モデルは、フロートを使わず、またコンテンツのマージンとフレックス・コンテナのマージンを 折畳まないことで、ブロックモデルを超える改善を提供します。


ブラウザ・サポート

表中の数字は、完全に機能をサポートした最初のブラウザのバージョンです。

数字の後に続く -webkit- または -moz- は、接頭辞付きで動作した最初のバージョンです。

プロパティ
Basic support
(single-line flexbox)
29.0
21.0 -webkit-
11.0 22.0
18.0 -moz-
6.1 -webkit- 12.1 -webkit-
Multi-line flexbox 29.0
21.0 -webkit-
11.0 28.0 6.1 -webkit- 17.0
15.0 -webkit-
12.1

CSS3 フレキシブルボックスのコンセプト

フレキシブルボックスは、フレックス・コンテナとフレックス項目から構成されます。

フレックス・コンテナは、display プロパティに flex(ブロックとして表示)または inline-flex (インラインとして表示)を設定することで宣言されます。

フレックス・コンテナの内部には、一つ以上のフレックスの項目があります。

注: フレックス・コンテナの外側と、フレックス項目の内部のすべては、いつもの通りにレンダリングされます。 フレキシボックスは、フレックス項目をフレックス・コンテナ内にどのように配置するかを定義します。

フレックス項目は、フレックスラインに沿ってフレックスコンテナの内側に配置されます。 デフォルトでは、フレックスコンテナごとに 1 つだけのフレックスラインがあります。

次の例は、3 つのフレックス項目を表示します。これらはデフォルトで、横のフレックスラインに沿って、左から右へ配置されています:

<!DOCTYPE html>
<html>
<head>
<style>
.flex-container {
    display: -webkit-flex;
    display: flex;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

.flex-item {
    background-color: cornflowerblue;
    width: 100px;
    height: 100px;
    margin: 10px;
}
</style>
</head>
<body>

<div class="flex-container">
  <div class="flex-item">flex item 1</div>
  <div class="flex-item">flex item 2</div>
  <div class="flex-item">flex item 3</div>
</div>

</body>
</html>

Try it Yourself ❯

フレックスラインの方向を変更することも可能です。

direction プロパティに rtl(右から左)を設定した場合、テキストは右から左に表示され、 また、フレックスラインもページレイアウトを変更する方向に変更されます:

body {
    direction: rtl;
}

.flex-container {
    display: -webkit-flex;
    display: flex;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

.flex-item {
    background-color: cornflowerblue;
    width: 100px;
    height: 100px;
    margin: 10px;
}

Try it Yourself ❯


Flex の方向

flex-direction プロパティは、フレックス・コンテナ内のフレキシブル項目の方向を指定します。 flex-direction のデフォルト値は、row (左から右、上から下) です。

その他の値は次の通りです:

次の例は、row-reverse 値を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-flex-direction: row-reverse;
    flex-direction: row-reverse;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯

次の例は、column 値を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-flex-direction: column;
    flex-direction: column;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯

次の例は、column-reverse 値を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-flex-direction: column-reverse;
    flex-direction: column-reverse;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯


justify-content プロパティ

justify-content プロパティは、フレックスコンテナ内の主軸の方向に余白が生じる場合に、フレックス項目と余白を どのように配置するかを指定します。

指定可能な値は次の通りです:

次の例は、値 flex-end を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-justify-content: flex-end;
    justify-content: flex-end;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯

次の例は、値 center を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-justify-content: center;
    justify-content: center;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯

次の例は、値 space-between を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-justify-content: space-between;
    justify-content: space-between;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯

次の例は、値 space-around を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-justify-content: space-around;
    justify-content: space-around;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯


align-items プロパティ

align-items プロパティは、フレックスコンテナ内の交差軸の方向に余白が生じる場合に、フレックス項目と余白を どのように配置するかを指定します。

指定可能な値は次の通りです:

次の例は、値 stretch を使用した結果を示しています (これがデフォルト値です):

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-align-items: stretch;
    align-items: stretch;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯

次の例は、値 flex-start を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-align-items: flex-start;
    align-items: flex-start;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯

次の例は、値 flex-end を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-align-items: flex-end;
    align-items: flex-end;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯

次の例は、値 center を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-align-items: center;
    align-items: center;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯

次の例は、値 baseline を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-align-items: baseline;
    align-items: baseline;
    width: 400px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯


flex-wrap プロパティ

flex-wrap プロパティは、フレックス項目がフレックスライン 1 行に収まらない場合、ラップすべきかどうかを指定します。

指定可能な値は次の通りです:

次の例は、値 nowrap を使用した結果を示しています (this is the default value):

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-flex-wrap: nowrap;
    flex-wrap: nowrap;
    width: 300px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯

次の例は、値 wrap を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-flex-wrap: wrap;
    flex-wrap: wrap;
    width: 300px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯

次の例は、値 wrap-reverse を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-flex-wrap: wrap-reverse;
    flex-wrap: wrap-reverse;
    width: 300px;
    height: 250px;
    background-color: lightgrey;
}

Try it Yourself ❯


align-content プロパティ

align-content プロパティは、flex-wrap プロパティの動作を変更します。 align-items に似ていますが、フレックス項目を揃えるのではなく、フレックスラインを揃えます。

指定可能な値は次の通りです:

次の例は、値 center を使用した結果を示しています:

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-flex-wrap: wrap;
    flex-wrap: wrap;
    -webkit-align-content: center;
    align-content: center;
    width: 300px;
    height: 300px;
    background-color: lightgrey;
}

Try it Yourself ❯


フレックス項目のプロパティ

順序

order プロパティは、同じコンテナ内の他のフレックス項目と比較した、フレックス項目の順序を指定します:

.flex-item {
    background-color: cornflowerblue;
    width: 100px;
    height: 100px;
    margin: 10px;
}

.first {
    -webkit-order: -1;
    order: -1;
}

Try it Yourself ❯

マージン

margin: auto; を設定すると、余分なスペースを吸収します。 これは、異なる位置にフレックス項目をプッシュするために使用することができます。.

次の例では、最初のフレックスアイテムに margin-right: auto; を設定します。 これは、すべての余分なスペースは、その要素の右に吸収されるようになります:

.flex-item {
    background-color: cornflowerblue;
    width: 75px;
    height: 75px;
    margin: 10px;
}

.flex-item:first-child {
    margin-right: auto;
}

Try it Yourself ❯

完璧なセンタリング

次の例は、殆ど日常的な問題である:完璧なセンタリングを解決します。

フレキシボックスを使うと非常に簡単です。margin: auto; を設定すれば、完全に両軸の中央に項目が配置されるようになります:

.flex-item {
    background-color: cornflowerblue;
    width: 75px;
    height: 75px;
    margin: auto;
}

Try it Yourself ❯

align-self

フレックス項目の align-self プロパティは、項目に対するフレックスコンテナの align-items プロパティをオーバーライドします。 これは、align-items プロパティと同じ値を指定することます。

次の例は、各フレックス項目にいろいろな align-self の値を設定しています:

.flex-item {
    background-color: cornflowerblue;
    width: 60px;
    min-height: 100px;
    margin: 10px;
}

.item1 {
    -webkit-align-self: flex-start;
    align-self: flex-start;
}
.item2 {
    -webkit-align-self: flex-end;
    align-self: flex-end;
}

.item3 {
    -webkit-align-self: center;
    align-self: center;
}

.item4 {
    -webkit-align-self: baseline;
    align-self: baseline;
}

.item5 {
    -webkit-align-self: stretch;
    align-self: stretch;
}

Try it Yourself ❯

flex

flex プロパティは、同じコンテナ内の他のフレックス項目に相対的な、フレックス項目の長さを指定します。

次の例では、最初のフレックス項目は空き領域の 2/4 を消費し、他の2つのフレックスの項目は、空き領域それぞれの 2/4 を消費します:

.flex-item {
    background-color: cornflowerblue;
    margin: 10px;
}

.item1 {
    -webkit-flex: 2;
    flex: 2;
}

.item2 {
    -webkit-flex: 1;
    flex: 1;
}

.item3 {
    -webkit-flex: 1;
    flex: 1;
}

Try it Yourself ❯


Examples

その他の例

フレックスボックスでレスポンシブな web サイトを作成する
この例は、フレックスボックスによりレスポンシブな web サイトのレイアウトを作成する方法のデモです。


CSS3 フレックスボックス・プロパティ

次の表は、フレックスボックスで使われる CSS プロパティの一覧です:

プロパティ 説明
display HTML 要素に使用するボックスのタイプを指定する
flex-direction フレックスコンテナ内のフレックス項目の方向を指定する
justify-content 主軸の方向に余白が生じる場合、フレックス項目の横方向への配置方法を指定する
align-items 交差軸の方向に余白が生じる場合、フレックス項目の縦方向への配置方法を指定する
flex-wrap フレックス項目がフレックスライン 1 行に収まらない場合、ラップすべきかどうかを指定する
align-content flex-wrap プロパティの動作を変更する。align-items に似ていますが、フレックス項目の代わりにフレックスラインを揃える
flex-flow flex-direction と flex-wrap のショートハンド・プロパティ
order 同じコンテナ内の他のフレックス項目と比較してフレックス項目の順序を指定する
align-self フレックス項目に使用する。コンテナの align-items プロパティをオーバーライドする Used on flex items. Overrides the container's align-items property
flex 同じコンテナ内の他のフレックス項目に関連してフレックス項目の長さを指定する

❮ 前章へ 次章へ ❯