
【css】リスト(UL/LI) を横並べにする「flexbox」の書き方
2019/12/16
リストや定義リストなどを横並べに配置する「flexbox」の書き方メモ。
以前書いたポストの補完記事を目指します。
https://nodoame.net/archives/2597
flexboxとは
正しくは「CSS Flexible Box Layout Module」といい、CSS3から導入された、フレキシブル(柔軟)にレイアウトを可能にするボックスのことで、スペースの操作や要素を上下左右に揃えるなど、従来ではちょっと手間だったレイアウトも Flexbox を使う事により、より少ないコードで簡単に実装することが可能だったりするレイアウトモジュールです。
リストを flexbox で横に並べる
デモはコチラ
https://lightning-bolt.xyz/css/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デモ
デモ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]
結果
↑ ULに display: flex; を適用することで li内容が横に並んでいます。
デモ2
[html]
- リスト1
- リスト2
- リスト3
- リスト4
- リスト5
- リスト6
[/html]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
ul.demo2 { border: 1px solid #666; display: flex; list-style-type: none; margin: 0 0 0 1em; padding: 0; width: 250px; } ul.demo2 li { border: 1px solid #aaa; line-height: 110%; margin: 0.2em; padding: 0.5em; text-align: center; } |
結果
↑ ulの横幅を250px固定とした為、li内容(文字)が縦に並んでいます。
flexbox デモ3
[html]
- リスト1
- リスト2
- リスト3
- リスト4
- リスト5
- リスト6
[/html]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
ul.demo3 { border: 1px solid #666; display: flex; flex-wrap: wrap; list-style-type: none; margin: 0 0 0 1em; padding: 0; width: 250px; } ul.demo3 li { border: 1px solid #aaa; line-height: 110%; margin: 0.2em; padding: 0.5em; text-align: center; width: 3em; } |
結果
↑ 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]
結果
↑ 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]
結果
↑ デモ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]
結果
↑ リスト内容(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]
結果
リストの縦横を同じサイズにして(リストを)丸くする。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]
デモ7と同じ内容で 横幅を450px とすると、リストはセンタリングしてこのように表示されます。
デモはコチラ
https://lightning-bolt.xyz/css/flexbox/