2015-10-16 64 views
2

我正在嘗試使響應具有不同高度和寬度的框。問題是(正如你在圖中看到的那樣)是他們不會進入縫隙並填充剩餘的空間。任何人都有一個想法是什麼導致這個問題,什麼可以解決這個問題?適用於差距的CSS div

enter image description here

 <section class="blokContentContainer"> 
      <div class="blok-25"> 
      </div> 
      <div class="blok-25"> 
      </div> 
      <div class="blok-50"> 
      </div> 
      <div class="blok-50"> 
      </div> 
      <div class="blok-25"> 
      </div> 
      <div class="blok-25"> 
      </div> 
     </section> 

.blokContentContainer div{ 
     float: left; 
     display: inline-block; 
     border: 2px solid white; 
     -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */ 
     -moz-box-sizing: border-box; /* Firefox, other Gecko */ 
     box-sizing: border-box; 
     background-color: #B2DFDB; 
    } 
    .blok-25{ 
     width: 25%; 
     height: 300px; 
    } 
    .blok-50{ 
     width: 50%; 
     height: 500px; 
    } 
    .blokContentContainer{ 
     height: 100%; 
     width:98%; 
     margin-left:1%; 
    } 
+1

這是瀏覽器中'Float'元素的默認行爲。您需要使用像http://masonry.desandro.com/這樣的庫來實現此效果。 –

+1

你應該使用石匠 - http://w3bits.com/css-masonry/ –

回答

1

如果你可以使用固定寬度/高度(即不百分比),然後CSS3列可以幫助你。

訣竅是使用組合columns與適當的float清除。 clear:left你的大div s,以便較小的可以並排,但更大的爆發。下面是一個例子:

演示小提琴http://jsfiddle.net/v8sjnfre/2/

演示片段

* { box-sizing: border-box; margin: 0; padding: 0; } 
 
html, body { width: 100%; } 
 
.blokContentContainer { 
 
    width: 400px; margin: 12px; 
 
    -webkit-column-count: 2; column-count: 2; 
 
    -webkit-column-gap: 0px; column-gap: 0px; 
 
} 
 
.blokContentContainer div { 
 
    display: block; 
 
    background-color: #B2DFDB; 
 
    border: 1px solid #fff; 
 
    -webkit-column-break-inside: avoid; 
 
} 
 
.blok-25 { width: 100px; height: 100px; float: left; } 
 
.blok-50 { width: 200px; height: 200px; clear: left; }
<section class="blokContentContainer"> 
 
    <div class="blok-25"></div> 
 
    <div class="blok-25"></div> 
 
    <div class="blok-50"></div> 
 
    <div class="blok-50"></div> 
 
    <div class="blok-25"></div> 
 
    <div class="blok-25"></div> 
 
</section>

爲列中的瀏覽器的支持是非常好的(IE> 9),結合廠商前綴。看到這裏 - http://caniuse.com/#feat=multicolumn

+0

謝謝,你知道瀏覽器的支持嗎? –

+0

@VinceVerhoeven:瀏覽器支持非常好(IE> 9),並結合了廠商前綴。看到這裏 - http://caniuse.com/#feat=multicolumn – Abhitalks

1

這是一個常見的問題,使用瓷磚時。你可以自己做這個javascript,或者使用Masonry

問題是第二行的tile會清除整個第一行。爲了克服這個問題,你需要檢查前兩個元素的高度,看他們是否在高度較小,但足夠寬,並使用position:relativetop:-100px;移動第二行中的第一個瓷磚。當然這僅僅是一個示例,並且實現取決於多個條件(固定/可變大小,分類,保持縱橫比等)

1

對於據我知道這是不可能的,純的CSS因爲:

  • 花車不會填補國內空白
  • display: inline-block也不會工作
  • position: absoluteposition: relative需要手動對齊

也許看看Jquery masonry

1

通過使用CSS只有你不能建立平鋪系統,你必須使用JavaScript。 原因在於每行的高度由行中的最高元素決定,除非您使用的絕對定位元素會覆蓋默認佈局系統。

但你必須對齊使用JavaScript的元素,我會建議使用拼接系統庫像MasonryAngular Material,如果採用了棱角分明

1

有沒有辦法解決這個問題低谷CSS。但有你可以參考以下鏈接Jquery masonry