Reputation: 13886
Just wondering if a html list could be break into columns based in its positions (using css and/or jquery)
Let say I want to create as many columns as (TOTAL-ITEMS/3).
Then in this list I will get 2 columns.
<ul id="list-1" >
<li>item in first column</li>
<li>item in first column</li>
<li>item in first column</li>
<li>item in second column</li>
<li>item in second column</li>
<li>item in second column</li>
</ul>
In this one I'll get 3 columns.
<ul id="list-1">
<li>item in first column</li>
<li>item in first column</li>
<li>item in first column</li>
<li>item in second column</li>
<li>item in second column</li>
<li>item in second column</li>
<li>item in third column</li>
<li>item in third column</li>
<li>item in third column</li>
</ul>
Since the list is generated by a CSM I can not add custom classes nor id.
Upvotes: 2
Views: 446
Reputation: 531
May I help you.
$(function() {
var count = $("#list-1 li").length;
var x = Math.ceil($(count)[0]/3);
$("#list-1").css({"-webkit-column-count": ''+x,
"-moz-column-count": ''+x,
"column-count": ''+x});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="list-1">
<li>item in first column</li>
<li>item in first column</li>
<li>item in first column</li>
<li>item in second column</li>
<li>item in second column</li>
<li>item in second column</li>
<li>item in third column</li>
<li>item in third column</li>
<li>item in third column</li>
<li>item in fourth column</li>
</ul>
Upvotes: 0
Reputation: 115145
Absolutely you can add columns like so:
ul {
-webkit-column-count: 3; /* Chrome, Safari, Opera */
-moz-column-count: 3; /* Firefox */
column-count: 3;
}
However, CSS cannot detect the number of li
to apply a specific number of columns. You would have to determine that some other way.
There is a JQuery technique as follows:
Credit to this SO Question
$(document).ready(function() {
var numitems = $("#myList li").length;
$("ul#myList").css("column-count",numitems/3);
$("ul#myList").css("-webkit-column-count",numitems/3);
$("ul#myList").css("-moz-column-count",numitems/3);
});
Upvotes: 5