【Flexbox】flex-basisとは?widthとの違いと使い方をわかりやすく解説

チャッピー
チャッピー

サイズを変えようとしたらflex-basisというものがでてきたんだけどwidthと何が違うの?

こばゆた
こばゆた

同じような結果ならwidthで良いよね?
でもこのプロパティを使う理由があるのでこれを今回は説明します!

今日のテーマ

  • flex-basisの使い方がわかる
  • flex-basisとwidthの違いがわかる
スポンサーリンク

1.flex-basisの基本と役割

flex-basisプロパティはflex-box内での子要素の主軸方向の初期サイズを指定するプロパティです。

主軸方向が横なら幅縦なら高さを指定します。

.container{
  display: flex; /* 親要素にdisplay: flex;を指定 */
}

セレクター{
  flex-basis: 値;
}

1-1.主軸方向が横ver.

主軸が横方向(通常の場合)は以下のようにflex-basisを設定すると子要素に100px, 200px, 300pxの幅の基準値を指定したことになります。

.container{
  display: flex; /* 親要素にdisplay: flex;を指定 */
}

.boxa{
  flex-basis: 100px;
}

.boxb{
  flex-basis: 200px;
}

.boxc{
  flex-basis: 300px;
}
表示例

See the Pen flex-basis by kbyt (@kbo58) on CodePen.

1-2.主軸方向が縦ver.

主軸が縦方向の場合は以下のように高さの基準を設定することになります。

.container{
  display: flex; /* 親要素にdisplay: flex;を指定 */
  max-width: 600px;
  flex-direction: column; /* 主軸を縦方向に指定 */
}

.boxa{
  flex-basis: 100px;
}

.boxb{
  flex-basis: 200px;
}

.boxc{
  flex-basis: 300px;
}
表示例

See the Pen flex-basis-width by kbyt (@kbo58) on CodePen.

スポンサーリンク

2.widthとの違い

きなこ
きなこ

じゃあwidthとは何が違うの?

こばゆた
こばゆた

サイズを指定する観点ではflex-basiswidthは同じです。

では例を出しながら違うところを解説します

2-1.flex-box内でしか使えない

以下のように各要素にflex-basiswidthをそれぞれ指定しました。

.boxa{
  width: 100px;
  flex-basis: 10px;
}

.boxb{
  flex-basis: 200px;
  width: 150px;
}

.boxc{
  flex-basis: 200px;
  width: 300px;
}
表示例
aaa
bbb
ccc

いずれの要素にもflex-basisは効いておらず、widthの値で幅が決まっていることがわかります。

2-2.flex-box内で使うとwidthよりも優先される

こちらも以下のように各要素にflex-basiswidthをそれぞれ指定しました。

.container{
  display: flex;
  width: 600px;
}

.boxa{
  width: 100px;
  flex-basis: 10px;
}

.boxb{
  flex-basis: 200px;
  width: 10px; /* あえてboxaと書く順番を逆にしています */
}

.boxc{
  width: 300px;
  flex-basis: 200px;
}
表示例
aaa
bbb
ccc
チャッピー
チャッピー

flex-basisで指定した値で表示されているね

こばゆた
こばゆた

まとめると以下のようになります

プロパティ適用される場面説明
width通常要素の横幅を固定・指定する
flex-basisFlexbox内の子要素Flexアイテムの基本サイズを決める(可変前提)

3.なぜflex-basisを使うのか

チャッピー
チャッピー

でもどうしてわざわざflex-basisをつかうの?
widthで良いんじゃないの?

こばゆた
こばゆた

flex-box内でわざわざflex-basisを使うのは、flex-growflex-shrinkといったプロパティと併せて使うことで以下のように柔軟なレイアウトを作れるからだよ。

表示例

See the Pen flex-basisまとめ by kbyt (@kbo58) on CodePen.

こちらの画面サイズを変えてみるとaaa,bbbのボックスは親要素に併せてサイズが変わりますが、cccのボックスの幅は500pxで固定されているのがわかります。

.container{
  display: flex;
  height: 200px;
}

.boxa{
  flex-basis: 400px;
}

.boxb{
  flex-basis: 300px;
  flex-grow:1; /* 余白を伸ばす */
}

.boxc{
  flex-basis: 500px; /* 基準を500pxに指定 */
  flex-shrink:0; /* 画面を狭めても縮めない */
}

このようにレスポンシブ対応した時の指定がとても楽にできるようになります。

まとめると、通常はwidthやheightで幅や高さを指定し、flex-box内ではflex-basisを使って幅や高さを指定するのが便利です。

4.まとめ

まとめ

flex-basisflex-box内での子要素の主軸方向の初期サイズを指定する

.container{
  display: flex; /* 親要素にdisplay: flex;を指定 */
}

セレクター{
  flex-basis: 値;
}
  • 使う際は親要素に display: flex;をつける
  • flex-box内で幅や高さを指定する場合はwidthではなくflex-basisを使用すると楽

コメント