【CSS】入れ子のリストを複数列に並べる

最終更新日: 公開日: 2023年01月

入れ子のリストを複数列に並べる

menu

下記のようなリストを画面幅に応じて複数列に並べます。
column-count で複数列に並べることもできますが、何列に並べるか指定する必要があり、画面幅に応じた列数に並べることはできません、また、例えばメニュー A と メニュー A-1 ~ A-3 の間で改行されてバラバラになってしまったりもします。以下のリストは何列に並べるかの列数指定もなく、メニュー親子でバラバラに改行されてしまったりすることもありません。

実際にサンプルを用意しましたので、画面の横幅を縮めてリストの動きを確かめてください。

サンプルコード

HTML

<div class="menu">
  <ul>
    <li>
      メニューA
      <ul>
        <li>メニューA-1</li>
        <li>メニューA-2</li>
        <li>メニューA-3</li>
      </ul>
    </li>
    <li>
      メニューB
      <ul>
        <li>メニューB-1</li>
        <li>メニューB-2</li>
        <li>メニューB-3</li>
      </ul>
    </li>
    <li>
      メニューC
      <ul>
        <li>メニューC-1</li>
        <li>メニューC-2</li>
        <li>メニューC-3</li>
      </ul>
    </li>
  </ul>
</div>

CSS

.menu > ul {
  columns: auto 255px;
}
.menu > ul > li {
  break-inside: avoid-column;
} 

ポイントは break-inside: avoid-column; です。break-inside はボックスの途中で、ページ、段、領域をどのように区切るかを設定するプロパティです。 avoid-column で途中の段区切りを禁止することで、親子メニューがバラバラに改行されてしまうことを防ぎます。 columns では何列に区切るか列数の指定は不要ですが、区切る横幅のブレイクポイントは必要です。例だと、横幅 255 px をブレイクポイントとして設定しています。

 

Contact

ご質問等ありましたら,お手数ですが弊社の個人情報保護方針をお読み頂いた上でフォームからお願い致します.
※このページと無関係な内容のセールスはご遠慮ください.

 
   
contact
Pagetop