こんにちは、Mochiです。
Webデザインにおいて、柔軟なレイアウトの構築は重要です。要素を柔軟に配置し、レスポンシブデザインを実現するための方法の1つがFlexboxです。
Flexboxって何?Flexboxで横並びとか縦並びってどうやってやるんだっけ?🤔
そんな方に向けて、Flexboxの仕組みとその使い方をわかりやすく解説します。
この記事を読むことで、Flexboxの仕組みを深く理解し、使いこなして、柔軟なレイアウトを作れるようになります。それはもう、縦横無尽にレイアウトできちゃいます。
では、まずFlexboxとは何なのか、その仕組みから学びましょう。
🤔Flexboxとは
Flexbox(Flexible Box Layout)は、CSS3で導入されたレイアウトモデルで、柔軟な配置をするための強力なツールです。Flexboxは、特に1次元の直線的なレイアウトを構築するのに便利です。
Flexboxの仕組みは次のようになります。
主に4つの構成要素があります。
- Flexコンテナ: Flexboxにおける親要素です。入れ物となる箱のような役割があります。
- Flexアイテム: Flexコンテナの中に含まれる小要素のことです。
- メイン軸: コンテナの要素を配置するためのメインの軸(方向を決めるもの)です。この軸に沿って、Flexアイテムが配置されます。この軸の方向はのちに説明する
flex-direction
プロパティで指定できます。 - クロス軸: メイン軸に直行する軸です。直行方向にFlexアイテムを配置する時に使います。
これらの仕組みを理解できたところで、次はFlexboxの利用方法を見ていきましょう!
✍️Flexboxの始め方
display: flex
Flexboxを有効にするために、display: flex;
を使います。これはFlexコンテナにしたい要素へ指定します。
.flex-container {
display: flex;
}
指定すると次のように、Flexboxのレイアウトが適用されます。
インライン要素にFlexboxを使う場合は、次のようにinline-flex
を指定します。
.flex-container {
display: inline-flex;
}
では、Flexboxを使い始められるようになったところで、次はFlexコンテナの操作を学んでいきましょう。
📦Flexコンテナの使い方
justify-content
justify-content
プロパティは、メイン軸に沿ってFlexアイテムの揃える位置を調整できます。
値は次のものがあります。
flex-start
: 開始位置に配置(デフォルト)flex-end
: 終了位置に配置center
: 中央に配置(中央揃え)space-between
: 両端のFlexアイテムを端に配置し、他のアイテム間を均等に配置space-around
: 均等に配置
例えば次のように使います。
.flex-container {
display: flex;
justify-content: center;
}
align-items
align-items
プロパティは、クロス軸に沿ってFlexアイテムの揃える位置を調整できます。
値は次のものがあります。
stretch
: Flexコンテナいっぱいに伸ばす(デフォルト)flex-start
: 開始位置に配置flex-end
: 終了位置に配置center
: 中央に配置(中央揃え)baseline
: ベースラインで揃える
例えば次のように使います。
.flex-container {
display: flex;
align-items: center;
}
gap, row-gap, column-gap
gap
プロパティは、Flexアイテムの間の余白を調整できます。またrow-gap
プロパティは行(横)方向の余白のみを調整でき、column-gap
プロパティは列(縦)方向の余白のみを調整できます。
例えば次のように使います。
.flex-container {
display: flex;
gap: 10px;
}
flex-direction
flex-direction
プロパティは、メイン軸の方向を選択して、Flexアイテムの配置方向を決められます。
値は次のものがあります。
row
: 左から右に配置(デフォルト)row-reverse
: 右から左に配置column
: 上から下に配置column-reverse
: 下から上に配置
例えば次のように使います。
.flex-container {
display: flex;
flex-direction: column;
}
flex-wrap
flex-wrap
プロパティは、Flexアイテムがコンテナに収まらない場合に、折り返して複数行にするかを設定します。
値は次のものがあります。
nowrap
: アイテムを折り返さず、1行にする(デフォルト)wrap
: アイテムをクロス軸の方向に折り返すwrap-reverse
: アイテムをクロス軸の逆方向に折り返す
例えば次のように使います。
.flex-container {
display: flex;
flex-wrap: wrap;
}
flex-flow
flex-flow
プロパティは、flex-direction
と flex-wrap
を同時に設定します。
指定の順番はflex-flow: flex-direction flex-wrap;
となります。
例えば次のように使います。
.flex-container {
display: flex;
flex-flow: row wrap;
}
align-content
align-content
プロパティは、折り返して複数行にした場合に、クロス軸に沿ってFlexアイテムの揃える位置を調整できます。折り返しのない一行(wrap: nowrap
)の時は適用されません。
値は次のものがあります。
stretch
: Flexコンテナいっぱいに伸ばす(デフォルト)flex-start
: 開始位置に配置flex-end
: 終了位置に配置center
: 中央に配置(中央揃え)space-between
: 両端のFlexアイテムを端に配置し、他のアイテム間を均等に配置space-around
: 均等に配置
例えば次のように使います。
.flex-container {
display: flex;
align-content: center;
}
💍Flexアイテムの使い方
続いて、Flexアイテムの操作方法を学んでいきます。
align-self
align-self
プロパティは、指定したFlexアイテムに対して、クロス軸に沿った位置を調整できます。align-items
プロパティとは異なり、個別のアイテムに適用されます。またalign-self
で指定した値は、align-items
で指定した値より優先されます。
値は次のものがあります。
auto
: Flexコンテナで指定したalign-items
の値を継承する(デフォルト)stretch
: Flexコンテナいっぱいに伸ばすflex-start
: 開始位置に配置flex-end
: 終了位置に配置center
: 中央に配置(中央揃え)baseline
: ベースラインで揃える
例えば次のように使います。
.flex-item {
align-self: flex-start;
}
order
order
プロパティは、指定したFlexアイテムに対して、順序を調整できます。
デフォルトは0です。より小さい数値がメイン軸の開始位置へ、より大きい数値がメイン軸の終了位置へ移動します。また、マイナスの数値を使うこともできます。
例えば次のように使います。
.flex-item {
order: -1;
}
flex-grow
flex-grow
プロパティは、Flexアイテムのメイン軸方向への伸びを調整できます。
値は数値で、次のような動作をします。
0
: Flexコンテナに合わせて伸びない(デフォルト)1
: Flexコンテナに合わせて伸びる2以上
: 1を基準として指定した比率まで伸びる(2の場合は2倍伸びる)
例えば次のように使います。
.flex-item {
flex-grow: 2;
}
flex-shrink
flex-shrink
プロパティは、Flexアイテムのメイン軸方向への縮みを調整できます。
値は数値で、次のような動作をします。
0
: 縮まず、Flexコンテナの中に収めない1
: Flexコンテナの中に入るように縮む(デフォルト)2以上
: 1を基準として指定した比率まで縮む(2の場合は2倍縮む)
例えば次のように使います。
.flex-item {
flex-shrink: 0;
}
flex-basis
flex-basis
プロパティは、Flexアイテムのメイン軸方向への基準となる大きさを設定できます。
注意点として、Flexアイテムが指定した大きさより小さい場合は、指定した大きさまで伸びます。逆に大きい場合は、大きさは変わりません。つまり、無理やり小さくはならないです。また、gap
は指定した大きさに含まれます。
値は数値で、次のような動作をします。
auto
: Flexアイテム自体の大きさになる(デフォルト)200px
: Flexアイテムの大きさが200pxになる。50%
: Flexアイテムの大きさが50%になる。
基本的には幅(widht)や高さ(height)のプロパティと同じ仕組みです。これらについて不安な方は記事「CSSで幅(width)と高さ(height)を指定する方法」を読むのがおすすめです。
flex
flex
プロパティは、これまでに説明したflex-grow
, flex-shrink
, flex-basis
を同時に指定できます。
順番はflex: flex-grow, flex-shrink, flex-basis;
です。
例えば次のように使います。
.flex-item {
flex: 0 1 auto; /* デフォルト */
}
💪Flexboxの応用パターン
入れ子にする
Flexboxは入れ子することもできます。親コンテナと子コンテナの両方にFlexboxを適用することで、複雑なレイアウトを簡単に構築できます。
例えば、次のように使います。
.parent-container {
display: flex;
flex-direction: row;
}
.child-container {
display: flex;
flex-direction: column;
}
🚨Flexboxの注意点
Flexboxを使う上でいくつか注意点があります。
まず、Flexboxのプロパティは親要素に空きスペースがある場合に適用されるものが多いため、空きスペースがないとうまく反映されません。余白があるかを確認してみましょう。
次に、マージンが入っているとうまく揃わない場合があります。自分が意図した位置にならないときは、マージンを疑ってみましょう。
そして、古いブラウザではサポートが不完全な場合があります。必要に応じて、ブラウザのアップデートなどを行いましょう。
🎉まとめ
Flexboxの仕組みとその使い方について解説しました。
皆さんはこの記事を読んだことで、Flexboxの仕組みを深く理解し、使いこなして、柔軟なレイアウトを作れるようになりました。素晴らしい成長です!👏
Flexboxは、Webデザインにおいて柔軟なレイアウトを実現するための強力なツールです。こので学んだことを活かして、ぜひ魅力的なレイアウトを組んでみましょう。