
サイズを変えようとしたら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-basis
とwidth
は同じです。
では例を出しながら違うところを解説します
2-1.flex-box内でしか使えない
以下のように各要素にflex-basis
、width
をそれぞれ指定しました。
.boxa{
width: 100px;
flex-basis: 10px;
}
.boxb{
flex-basis: 200px;
width: 150px;
}
.boxc{
flex-basis: 200px;
width: 300px;
}
いずれの要素にもflex-basis
は効いておらず、width
の値で幅が決まっていることがわかります。
2-2.flex-box内で使うとwidthよりも優先される
こちらも以下のように各要素にflex-basis
、width
をそれぞれ指定しました。
.container{
display: flex;
width: 600px;
}
.boxa{
width: 100px;
flex-basis: 10px;
}
.boxb{
flex-basis: 200px;
width: 10px; /* あえてboxaと書く順番を逆にしています */
}
.boxc{
width: 300px;
flex-basis: 200px;
}

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

まとめると以下のようになります
プロパティ | 適用される場面 | 説明 |
---|---|---|
width | 通常 | 要素の横幅を固定・指定する |
flex-basis | Flexbox内の子要素 | Flexアイテムの基本サイズを決める(可変前提) |
3.なぜflex-basisを使うのか

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

flex-box内でわざわざflex-basis
を使うのは、flex-grow
や flex-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-box内での子要素の主軸方向の初期サイズを指定するflex-basis
.container{
display: flex; /* 親要素にdisplay: flex;を指定 */
}
セレクター{
flex-basis: 値;
}
- 使う際は親要素に
display: flex;
をつける - flex-box内で幅や高さを指定する場合は
width
ではなくflex-basis
を使用すると楽
コメント