如何从单个无序列表创建多列?

Sem*_*vum 27 css css3 html-lists flexbox css-multicolumn-layout

我想创建一个这样的多列列表:https: //jsfiddle.net/37dfwf4u/

为每列使用不同的列表时没问题:

<ul>
    <li>item1</li>
    <li>item2</li>
    <li>item3</li>
    <li>item4</li>
</ul>
<ul>
    <li>item5</li>
    <li>item6</li>
    <li>item7</li>
    <li>item8</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
ul {
    display:inline-block;
}
Run Code Online (Sandbox Code Playgroud)

但是,这可以通过连续列表和纯CSS来完成,以便CSS自动排列列吗?例如,使用我还不熟悉的flex布局?

Joh*_*nes 36

是的,您可以创建一个多列列表,如果您创建ul一个Flex容器,更改flex-directioncolumn,允许它通过应用进行换行,flex-wrap: wrap并通过限制它来强制它换行height:

ul {
  height: 100px;
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
  <li>item1</li>
  <li>item2</li>
  <li>item3</li>
  <li>item4</li>
  <li>item5</li>
  <li>item6</li>
  <li>item7</li>
  <li>item8</li>
  <li>item1</li>
  <li>item2</li>
  <li>item3</li>
  <li>item4</li>
  <li>item5</li>
  <li>item6</li>
  <li>item7</li>
  <li>item8</li>
  <li>item4</li>
  <li>item5</li>
  <li>item6</li>
  <li>item7</li>
  <li>item8</li>
</ul>
Run Code Online (Sandbox Code Playgroud)


小智 15

考虑使用CSS3多列布局:

CSS3多列

您只需使用一个列表即可完成此操作,并使用CSS定义列数.如果你在这里检查CSS3多列布局浏览器支持,你可以看到大多数浏览器的部分支持,因为它们不支持break-before,break-after和break-inside属性.但它们确实支持创建带前缀的多列列表所需的属性.

.container {
  -webkit-column-count: 2; /* Chrome, Safari, Opera */
  -moz-column-count: 2; /* Firefox */
  column-count: 2;
}

ul {
  margin: 0;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <ul>
    <li>item1</li>
    <li>item2</li>
    <li>item3</li>
    <li>item4</li>
    <li>item5</li>
    <li>item6</li>
    <li>item7</li>
    <li>item8</li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 实际上,对于您可能需要添加或删除列表项的列表,这是一个更好的解决方案.您可以在响应断点处设置列数并将其忘记.使用第一个(接受的解决方案),每次添加或删除列表项时,都必须手动调整高度; 对于给定数量的项目,高度最适合的情况并不明显:大量的试验和错误. (5认同)
  • 也是一个很好的解决方案。由于必须调整列数,因此无法完全自我调整。 (2认同)
  • 使用 `column-width` 而不是 `column-count` 将根据容器的宽度自动调整列数 (2认同)