この記事ではdisplay
プロパティの値である、flex(Flexbox)を紹介します。
Flexboxを覚えることで、サイトを作る際にレイアウトを組むのがかなり楽になりますので、必ず使えるようにしておきましょう(inline
・block
・inline-block
・none
・table
・table-cell
については下記の記事をお読みください)。
-
【CSS入門】 inline?block?displayで要素の種類を指定しよう
この記事ではCSSのdisplayプロパティについて解説します。 CSSを学ぶにあたって絶対に避けては通れない重要な項目なので、しっかりと理解していきましょう。 Contentsdisplayとは?d ...
-
【CSS入門】tableとtable-cellで要素を横並びさせよう
この記事ではCSSのdisplayプロパティの値である、tableとtable-cellをセットで紹介します。 Flexboxの登場により使う機会がほとんど無くなりましたが、場合によってはまだまだ使う ...
Contents
Flexboxとは?
親要素にdisplay:flex
を指定するだけで、直下の子要素は自動的に横並びになるなど、少しの記述だけで要素を柔軟に配置できるようになります。
display:flex
を指定した親要素のことを「flexコンテナ」と呼び、その子要素を「flexアイテム」と呼びます。
HTML
<div class="parent"> <div class="child">1</div> <div class="child">2</div> <div class="child">3</div> </div>
CSS
.parent{ display: flex; } .child{ width: 200px; height: 200px; }
CSSで横並びの表現をするとなるとfloat
かinline-block
、またはtable-cell
を用途に応じて使い分けていましたが、Flexboxが登場してからは特にレイアウトを組むときはFlexboxを利用することが圧倒的に多くなりました。
flexコンテナ(親要素)に設定可能なプロパティ
親要素(flexコンテナ)に更に他のプロパティをつけることで、横並びにするだけでなく様々な配置が可能になります。
- flex-direction
- flex-wrap
- justify-content
- align-items
- align-content
flex-direction
flexアイテムの表示方向を指定します。
flex-direction
に指定できる値は以下の通りです。
値 | 説明 |
---|---|
row | デフォルト。flexアイテムを親要素の左から右へ水平方向に配置 |
row-reverse | flexアイテムを親要素の右から左へ水平方向に配置 |
column | flexアイテムを親要素の上から下へ垂直方向に配置 |
column-reverse | flexアイテムを親要素の下から上へ垂直方向に配置 |
実際に使用するときは以下のように記述します。
HTML
<div class="parent"> <div class="child">1</div> <div class="child">2</div> <div class="child">3</div> </div>
CSS
.parent{ display: flex; flex-direction: column; } .child{ width: 200px; height: 200px; }
flex-wrap
flexアイテムの折り返しの制御(一行にしたり複数行にしたり)を行います。
flex-wrap
に指定できる値は以下の通りです。
値 | 説明 |
---|---|
nowrap | デフォルト。改行なしで各アイテムの幅をflexコンテナの幅に収まるように縮小配置 |
wrap | flexアイテムを横複数行に配置 |
wrap-reverse | flexアイテムを横複数行に配置するが、文字の改行方向と逆方向へ折り返される |
実際に使用するときは以下のように記述します。
HTML
<div class="parent"> <div class="child">1</div> <div class="child">2</div> <div class="child">3</div> </div>
CSS
.parent{ display: flex; width: 500px; flex-wrap:wrap; } .child{ width: 200px; height: 200px; }
justify-content
flexアイテムの左右の位置揃えを指定します。
justify-content
に指定できる値は以下の通りです。
値 | 説明 |
---|---|
flex-start | デフォルト。flexアイテムを左揃え |
flex-end | flexアイテムを右揃え |
center | flexアイテムを左右中央揃え |
space-between | flexアイテムを等間隔に配置(最初と最後の要素はflexコンテナの端にくっつく) |
space-around | flexアイテムを等間隔に配置(flexコンテナの端との間にもそれぞれ間隔が空く) |
実際に使用するときは以下のように記述します。
HTML
<div class="parent"> <div class="child">1</div> <div class="child">2</div> <div class="child">3</div> </div>
CSS
.parent{ display: flex; justify-content: flex-end; } .child{ width: 200px; height: 200px; }
align-items
flexアイテムの上下の位置揃えを指定します。
align-items
に指定できる値は以下の通りです。
値 | 説明 |
---|---|
stretch | デフォルト。flexコンテナの高さいっぱいにflexアイテムを配置 |
flex-start | flexアイテムを上揃え |
flex-end | flexアイテムを下揃え |
center | flexアイテムを上下中央揃え |
実際に使用するときは以下のように記述します。
今までは、見やすくする為に、子要素に高さを指定しましたが、ここではそれぞれの値がどの様に作用するか理解してもらう為に、子要素には高さを指定せず、代わりに長さの違うテキストを入れています。
HTML
<div class="parent"> <div class="child">Lorem</div> <div class="child">Lorem................</div> <div class="child">Lorem....</div> </div>
CSS
.parent{ display: flex; align-items: center; } .child{ width: 200px; }
align-content
flexアイテムが複数行になった時の上下の位置揃えを指定します。
flex-wrap
でwrapかwrap-reverseを指定して複数行にしないと、効果はありません。align-content
に指定できる値は以下の通りです。
値 | 説明 |
---|---|
stretch | デフォルト。flexコンテナの高さいっぱいにflexアイテムを配置 |
flex-start | flexアイテムを上揃え |
flex-end | flexアイテムを下揃え |
center | flexアイテムを上下中央揃え |
space-between | flexアイテムを等間隔に配置(最初と最後の要素はflexコンテナの端にくっつく) |
space-between | flexアイテムを等間隔に配置(flexコンテナの端との間にもそれぞれ間隔が空く) |
実際に使用するときは以下のように記述します。
HTML
<div class="parent"> <div class="child">1</div> <div class="child">2</div> <div class="child">3</div> </div>
CSS
.parent{ display: flex; flex-wrap: wrap; align-content: space-between; width: 500px; height: 100vh; } .child{ width: 200px; height:200px; }
flexアイテム(子要素)に設定可能なプロパティ
flexコンテナ(親要素)に設定可能なプロパティを見てきましたが、ここからは、子要素(flexアイテム)に設定可能なプロパティを見ていきます。
- order
- flex-grow
- flex-shrink
- flex-basis
- align-self
order
flexアイテムの並び順を指定します。
order
に指定できる値は以下の通りです。
値 | 説明 |
---|---|
0 | デフォルト。flexアイテムを左揃え |
数値(マイナス値も含む) | order:0;の前か次に配置 |
実際に使用するときは以下のように記述します。
HTML
<div class="parent"> <div class="child child-1">1</div> <div class="child child-2">2</div> <div class="child child-3">3</div> </div>
CSS
.parent{ display: flex; } .child{ width: 200px; height:200px; } .child-1{ order: 3; }
flex-grow
親要素にスペースがあったら、そのスペースに対しどれだけflexアイテムを伸ばせるかの比率を指定します。
flex-grow
に指定できる値は以下の通りです。
値 | 説明 |
---|---|
0 | デフォルト |
数値(マイナス値は含まない) | 伸びる比率を指定 |
実際に使用するときは以下のように記述します。
HTML
<div class="parent"> <div class="child child-1">1</div> <div class="child child-2">2</div> <div class="child child-3">3</div> </div>
CSS
.parent{ display: flex; width: 1000px; } .child{ width: 200px; height:200px; } .child-1{ flex-grow: 2; }
flex-shrink
flex-grow
とは反対に、親要素にスペースがないと、そのスペースに対しどれだけアイテムの幅を縮められるかの比率を指定します。
flex-wrap:nowrap
と同時に使用しないと効果がありません(アイテムを複数行にしないため)。flex-shrink
に指定できる値は以下の通りです。
値 | 説明 |
---|---|
1 | デフォルト |
数値(マイナス値は含まない) | 縮む比率を指定 |
実際に使用するときは以下のように記述します。
CSS
.parent{ display: flex; width: 400px; } .child{ width: 200px; height:200px; } .child-1{ flex-shrink: 2; }
flex-basis
アイテムの幅や高さを指定します。
flex-direction
がrowかrow-reverseのときは横幅、columnかcolumn-reverseのときは縦幅を指定します。flex-basis
に指定できる値は以下の通りです。
値 | 説明 |
---|---|
auto | デフォルト |
数値 | pxや%などで幅や高さを指定 |
実際に使用するときは以下のように記述します。
HTML
<div class="parent"> <div class="child child-1">1</div> <div class="child child-2">2</div> <div class="child child-3">3</div> </div>
CSS
.parent{ display: flex; } .child{ width: 200px; height:200px; } .child-1{ flex-basis: 500px; }
flex
flex-grow
、flex-shrink
、flex-basis
のショートハンドです。flex-direction
がrowかrow-reverseのときは横幅、columnかcolumn-reverseのときは縦幅を指定します。
flex-basis
に指定できる値は以下の通りです。child-1のアイテムを幅500pxにし、それでも余白があれば、child-1のアイテムが余白を埋めます。
値 | 説明 |
---|---|
0 1 auto | デフォルト |
実際に使用するときは以下のように記述します。
HTML
<div class="parent"> <div class="child child-1">1</div> <div class="child child-2">2</div> <div class="child child-3">3</div> </div>
CSS
.parent{ display: flex; width: 1000px; } .child{ width: 200px; height:200px; } .child-1{ flex: 2 0 500px; }
align-self
flexコンテナに指定するalign-items
と同じで、上下の位置揃えを指定します。
値は、align-items
より、こちらの方が優先されます。align-self
に指定できる値は以下の通りです。
値 | 説明 |
---|---|
auto | デフォルト。flexコンテナのalign-itemsの値を継承 |
stretch | flexコンテナの高さいっぱいにflexアイテムを配置 |
flex-start | flexアイテムを上揃え |
flex-end | flexアイテムを下揃え |
center | flexアイテムを上下中央揃え |
実際に使用するときは以下のように記述します。
HTML
<div class="parent"> <div class="child child-1">Lorem</div> <div class="child child-2">Lorem................</div> <div class="child child-3">Lorem....</div> </div>
CSS
.parent{ display: flex; } .child{ width: 200px; } .child-1{ align-self: center; }
もう一つ使用例を見ます。下記の場合、flexコンテナで中央揃えに指定していますが、child-1にのみ、align-self
でflex-endを指定しているので、下で揃っています。
child-3は、align-self
を指定しておらず、デフォルトの状態なので、flexコンテナで指定した値が継承され、中央揃えになっています。
HTML
<div class="parent"> <div class="child child-1">Lorem</div> <div class="child child-2">Lorem................</div> <div class="child child-3">Lorem....</div> </div>
CSS
.parent{ display: flex; align-items: center; } .child{ width: 200px; } .child-1{ align-self: flex-end; }
まとめ
この記事に書かれていることで、特に覚えておいて欲しいことは以下の2点です。
- 要素を横並びにするときは(特にレイアウト組みの時)できるだけFlexboxを利用する
- ブラウザチェックは必ずする
記事が長いので「うっ・・・」と思ってしまう人もいるかもしれませんが、ここに書いてあること全てを一気に覚えなくても問題ありません。使っている内に慣れますし、よく使うプロパティは限られているのでいつの間にか覚えるようになりますのでご安心を。
CSS関係の記事は他にも書いているので、宜しければそちらもチェックしてみてください。
-
【完全初心者向け】CSSについての超簡単まとめ
WEBサイトを作る上で、HTMLと並んで絶対に欠かせない言語といえばCSS。 この記事ではCSSについてなるべく難しい言葉を使わずに、でも要点は抑えて解説していこうと思います。是非肩の力を抜いて読み進 ...
-
【CSS入門】 inline?block?displayで要素の種類を指定しよう
この記事ではCSSのdisplayプロパティについて解説します。 CSSを学ぶにあたって絶対に避けては通れない重要な項目なので、しっかりと理解していきましょう。 Contentsdisplayとは?d ...
-
【CSS入門】tableとtable-cellで要素を横並びさせよう
この記事ではCSSのdisplayプロパティの値である、tableとtable-cellをセットで紹介します。 Flexboxの登場により使う機会がほとんど無くなりましたが、場合によってはまだまだ使う ...
-
【CSS入門】positionの使い方を簡単解説【ちょっと難しい?】
この記事では要素の配置方法を指定する、CSSのpositionプロパティについて解説します。 absoluteやrelative・・・と聞くとWebデザインの勉強を始めたばかりだと難しく感じてしまいま ...
-
【CSS入門】z-indexを使えば要素の重なり順は思うがまま
この記事ではCSSのz-indexプロパティについて解説します。 Contentsz-indexとは?z-indexの使い方z-index: auto;z-index: 整数;まとめ z-indexと ...
-
【CSS入門】floatについて学んで初心者脱出しよう
この記事ではCSSの「float」プロパティについて解説します。 レイアウトをする際に物凄くお世話になるプロパティで、ここでつまづくとサイトを作ることが困難になってしまうので、しっかりと理解しておきま ...
-
【CSS入門】overflowで、はみ出し部分の表示を指定
この記事ではCSSのoverflowプロパティについて解説します。 Contentsoverflowとは?overflowの使い方overflow: visible;overflow: hidden; ...