支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


HTMLは記述した内容が左詰めで、順番に縦に並んでいきます。
それらをCSSによってさまざまなレイアウトに変更するのですが、HTML、CSS初心者の方は、要素を横並びにしたいけどうまくできない、という問題でつまずきがちです。
以前は要素を横並びにするためには、floatがよく利用されていました。
しかしfloatはレイアウトが崩れやすく、初心者の方がfloatで横並びを制御することは、初心者の方にとっては難易度が高いです。
そこでオススメするのが当記事で紹介するdisplay flexです。
flexを使えば、要素の横並びを簡単に実現でき、なおかつレスポンシブ対応も簡単にできます
以下、CSSにおけるflexについて解説していきます。

display:flexとは

そもそもCSSのdisplayプロパティとは、要素の表示形式を決めるものです。
display:blockや、display:noneのように使用します。
flexはdisplayプロパティに指定する表示形式のひとつで、flexを指定することにより、flexboxというレイアウトモード使用できます。
flexを簡単に説明するなら、「親要素に対して子要素を横並びにする」機能です。

親要素、子要素とは

理解している方は読み飛ばしていただいてかまいません。
わかりやすい例ですと、


<ul>
   <li>子要素1</li>
   <li>子要素2</li>
   <li>子要素3</li>
</ul>

<ul>が親要素、入れ子になっている<li>が子要素です。
もうひとつ例を見てみます。


<div class="X">

    <div class="A">
      <p>A</p>
    </div>

    <div class="B">
      <p>B</p>
    </div>

    <div class="C">
      <p>C</p>
    </div>

</div>

親要素Xに対して、子要素はA、B、Cです。
また、A、B、Cの中の<p>はそれぞれの子要素です。
入れ子構造になっている要素の、外側の部分のタグが親要素だと思っていただいて構いません。

flexを指定する場所

上で解説した親要素に対して、display:flexをかけます。
上の例ですと

.X{
display:flex;
}
となります。

flexを指定された要素の子は「flexアイテム」となります。

単に親要素にflexを指定しただけでは、子要素は左詰めで横並びになります。
ここから親要素や子要素にプロパティを追加し、レイアウト変更を行っていきます。

親要素に指定できるプロパティ

親要素に指定できるプロパティを一部紹介します。

flex-direction

親要素に対して子要素の配置方向を指定するプロパティです。

flex-direction:row;

flexはデフォルトではrowとなっており、HTMLの順番通り左から配置されます。

flex-direction:row-reverse;

rowが左から順に配置されるとしたら、row-reverseは右から順に配置されます。

flex-direction:column

フレックスアイテムを上から下に縦並びにします。
flexで横並びにしたものを、また縦並びにすることになるので、あまり使用頻度は多くありません。

flex-direction:column-reverse

columnとは逆に下から上に立て並びにします。

flex-wrap

アイテムの折り返しを指定するプロパティです。
折り返しとは、横並びにした際、要素の幅を超えそうであれば、収まりきらないアイテムが下に回り込むことです。 レスポンシブデザインでは必須と言えます。

flex-wrap:no-wrap;

デフォルトではこの値となっており、アイテムを折り返さず一列に配置します。

flex-wrap:wrap;

アイテムを折り返し配置します。
基本的にはこれを使います。

flex-wrap:wrap-reverse;

アイテムを折り返し、下から上に並べます。
これはあまり使うことはありません。

flex-flow

flex-directionとflex-wrapをまとめて指定するプロパティです。
flex-flow:row wrap;
のように記述します。

justify-content

アイテムの横方向の位置を指定するプロパティです。
デフォルトでは左揃えで配置でしたが、右揃え、中央揃えなど、横軸の位置を決定します。

justify-content:flex-end;

右揃え
[  〇〇〇]

justify-content:center;

中央揃え
[  〇〇〇 ]

justify-content:space-between;

要素に対して、両端のアイテムを余白を空けず配置し、他のアイテムを等間隔に配置します。
[〇 〇 〇]

justify-content:space-around;

両端のアイテムの余白を空け、均等に配置します。

align-items

justify-contentは水平方向でしたが、align-itemsは垂直方向の位置を指定するプロパティです。
デフォルトではalign-items: stretchとなっており、アイテムの上下の余白を埋めるように配置します。

align-items:flex-start;

アイテムを上揃えに配置します。

align-items:flex-end;

アイテムを下揃えに配置します。

align-items:center;

アイテムを上下中央揃えで配置します。

flexで使えるプロパティは他にもあります。
気になる方は調べてみてください。

子要素に指定できるプロパティ

親要素をflexにした際、子要素にもflexに関係するプロパティを使用できるようになります。
以下、一部を紹介します。

flex-grow

アイテムの伸び率を指定します。
コンテナ内に余白がある場合、アイテムが伸び、余白を埋めてくれます。

flex-shrink

アイテムの縮み率を指定します。
アイテムの幅の合計が、コンテナの幅の合計を超えた際、自動的に縮みます。

flex-basis

コンテナ内のアイテムの基本となる幅を指定します。

flex

上記3つ、アイテムの伸縮率、幅を一括で指定します。
基本的にはflexで一括指定することが多いです。
記入例
flex:1 1 auto;

最後に

以上がdisplay:flexに関する解説なります。
flexでの横並びはfloatと比較して制御は難しくありませんが、自在に使いこなすには慣れが必要です。
簡単な入れ子構造のHTMLを書いてみて、CSSを触り、どのように要素が変化するかを試して、各プロパティの使い方を体で覚えることが習得の近道です。
またブラウザでの要素検証(Webページを開いた状態でF12キー)を使いこなせば、Web制作がとても捗ります。
併せてご利用いただくことで、よりflexボックスへの理解が深まるでしょう。