HTML,CSS

【css】リスト(UL/LI) を横並べにする「flexbox」の書き方

2019/12/16

リストや定義リストなどを横並べに配置する「flexbox」の書き方メモ。
以前書いたポストの補完記事を目指します。

flexboxとは

正しくは「CSS Flexible Box Layout Module」といい、CSS3から導入された、フレキシブル(柔軟)にレイアウトを可能にするボックスのことで、スペースの操作や要素を上下左右に揃えるなど、従来ではちょっと手間だったレイアウトも Flexbox を使う事により、より少ないコードで簡単に実装することが可能だったりするレイアウトモジュールです。

リストを flexbox で横に並べる

デモはコチラ

通常リストの作成

[html]

  • リスト1
  • リスト2
  • リスト3
  • リスト4

[/html]

わかりやすく、以下のcssを当てています。

[css]
ul {
border: 1px solid #666;
list-style-type: none;
margin: 0 0 0 1em;
padding: 0;
}

ul li {
border: 1px solid #aaa;
margin: 0.2em;
padding: 0.5em;
}
[/css]

結果は以下のように。

flexbox_00_none

flexboxデモ

デモ1

[html]

  • リスト1
  • リスト2
  • リスト3
  • リスト4
  • リスト5
  • リスト6

[/html]

[css]
ul.demo1 {
border: 1px solid #666;
display: flex;
list-style-type: none;
margin: 0 0 0 1em;
padding: 0;
}

ul.demo1 li {
border: 1px solid #aaa;
margin: 0.2em;
padding: 0.5em;
}
[/css]

結果

flexbox_01_demo1

↑ ULに display: flex; を適用することで li内容が横に並んでいます。

デモ2

[html]

  • リスト1
  • リスト2
  • リスト3
  • リスト4
  • リスト5
  • リスト6

[/html]

結果

flexbox_02_demo2

↑ ulの横幅を250px固定とした為、li内容(文字)が縦に並んでいます。

flexbox デモ3

[html]

  • リスト1
  • リスト2
  • リスト3
  • リスト4
  • リスト5
  • リスト6

[/html]

結果

flexbox_03_demo3

↑ liの横幅を3emとし、ulに flex-wrap: wrap; を適用することで、親要素の幅に収まらない場合は改行させています

flexbox デモ4

[html]

  • リスト1
  • リスト2
  • リスト3
  • リスト4
  • リスト5
  • リスト6

[/html]

[css]
ul.demo4 {
border: 1px solid #666;
display: flex;
flex-wrap: wrap;
justify-content: center;
list-style-type: none;
margin: 0 0 0 1em;
padding: 0;
width: 250px;
}

ul.demo4 li {
border: 1px solid #aaa;
line-height: 110%;
margin: 0.2em;
padding: 0.5em;
text-align: center;
width: 3em;
}
[/css]

結果

flexbox_04_demo4

↑ ul に justify-content: center; を適用することで、li内容をセンタリングさせます。

flexbox デモ5

[html]

  • リストリスト1
  • リスト2
  • リストリストリスト3
  • リスト4
  • リストリストリストリスト5
  • リスト6

[/html]

[css]
ul.demo5 {
border: 1px solid #666;
display: flex;
flex-wrap: wrap;
justify-content: center;
list-style-type: none;
margin: 0 0 0 1em;
padding: 0;
width: 250px;
}

ul.demo5 li {
border: 1px solid #aaa;
display: table;
line-height: 110%;
margin: 0.2em;
padding: 0.5em;
text-align: center;
width: 3em;
}
[/css]

結果

flexbox_05_demo5

↑ デモ4と同じ内容で、リスト内容の文字数がバラバラの場合

flexbox デモ6

[html]

  • リストリスト1
  • リスト2
  • リストリストリスト3
  • リスト4
  • リストリストリストリスト5
  • リスト6

[/html]

[css]
ul.demo6 {
border: 1px solid #666;
display: flex;
flex-wrap: wrap;
justify-content: center;
list-style-type: none;
margin: 0 0 0 1em;
padding: 0;
width: 250px;
}

ul.demo6 li {
border: 1px solid #aaa;
display: table;
height: 6em;
line-height: 110%;
margin: 0.2em;
padding: 0.5em;
text-align: center;
width: 3em;
}

ul.demo6 span {
display: table-cell;
vertical-align: middle;
}
[/css]

結果

flexbox_06_demo6

↑ リスト内容(liに中)を <span> で括り、li に display: table;、span に display: table-cell;vertical-align: middle; を適用することで、リストを縦方向に同じサイズとし、文字を縦方向センタリングさせています。

flexbox デモ7

横:400px

[html]

  • リストリスト1
  • リスト2
  • リストリストリスト3
  • リスト4
  • リストリストリストリスト5
  • リスト6

[/html]

[css]
ul.demo7 {
border: 1px solid #666;
display: flex;
flex-wrap: wrap;
justify-content: center;
list-style-type: none;
margin: 0 0 0 1em;
padding: 0;
width: 400px;
}

ul.demo7 li {
border: 2px solid #88ccea;
border-radius: 50%;
display: table;
height: 6em;
line-height: 110%;
margin: 0.2em;
padding: 0.5em;
text-align: center;
width: 6em;
}

ul.demo7 span {
display: table-cell;
vertical-align: middle;
}
[/css]

結果

flexbox_07_demo7

リストの縦横を同じサイズにして(リストを)丸くする。ULの横幅は400px。

flexbox デモ8

横:450px

[html]

  • リストリスト1
  • リスト2
  • リストリストリスト3
  • リスト4
  • リストリストリストリスト5
  • リスト6

[/html]

[css]
ul.demo8 {
border: 1px solid #666;
display: flex;
flex-wrap: wrap;
justify-content: center;
list-style-type: none;
margin: 0 0 0 1em;
padding: 0;
width: 450px;
}

ul.demo8 li {
border: 2px solid #88ccea;
border-radius: 50%;
display: table;
height: 6em;
line-height: 110%;
margin: 0.2em;
padding: 0.5em;
text-align: center;
width: 6em;
}

ul.demo8 span {
display: table-cell;
vertical-align: middle;
}
[/css]

flexbox_08_demo8

デモ7と同じ内容で 横幅を450px とすると、リストはセンタリングしてこのように表示されます。

デモはコチラ

-HTML,CSS
-,