2013-02-24 49 views
3

我試圖做出響應佈局與列,但在某些情況下,他們的計數正在改變。我已經設置了column-count:3,但是當我有4個div時,它們被定位爲2x2而不是3x1。 當我有7列等時會發生同樣的錯誤。Css3不正確的列數

這裏有一個演示http://jsfiddle.net/BmG44/

這是我的全CSS和HTML

<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> 


#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; 
} 
+0

[從'.news'中取出'display:inline-block',它似乎工作](http://jsfiddle.net/davidThomas/BmG44/1/)。 – 2013-02-24 15:35:14

+0

謝謝,但內容中斷,雖然我已經設置了'-webkit-column-break-inside:avoid;' – lam3r4370 2013-02-24 15:38:28

回答

3

平衡列

這是我在FF,鉻,和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 

隨着4層7的元件,該瀏覽器是選擇來平衡第一2列而而不是將元素分散到儘可能多的列上。

元素

列的順序依次時,他們充滿平衡。

1 4 7 
2 5 8 
3 6 

...而不是這樣的::換句話說,如果8個元素被添加到3列,該列將被如下所示填充

1 2 3 
4 5 6 
7 8 

Demo(在FF測試Chrome,Opera)

+0

好的,但是當我改變內容和錯誤發生的高度時 - Opera的渲染只有2列,而Chrome和Firefox渲染3,但方式不同 - 請參閱http://sou2.bgschool.bg/ – lam3r4370 2013-02-24 16:46:12

+1

這可能是因爲平衡列的確切行爲留給瀏覽器來實現,因爲他們認爲合適(即沒有完全由W3C定義)。這些列在平衡時似乎是按順序填充的,這有助於解釋您的http://sou2.bgschool.bg/示例中FF和Opera之間的奇怪差異。我更新了上面的答案以反映這一點。 – 2013-02-24 17:09:42

+0

謝謝。我只需設置'column-width:300px;'而不是'column-count:3;' – lam3r4370 2013-02-24 17:15:54

1

你只是沒有足夠的內容,使第3列。添加一些更多的新聞元素和第三一個出現:

http://jsfiddle.net/BmG44/10/

的規範已經這樣說column-count

描述列的最佳數量到其中的 元素的含量將流通。值必須大於0.如果 '列寬'和'列數'具有非自動值,則整數 值將描述最大列數。

http://www.w3.org/TR/css3-multicol/#column-count

沒有什麼的相位,我可以看到指示指定3列意味着你會得到完全相同3列。如果不是獲取2列內容和1列空白,而是獲得2列並且沒有空白空間,那將會很好。

此外,避免中斷的正確屬性名稱是break-inside,儘管一些瀏覽器仍然接受column-break-inside(我認爲Webkit根本不遵守新名稱)。

+0

但是我有4個元素,需要3個製作3列? – lam3r4370 2013-02-24 16:00:04

+1

你會這麼想,但如果你有5個元素,它仍然不會製作3列。我不能告訴你爲什麼,但事情就是這樣。孩子們如何分成專欄的問題與他們的身高高於他們的數量有關。嘗試使用更多有機的內容(例如不同長度的元素)。我通常指定'column-width'而不是'column-count',因爲它更具響應性,但我偶爾會看到同樣的東西。 – cimmanon 2013-02-24 16:28:03

+0

實際上,在這種情況下,5個元素會被分成3列,與3個元素相同。但總的來說,我看到@cimmanon所說的行爲是一致的。爲了觀察這個,使用1個元素開始演示,然後逐步添加另一個元素並運行它,並查看每列之後的列是如何填充的。如果您從每個元素中刪除大部分內容,則更容易觀察。 – 2013-02-24 16:35:20