【CSS Grid】リストを縦並びにする方法(内容に応じて横幅を自動調整)

【CSS Grid】リストを縦並びにする方法(内容に応じて横幅を自動調整)

Web制作でリスト(<li>タグ)を並べるとき、横方向(row)に配置するケースが一般的です。
しかし、縦方向(column)にリストを並べたい場面もあります。
この記事では、CSS Gridを使ってリストを縦に並べる方法を解説します。


目次

✅ リストを縦に並べるには?

通常、リストはFlexboxで横並び・縦並びを切り替えることが多いですが、
Grid Layoutを使うと「内容に応じた列幅の自動調整」も簡単に実現できます。

以下のCSSを設定することで、
縦方向にリストを並べ、内容に応じて横幅を自動で調整できます。

ul {
  display: grid;
  grid-template-rows: repeat(3, auto); /* 行を明示的に指定 */
  grid-auto-flow: column; /* 縦方向に並べてから次の列へ */
  grid-auto-columns: max-content; /* 列幅を内容に応じて自動調整 */
}

💡 コードのポイント解説

① grid-template-rows: repeat(3, auto);

• リストを「3行」に分けて配置します。
行数を指定することで、縦方向の並びが明確になります。

② grid-auto-flow: column;

縦方向にアイテムを配置し、3行分埋まったら次の列へ自動的に移動します。
• 通常は横方向(row)がデフォルトですが、columnを指定することで縦並びに。

③ grid-auto-columns: max-content;

各列の幅をリスト項目(li)の内容に合わせて自動調整します。
• 長い文字列があっても、レイアウトが崩れず美しく整列します。

🧩 サンプルコード



🔁 列ごとに異なる行数を指定したい場合

さらに柔軟なレイアウトとして、「列ごとに異なる行数を設定したい」というケースもあります。

たとえば、1列目に4つ、2列目に3つのアイテムを縦に並べたいときは、
以下のように、grid-columnを使って手動で振り分けることで実現できます。

ul {
  display: grid;
  justify-content: start; // 左寄せ
  grid-template-columns: repeat(2, max-content); // 2列を明示的に指定
  grid-auto-rows: auto; // 行の高さは内容に応じて
  grid-auto-flow: column; // 縦方向に並べてから次の列へ
  gap: 0 16px; // 行間(row)と列間(column)

  li {
    white-space: nowrap; // 改行を防ぐ
  }

  // 1列目に4つ
  li:nth-child(1),
  li:nth-child(2),
  li:nth-child(3),
  li:nth-child(4) {
    grid-column: 1;
  }

  // 2列目に3つ
  li:nth-child(5),
  li:nth-child(6),
  li:nth-child(7) {
    grid-column: 2;
  }
}

🔁 列を幅いっぱいに等間隔で並べたい

さらに柔軟なレイアウトとして、列を幅いっぱいに等間隔で並べたい」というケースもあります。
以下のように、justify-contentを使って自動で設定することで実現できます。

ul {
  display: grid;
  grid-template-rows: repeat(3, auto); /* 行を明示的に指定 */
  grid-auto-flow: column; /* 縦方向に並べてから次の列へ */
  grid-auto-columns: max-content; // 列幅は内容に応じて自動調整

  //列をいっぱいに広げる時に使用-----
  width: 100%; // 幅いっぱいに広げる
  justify-content: space-between; // 等間隔配置
}

🔁 列を中央で等間隔に並べたい

先ほどとは違い、列を中央で等間隔に並べたい」というケースもあります。
以下のように、justify-contentを使って自動で設定することで実現できます。

ul {
  display: grid;
  grid-template-rows: repeat(3, auto); // 行を明示的に指定
  grid-auto-flow: column; // 縦方向に並べてから次の列へ
  grid-auto-columns: max-content; // 列幅は内容に応じて自動調整

  //列を中央で等間隔で並べる時に使用-----
  grid-template-columns: repeat(auto-fit,minmax(max-content)); // 最大内容幅で自動調整
  justify-content: center; // グリッド全体を中央寄せ
  gap:0 3em;// 行間(row)と列間(column)
}

🔍 まとめ

設定効果
grid-template-rows行数を固定(縦並び基準)
grid-auto-flow: column縦方向→次の列への自動配置
grid-auto-columns: max-content内容に応じた横幅を自動調整
grid-columnアイテムを手動で列指定(任意の行数配置)

CSS Gridを使えば、単なる縦並びではなく「整然とした縦並び+自動幅調整」を実現できます。
Flexboxでは難しい細かい制御も、Gridならシンプルな数行で完結です。

【CSS Grid】リストを縦並びにする方法(内容に応じて横幅を自動調整)

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
目次