这是我到目前为止尝试过的:
$('ul').filter(function() {
return this.childNodes.length > 5
}).addClass('twoColumns');
ul.twoColumns {
list-style: none;
columns: 2;
-webkit-columns: 2;
-moz-columns: 2;
}
<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>
这与我从另一个堆栈溢出问题引用的代码相同。 Here是链接。
但是我试图限制行数并进行了研究,但找不到任何解决方案。
主要寻找CSS解决方案,但也接受JavaScript。
答案 0 :(得分:3)
您想要的是以下内容:
var numitems = $("li").length; //get the amount of li elements, but you can be a little more specific depending on what your html structure is like
$("ul").css("column-count",numitems/2); //then just divide that by two and give that as the column count to your ul
li {
width: 100px;
height: 100px;
margin-top: 10px;
margin-right: 10px;
display: inline-block;
}
<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>
注意:我不一定要走这条路线。我来看看css-grid或flexbox
更多信息:我之所以不走这条路,是因为ul
并没有最大的支持,而诸如CSS网格之类的东西却可以开箱即用。有一点学习曲线,我可以看到一些比这更好的方案,但是我决定提及它,因为它值得考虑。
答案 1 :(得分:2)
您的js
代码中有问题。您可以jQuery
方式进行。尝试使用$(this).children()
而不是this.childNodes
。
$('ul').filter(function() {
return $(this).children().length > 5;
}).addClass('twoColumns');
ul.twoColumns {
list-style: none;
columns: 2;
-webkit-columns: 2;
-moz-columns: 2;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.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>
<br><br>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
答案 2 :(得分:0)
您可以认为CSS网格具有定义的行数:
ul {
display:grid;
grid-template-rows:1fr 1fr; /*2 equal rows*/
grid-auto-flow:column;
list-style:none;
}
li {
padding:5px 10px;
}
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
</ul>