Html Css - How To Create Multiple Column List?
Solution 1:
If for you don't care about the vertical order, but only the layout:
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
You can simply set the li elements this way:
li {
display: block;
width: 25%;
float: left;
}
It should work. If you need to have them in vertical order you need to act in the php script dividing them into separate divs and then float them.
Solution 2:
You could use css3 column module but beware that it is not fully supported on all web browsers.
Solution 3:
There was an article on A List Apart a while back which covered exactly this question. I guess if what is mentioned there doesn't suffice you could of course always revert to server-sided coding or client-side coding to divide the list automatically in three portions.
Solution 4:
I was able to get the proper ordering with a little jQuery:
functionsplitList($list, n) {
var i, k;
var colHeight = Math.ceil($list.children().length / n)
var colWidth = Math.floor(100 / n) + "%"for (i = 0; i < n; i++) {
$list.append("<ul class='liCol'></ul>")
for (k = 0; k < colHeight; k++) {
$list.children("li").eq(0).appendTo(".liCol:last")
}
}
$(".liCol").css("width", colWidth)
$list.show() // list originally hidden to avoid displaying before ready
}
basic styles for .liCol:
.liCol {
padding: 0px;
margin: 0px;
float: left;
}
Solution 5:
I created a solution that also works for ordered (numbered) lists. These lists have to continue numbering through the columns.
Add the following script to your page (doesn't matter where, nicest is in a seperate js-file):
<scripttype="text/javascript">// As soon as the document's structure has been loaded:document.addEventListener( "DOMContentLoaded", function() {
// For each html elem:
elems = document.getElementsByTagName("*"); // OL and UL wanted: chose all (*) here and select later.for ( var e = 0; e < elems.length; e++ ) {
// Check if elem is a list (ordered/unordered) and has class name "cols":if ( ( elems[e].tagName == "OL" || elems[e].tagName == "UL" ) && elems[e].className.search("cols") > -1 ) {
// Collect list items and number of columns (from the rel attribute):var list = elems[e];
var listItems = list.getElementsByTagName("LI");
varNcols = list.getAttribute("rel")*1; // *1 converts rel from string to int.// Determine total number of items, items per column and column width:varNtotal = listItems.length;
varNpercol = Math.ceil( Ntotal/Ncols );
var colWidth = Math.floor( 100/Ncols )+"%";
// For each column:for ( var c = 0; c < Ncols; c++ ) {
// Create column div:var colDiv = document.createElement("DIV");
colDiv.style.cssFloat = "left";
colDiv.style.width = colWidth;
// Add list items to column div:var i_start = c*Npercol;
var i_end = Math.min( (c+1)*Npercol, Ntotal );
for ( var i = i_start; i < i_end; i++ )
colDiv.appendChild( listItems[0] ); // Using listItems[0] instead of listItems[i], because items are moved to colDiv!// Add column div to list:
list.appendChild( colDiv );
}
}
}
} );
</script>
Then you can simply create multiple columns lists like this:
<olclass="cols"rel="3"><li>A</li><li>B</li><li>C</li><li>D</li><li>E</li><li>F</li><li>G</li></ol>
So, setting class="cols" and rel="[number_of_columns]" and the script will do the rest!
Post a Comment for "Html Css - How To Create Multiple Column List?"