kuroのエンジニアメモ

現役エンジニアがプログラミングやエンジニアについてぼやくだけのブログ

【HTML&CSS】Flexboxで2行のリストを簡単に作成する方法!

【HTML&CSS】Flexboxで2行のリストを簡単に作成する方法!

こんにちはHTML&CSS初心者のhimakuroです。

今回の記事はFlexboxで2行のリストを作成する方法!を書いて行きます。

Flexboxを使えば大抵のデザインは作れるようになるので、デザイン出来る幅を広げて行きましょう。

今回作るリストの見た目

カテゴリーやメニューなどでよくあるシンプルなデザインですね。

f:id:himanakuroneko7:20200702211806p:plain

使い勝手が良いので、是非これを機会に作れるようになっておきましょう。

リストを作る

まずは ulli を活用してリストを作成します

index.html

<div class="category-wrapper">
  <ul class="category-list">
    <li class="category">カテゴリ1</li>
    <li class="category">カテゴリ2</li>
    <li class="category">カテゴリ3</li>
    <li class="category">カテゴリ4</li>
    <li class="category">カテゴリ5</li>
    <li class="category">カテゴリ6</li>
    <li class="category">カテゴリ7</li>
    <li class="category">カテゴリ8</li>
  </ul>
</div>

このようなリストが画面に出てきたらOKです。

f:id:himanakuroneko7:20200702212320p:plain

Flexboxを活用してリストを横並びにして整える

続いて display: flex を使い、横並びにしていきます。

また今回は1行に4つカテゴリを配置する予定なので、左右の余白も考慮しつつ width: 24% で指定をしていきます。

style.css

.category-list {
    display: flex;
}

.category {
    width: 24%;
}



width: 24% を指定したのにも関わらず、幅が4等分にされず1行に並びますが一旦はOKです

f:id:himanakuroneko7:20200702212822p:plain

flex-wrapで複数行に対応させる

flexboxを使う際に flex-wrap を指定する事で複数行にすることが出来ます。

デフォルトではこれが no-wrap になっているため、折りたたみが無効化されて1行に収まるように調整されてしまいます。

style.css

.category-list {
    display: flex;
    flex-wrap: wrap;
    text-align: center;
}



.category-list の内容を上記に変更し、リストが2行になり文字が各リスト要素の中央に来るかを確認しましょう。

f:id:himanakuroneko7:20200702213241p:plain



余白の調整を行なう

続いて余白をいい感じに調整していきます。

この作業を行なう際には、背景色を指定して各要素の範囲を可視化する事をおすすめします。

具体的には .category のスタイルとして背景色を追加します。 今回は分かりやすいように水色(skyblue)を指定しました。

style.css

.category {
    background-color: skyblue;
    width: 24%;
}



水色の背景が付き、各要素の範囲が把握出来るようになればOKです。

f:id:himanakuroneko7:20200702213718p:plain

今回は各リストの左右に若干の余白を設けるために width: 24% を指定しました。

そして背景を水色にしたことにより、その余白が右に来てしまっていることがわかります。

そこで .category-listjustify-content: space-between; を追加しましょう。 style.css

.category-list {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    text-align: center;
}



これを追加することにより、リスト要素全体が横幅をフルに使うようになり、リスト間に左右の余白が生まれます。

f:id:himanakuroneko7:20200702214400p:plain

あとは上下の余白が欲しいので、 margin を使い調整を行います。

style.css

.category {
    background-color: skyblue;
    width: 24%;
    margin: 10px 0px;
}



f:id:himanakuroneko7:20200702214807p:plain

余白の調整はこれで完了です。



リストの見た目を調整する

現状のままでも良いですが、リストの文字が若干窮屈な状態になってしまっているので最終調整を行なっていきます。

内容としては paddingbox-sizing を追加していきます。

style.css

.category {
    background-color: skyblue;
    width: 24%;
    padding: 20px;
    box-sizing: border-box;
    margin: 10px 0px;
}



paddingを追加することにより、リストを拡大しました。

そしてこのようなpaddingを追加すると、その分横幅も追加されるのでリストが崩れてしまうことがあります。

そこでその現象を防ぐために box-sizing: border-box を追加しています。

border-box を追加することで、paddingmargin も加味した上で幅を確保してくれるようになります。

これら2つのスタイルを追加することで、この様に窮屈さも解消されたリストの完成です!

f:id:himanakuroneko7:20200702215053p:plain

flexboxを活用する際には box-sizing は使う機会が多いと思うので是非覚えておきましょう。