2015-12-09 81 views
3

我正在嘗試製作一個水平無序列表<ul>,每列有四列。
列表項目的數量<li>是動態的,可能會在運行時更改。防止列表項填充在水平列表中打包

目前代碼,並導致

ul { 
    -webkit-columns: 4; /* Chrome, Safari, Opera */ 
    -moz-columns: 4; /* Firefox */ 
    columns: 4; 
    display: block; 
} 

ul li { 
    margin: 20px ; 
    padding: 10px; 
    text-align: center; 
    color: white; 
    display: list-item; 
} 

,給了我這樣的: enter image description here

這份名單是不是真正水平,因爲第二個元素(綠色)是根據第一個(藍色)和在旁邊,但順序對我來說並不重要。

問題是元素的填充正在包裝到下一列。

有什麼建議嗎?

的jsfiddle:here

+1

將是巨大的得到的jsfiddle在它的HTML。 – Paran0a

+0

只是一分鐘:) –

+0

@ Paran0a,那裏是 –

回答

2

試試下面的代碼 Demo

<ul id = "list"> 
<li style="background-color: rgb(51, 70, 115);">1</li> 
<li style="background-color: rgb(156, 78, 129);">2</li> 
<li style="background-color: rgb(121, 159, 59);">3</li> 
<li style="background-color: rgb(51, 70, 115);">4</li>  
<li style="background-color: rgb(51, 70, 115);">5</li> 
<li style="background-color: rgb(121, 159, 59);">6</li> 
<li style="background-color: rgb(156, 78, 129);">7</li> 
<li style="background-color: rgb(156, 78, 129);">8</li> 
</ul> 

#list { 
    -webkit-column-count: 4; 
     -moz-column-count: 4; 
      column-count: 4; /*3 is just placeholder -- can be anything*/ 
} 
#list li { 
    display: inline-block; 
    margin-bottom: 20px; 
     padding:10px 80px; 
} 
+0

謝謝,但結果與上一個答案相同,三列,而不是四。 –

+0

每行四列 –

+0

問題是我無法添加span元素,HTML是從服務器生成 –

0

您可以添加min-height<li>,它可能會解決你的問題: -

ul li 
{ 
     margin: 20px ; 
     padding: 10px; 
     text-align: center; 
     color: white; 
     min-height:20px; 
} 
+0

我想我犯了一個小錯誤。 –

+0

ca你可以在jsfiddle中添加代碼嗎? –

+0

該解決方案無效,它只會使列中的兩個項目變大。它不會推動一個項目到下一列 –

1

您可以用break-inside屬性做到這一點。

ul { 
 
    -webkit-columns: 4; 
 
    /* Chrome, Safari, Opera */ 
 
    -moz-columns: 4; 
 
    /* Firefox */ 
 
    columns: 4; 
 
    display: block; 
 
    list-style: none; 
 
     
 

 
    } 
 
    
 
    ul li { 
 
    margin: 20px; 
 
    padding: 10px; 
 
    text-align: center; 
 
    color: white; 
 
    min-height: 50px; 
 
    display: list-element; 
 
    -webkit-column-break-inside:avoid; 
 
    -moz-column-break-inside:avoid; 
 
    -o-column-break-inside:avoid; 
 
    -ms-column-break-inside:avoid; 
 
     column-break-inside:avoid; 
 
    }
<ul> 
 
    <li style="background-color: rgb(51, 70, 115);">1</li> 
 
    <li style="background-color: rgb(121, 159, 59);">2</li> 
 
    <li style="background-color: rgb(133, 50, 104);">3</li> 
 
    <li style="background-color: rgb(75, 93, 135);">4</li> 
 
    <li style="background-color: rgb(151, 187, 93);">5</li> 
 
    <li style="background-color: rgb(156, 78, 129);">6</li> 
 
</ul>

+0

太棒了!但它會生成三列而不是四列。反正它呢? –

1

下面是其他替代使用JSFlexbox的你的方法。首先將每個4 li元素與wrapper元素分組,然後使用flexbox創建4列布局。

$('ul').each(function(){ 
 
    var divs = $('li', this); 
 
    console.log(divs) 
 
    console.log(divs.slice(0,4)); 
 
    for(var i = 0; i < divs.length; i+=4) { 
 
     console.log(i) 
 
     divs.slice(i, i+4).wrapAll('<li class="wrapper"><ul></ul></li>'); 
 
    } 
 
});
ul { 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 
    
 
.wrapper ul { 
 
    display: flex; 
 
    flex-direction: row; 
 
} 
 

 
.wrapper ul li { 
 
    flex: 1; 
 
    margin: 10px; 
 
    padding: 10px; 
 
    color: white; 
 
    min-height: 50px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <li style="background-color: rgb(51, 70, 115);">1</li> 
 
    <li style="background-color: rgb(121, 159, 59);">2</li> 
 
    <li style="background-color: rgb(133, 50, 104);">3</li> 
 
    <li style="background-color: rgb(75, 93, 135);">4</li> 
 
    <li style="background-color: rgb(151, 187, 93);">5</li> 
 
    <li style="background-color: rgb(156, 78, 129);">6</li> 
 
    <li style="background-color: rgb(75, 93, 135);">4</li> 
 
    <li style="background-color: rgb(151, 187, 93);">5</li> 
 
    <li style="background-color: rgb(156, 78, 129);">6</li> 
 
    <li style="background-color: rgb(51, 70, 115);">1</li> 
 
    <li style="background-color: rgb(121, 159, 59);">2</li> 
 
    <li style="background-color: rgb(133, 50, 104);">3</li> 
 
    <li style="background-color: rgb(75, 93, 135);">4</li> 
 
    <li style="background-color: rgb(151, 187, 93);">5</li> 
 
    <li style="background-color: rgb(156, 78, 129);">6</li> 
 
    <li style="background-color: rgb(75, 93, 135);">4</li> 
 
</ul>

+0

解決方案很棒,但我無法更改HTML結構,它必須稍後解析。 非常感謝你 –

+0

@ Mhd.Tahawi無論如何它應該工作http://jsfiddle.net/zb7znwab/13/ –