【CSS】リストを横並び・縦並びで複数列に並べる方法
今回はリストを横並び、および縦並びに複数列に並べる方法を解説します。
HTMLの構造
基本的なHTMLの構造は以下のようになっています。
<ol class="list">
<li>リンゴ</li>
<li>バナナ</li>
<li>オレンジ</li>
<li>いちご</li>
<li>ぶどう</li>
<li>キウイ</li>
</ol>
gridで横並び2列
See the Pen list-column_grid by hisa (@hisaaashi) on CodePen.
.list {
display: grid;
width: fit-content;
column-gap: 2em;
grid-template-columns: repeat(2, auto);
}
列の指定はgrid-template-columns
で行い、数値を2から3に変更するだけで3列にすることが可能です。
また、auto
を1fr
にすることで、項目の幅を均等に保つことができます。
width:fit-content
は、項目の幅に合わせるための指定となり、削除すれば親要素の幅いっぱいに広がります。
縦並び2列も可能だが万能ではない
grid-auto-flow:column
で縦並びにし、grid-template-rows
で行数を指定すれば、縦並びにすることも可能です。
/* 縦並び2列 */
.list {
display: grid;
width: fit-content;
column-gap: 2em;
grid-auto-flow: column;
grid-template-rows: repeat(3, auto);
}
ただし、子要素の数に合わせて行数を調整しないといけないので、リストの数が増減する場合は使いにくいです。
column-countで縦並び2列
See the Pen list-column_column-count by hisa (@hisaaashi) on CodePen.
.list {
column-count: 2;
width: fit-content;
column-gap: 2em;
}
列数の指定はcolumn-count
の値で行います。
一見良さそうですが、各列は均等に幅を割り当てられ、最も幅が必要なコンテンツに合わせて列の幅が調整されます。
そのため、文字が多い項目があると、その項目に合わせて他の全ての項目も同じ幅を持つことになります。
余白を詰めたいといった場合には不向きです。
Flexboxではダメなのか
display:flex
は横並びさせるメジャーな方法ですが、幅や高さに依存しているので列数や行数を指定することは難しいです。
もしかしたら何かしらの組み合わせで、任意の箇所で折り返しが可能かもしれませんが、それならGrid Layoutを使ったほうがシンプルかなと。
幅や高さが決まっていたり、子要素の幅に合わせないと言うのであれば、Flexboxもありかもしれません。
まとめ:まだ完璧な実装方法はない
今回色々とご紹介しましたが、縦並び2列にする最適な方法はまだありませんでした。
増減のしない場所であれば気軽に実装できるので、フッターや項目が多いメニューなどで使ってみてはいかがでしょうか。
左右に分けるためにわざわざdiv囲まずに、HTMLが簡素化され理想的な構造になったのは大きなメリットです。
もし、もっと最適な実装方法があれば追記します。
おすすめWEBスクール
WEB制作やWEBデザインを学びたいなら、SNSでも話題の「デイトラ」がおすすめ!
どのコースも10万円前後と業界最安値で、副業や転職に向けて十分なスキルを身につけることができます。
\ クリックしてジャンプ! /
お気軽にコメントどうぞ