如果元素数量超过 X 个,CSS/html 在两列中显示列表?

Tor*_*orK 5 html javascript css jquery twitter-bootstrap

我有一个动态的元素列表。我不希望这个列表太长。我可以使用:

ul {
    columns: 2;
    -webkit-columns: 2;
    -moz-columns: 2;
}
Run Code Online (Sandbox Code Playgroud)

但这总是导致两列。如果列表中只有几个元素,我宁愿只有一列。所以有 5 个或更少的元素,我想要这个:

1
2
3
4
5
但是有 6 个或更多元素我想要这个:
1 4
2 5
3 6
我使用 css3、html、bootstrap 2.3.2 和 jquery 有没有人有一些关于最好的方法的提示?

A. *_*lff 6

您可以简单地过滤ul元素:

$('ul').filter(function(){
    return this.childNodes.length > 5
}).addClass('twoColumns');
Run Code Online (Sandbox Code Playgroud)
ul.twoColumns {
  list-style: none;
    columns: 2;
    -webkit-columns: 2;
    -moz-columns: 2;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
</ul>
Run Code Online (Sandbox Code Playgroud)


Hun*_*len 6

如果您能够使用 CSS 网格,则可以使用grid-template-rows和grid-auto-flow指令来完成此操作。Grid 可以在大多数浏览器中使用,也可以在带有autoprefixer 的IE11 中使用:

.list {
  display: grid;
  grid-template-rows: repeat(5, min-content);
  grid-auto-flow: column;
}
Run Code Online (Sandbox Code Playgroud)
<ul class="list">
  <li class="item">1</li>
  <li class="item">2</li>
  <li class="item">3</li>
  <li class="item">4</li>
  <li class="item">5</li>
  <li class="item">6</li>
  <li class="item">7</li>
</ul>
Run Code Online (Sandbox Code Playgroud)