学習猫
PR

よく使うflexboxのパターン(レスポンシブ対応)

にゃん花子
記事内に商品プロモーションを含む場合があります

2列や複数行の横並びを制御する、flexbox。よく使うパターンをご紹介するにゃん。

このblogでわかること
  • flexboxの基本的な使い方
  • flexboxのレスポンシブ対応
  • よくあるパターン(ブログ新着風)
  • よくあるパターン(互い違いの表示)
Google広告

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-wrapの設定値

並び順(flex-direction)

続いて並び順です。flexboxは通常は左→右へ横並びとなりますが、この並び順を反対にすることもできます。

またレスポンシブ対応などで、スマホ表示時は横並びを解除したい場合に、columnを設定することで縦並びに変更できます。

See the Pen flexboxの基本(折り返し) by tsucchikimiko (@nyanhanako) on CodePen.

説明
rowフレックスコンテナの主軸の方向と起点・終点の位置は、インライン要素と同様になります。(フレックスアイテムは左から右に配置されます。)
row-reverseフレックスコンテナの主軸はrowと同じ方向に指定されますが、起点・終点の位置は逆になり、フレックスアイテムは逆向きに配置されます。(右から左)
columnフレックスコンテナの主軸の方向と起点・終点の位置は、ブロック要素と同様になります。(フレックスアイテムは上から下に配置されます。)
column-reverseフレックスコンテナの主軸はcolumnと同じ方向に指定されますが、起点・終点の位置は逆になり、フレックスアイテムは逆向きに配置されます。(下から上)
flex-directionの設定値

水平・垂直方向の位置指定(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両端の子要素アイテムも含め、均等に間隔をあけて配置
justify-contentの設定値

垂直方向の位置を指定するには、align-itemsを使用します。子要素の高さが違う場合に、どのラインを基準として横並びにするか?を指定することができます。
何も指定しない場合は、stretchが指定されており、親要素の高さに合わせて、子要素はの高さは自動的に伸び縮みします。

子要素ごとの高さを保ちつつ、横並びしたい場合は、align-itemsの設定値を変更します。

説明
stretch(初期値)子要素アイテムを上下の余白を埋めるように配置
flex-start子要素アイテムを上揃えで配置
flex-end子要素アイテムを下揃えで配置
center子要素アイテムを上下中央揃えで配置
baseline子要素アイテムをベースラインに合わせて配置
align-itemsの設定値

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列になるように表記しています。プレビューで互い違いを見たい場合は、表示倍率を小さくして確認してください。

Google広告
ABOUT ME
にゃん花子
にゃん花子
「コード書くには苦手」「コピペで動けば、それでOK」な、ノンプログラマー向け | マニアック・ピンポイントなWordpress TIPSが多め|文系から独学でWeb屋さんになった人|インフラ分野のわかるWebディレクター|主にWordpressのサイト立ち上げ、リプレイス、運用をしています|Shopifyもはじめました | アニメ・映画・ドラマを聴きながら、ブツブツ呟きながら、制作するのが好きです | ブログ収益を保護猫活動に使いたいので、頑張る人 | 夜型人間から朝方に切り替え中|小学1年生の壁に負けじと2024年も奮闘します
Google検索
記事URLをコピーしました