CSS column layout has an incorrect column-count
css, css-multicolumn-layout, responsive-design
Solution
Balancing columns
Here's the behavior I observed in FF, Chrome, and Opera:
1 element: 1 0 0
2 elements: 1 1 0
3 elements: 1 1 1
4 elements: 2 2 0 (expected: 2 1 1)
5 elements: 2 2 1
6 elements: 2 2 2
7 elements: 3 3 1 (expected: 3 2 2)
8 elements: 3 3 2
9 elements: 3 3 3
With 4 and 7 elements, the browser is choosing to balance the first 2 columns, rather than spreading the elements out over as many columns as possible.
Order of the elements
The columns are filled sequentially when they're balanced. In other words, if 8 elements are added to 3 columns, the columns will be filled as shown below:
1 4 7
2 5 8
3 6
...rather than like this:
1 2 3
4 5 6
7 8
Demo (tested in FF, Chrome, Opera)
Problem
I'm trying to make responsive layout with columns but in some cases their count is changing. I've set `column-count:3` but when I have 4 divs they are positioned 2x2 not 3x1. The same bug occurs when I have 7 columns and so on. ``` #content { width: 980px; height:1000px; position:relative; margin: 0 auto 0 auto; background-color:white; max-width: 980px; } #columns { font-size:1em; -webkit-column-count: 3; -webkit-column-gap: 0.625em; -webkit-column-fill: balance; -moz-column-count: 3; -moz-column-gap: 0.625em; -moz-column-fill: balance; column-count: 3; column-gap: 0.625em; column-fill: balance; } .news { margin-bottom:0.938em; display: inline-block; background: blue; -webkit-column-break-inside: avoid; -moz-column-break-inside: avoid; column-break-inside: avoid; padding: 0.625em; } .newsheader { width:100%; padding-bottom: 0.75em; } ``` ``` <div id="wrapper"> <div id="content"> <div id="columns"> <div class="news"> <p class="newsheader">Lorem ipsum dolor sit amet...</p> <span class="newscontent">Lorem ipsum dolor sit amet...</span> </div> <div class="news"> <p class="newsheader">Lorem ipsum dolor sit amet...</p> <span class="newscontent">Lorem ipsum dolor sit amet...</span> </div> <div class="news"> <p class="newsheader">Lorem ipsum dolor sit amet...</p> <span class="newscontent">Lorem ipsum dolor sit amet...</span> </div> <div class="news"> <p class="newsheader">Lorem ipsum dolor sit amet...</p> <span class="newscontent">Lorem ipsum dolor sit amet...</span> </div> </div> </div> </div> ``` Here's a JSFiddle demo: http://jsfiddle.net/BmG44/