よく使うflexboxのパターン(レスポンシブ対応)
2列や複数行の横並びを制御する、flexbox。よく使うパターンをご紹介するにゃん。
- flexboxの基本的な使い方
- flexboxのレスポンシブ対応
- よくあるパターン(ブログ新着風)
- よくあるパターン(互い違いの表示)
flexboxの基本的な使い方
flexboxは、親要素に「display: flex;」を宣言し、
子要素を配置するイメージです。
1/* 親要素(コンテナ) */
2.container {
3 display: flex;
4}
子要素については、cssなどでwidthを指定しない場合は、その要素の長さ(例えばテキストであれば文字数)が子要素の大きさとなります。 親要素にflexboxを宣言すると、子要素は横並びとなります。
折り返しなどの設定をしない場合、子要素は1列で表示されます。
See the Pen 2列のflexbox by tsucchikimiko (@nyanhanako) on CodePen.
折り返し(flex-wrap)
よく使われるプロパティを紹介していきます。まずは子要素の折り返しです。
flex-wrapを指定することで、子要素を任意の範囲で折り返して表示することが可能となります。
See the Pen flexboxの基本 by tsucchikimiko (@nyanhanako) on CodePen.
値 | 説明 |
---|---|
nowrap(初期値) | 子要素アイテムを折り返しせず、1行に配置 |
wrap | 子要素アイテムを折り返し、複数行に上から下へ配置 |
wrap-reverse | 子要素アイテムを折り返し、複数行に下から上へ配置 |
並び順(flex-direction)
続いて並び順です。flexboxは通常は左→右へ横並びとなりますが、この並び順を反対にすることもできます。
またレスポンシブ対応などで、スマホ表示時は横並びを解除したい場合に、columnを設定することで縦並びに変更できます。
See the Pen flexboxの基本(折り返し) by tsucchikimiko (@nyanhanako) on CodePen.
値 | 説明 |
---|---|
row | フレックスコンテナの主軸の方向と起点・終点の位置は、インライン要素と同様になります。(フレックスアイテムは左から右に配置されます。) |
row-reverse | フレックスコンテナの主軸はrowと同じ方向に指定されますが、起点・終点の位置は逆になり、フレックスアイテムは逆向きに配置されます。(右から左) |
column | フレックスコンテナの主軸の方向と起点・終点の位置は、ブロック要素と同様になります。(フレックスアイテムは上から下に配置されます。) |
column-reverse | フレックスコンテナの主軸はcolumnと同じ方向に指定されますが、起点・終点の位置は逆になり、フレックスアイテムは逆向きに配置されます。(下から上) |
水平・垂直方向の位置指定(justify-content、align-items)
続いて、水平方向と・垂直方向の位置を指定します。
下記の例は、水平・垂直共にcenter揃えです。(わかりやすいように、子要素の高さを凸凹に設定しています)
See the Pen flexboxの基本(水平位置・) by tsucchikimiko (@nyanhanako) on CodePen.
水平方向の位置を指定するには、justify-contentを使用します。
通常は左端揃えに子要素が配置されますが、justify-contentを使用することで、センタリングや右端揃えが指定できます。
また親要素のwidth内で、子要素を自動的にバランスよく配置してくれる設定値として、space-betweenやspace-aroundも用意されています。
値 | 説明 |
---|---|
flex-start(初期値) | 子要素アイテムを左揃えで配置 |
flex-end | 子要素アイテムを右揃えで配置 |
center | 子要素アイテムを中央揃えで配置 |
space-between | 最初と最後の子要素アイテムを両端に配置し、残りの要素は均等に間隔をあけて配置 |
space-around | 両端の子要素アイテムも含め、均等に間隔をあけて配置 |
垂直方向の位置を指定するには、align-itemsを使用します。子要素の高さが違う場合に、どのラインを基準として横並びにするか?を指定することができます。
何も指定しない場合は、stretchが指定されており、親要素の高さに合わせて、子要素はの高さは自動的に伸び縮みします。
子要素ごとの高さを保ちつつ、横並びしたい場合は、align-itemsの設定値を変更します。
値 | 説明 |
---|---|
stretch(初期値) | 子要素アイテムを上下の余白を埋めるように配置 |
flex-start | 子要素アイテムを上揃えで配置 |
flex-end | 子要素アイテムを下揃えで配置 |
center | 子要素アイテムを上下中央揃えで配置 |
baseline | 子要素アイテムをベースラインに合わせて配置 |
2列の横並び
子要素を均一のwidthに設定し、折り返しの設定を行うことで、任意の列数にすることができます。
親要素がwidth:100%;となるため、
配下の子要素のwidthを50%にすれば2列に、33%にすれば3列の配置になります。
See the Pen 2列のflexbox by tsucchikimiko (@nyanhanako) on CodePen.
ブログの新着情報やサイトのレイアウトでよくある、画像+見出しのレイアウトを作ってみました。画像+タイトル+本文が1セットとして、3列の表示になっています。
See the Pen flexboxの基本(ブログ新着) by tsucchikimiko (@nyanhanako) on CodePen.
横並びのレスポンシブ対応(スマホで1列)
先ほどのブログ新着をイメージした3列表記を、レスポンシブ対応していきます。
今回はスマホで1列表示にするため、親クラスのflex-directionの設定を、 columnに変更します。
See the Pen flexboxの基本(ブログ新着) by tsucchikimiko (@nyanhanako) on CodePen.
もしPCで4列、スマホで2列で表示したい場合は、flex-directionは変更せず、.itemのwidthを変更することで対応できます。
あれ!?改行されない?場合に…
flexboxはデフォルトでは改行されません。そのため、もし2列や3列で折り返して表示したい場合は、flex-wrap: wrap;を指定しておきましょう。
互い違いの表示
Webサイトでよく見る、画像+文字の互い違いの構成。こちらのflexboxを使えば簡単にできます。
最初にご紹介しました、並び順を逆にできるflex-direction: row-reverse;を利用し、偶数はrowに、奇数は row-reverseを指定することで、簡単に互い違いの構成を実現できます。
See the Pen flexboxの基本(互い違いの構成) by tsucchikimiko (@nyanhanako) on CodePen.
レスポンシブ対応として、スマホ表示時は1列になるように表記しています。プレビューで互い違いを見たい場合は、表示倍率を小さくして確認してください。