2017-04-25 4 views
0

Ich habe eine Seite, die ein Raster mit 5 gleichen Spalten hat; Jede Spalte hat n Boxen unterschiedlicher Höhe.Grid Alignment Ausgabe

Also der Boden dieses Gitters ist alles zerhackt, jede Reihe endet in verschiedenen Höhen.

<div class="row">...</div> 
<div class="row">...</div> 
<div class="row">...</div> 
<div class="row">...</div> 
<div class="row">...</div> 

und CSS

.row { 
    display: inline; 
    float: left; 
    width:20% 
} 

Ich möchte später mehr Boxen zu diesen Zeilen (AJAX) hinzufügen mit wieder mit

<div class="row">...</div> 
<div class="row">...</div> 
<div class="row">...</div> 
<div class="row">...</div> 
<div class="row">...</div> 

Das Problem ist, dass diese neuen Boxen nicht nur Passen Sie unter jede Zeile wie ich erwartet hatte, sondern richten Sie alle oben mit der niedrigsten Zeile aus den vorherigen Zeilen aus.

visual example here of issue

Mit welchem ​​CSS Sie umgehen ich dieses Problem?

Antwort

0

Wenn Sie sich für ein „Mauerwerk“ Layout in CSS, können Sie sich Verwendung CSS Spalten

.rows { 
 
    column-count: 4; 
 
    column-gap: 1em; 
 
} 
 

 
.row { 
 
    background-color: #eee; 
 
    display: inline-block; 
 
    margin: 0 0 1em; 
 
    width: 100%; 
 
}
<div class="rows"> 
 
    <div class="row">1</div> 
 
    <div class="row">2</div> 
 
    <div class="row">3</div> 
 
    <div class="row">asdf<br> aasdf 
 
    </div> 
 
    <div class="row">4</div> 
 
    <div class="row">5</div> 
 
    <div class="row">2<br>lines</div> 
 
    <div class="row">7</div> 
 
    <div class="row">two<br> lines</div> 
 
    <div class="row">8</div> 
 
    <div class="row">9</div> 
 
    <div class="row">1</div> 
 
    <div class="row">2</div> 
 
    <div class="row">3</div> 
 
    <div class="row">asdf<br> aasdf 
 
    </div> 
 
    <div class="row">4</div> 
 
    <div class="row">two<br> lines</div> 
 
    <div class="row">6</div> 
 
    <div class="row">7<br>lines</div> 
 
    <div class="row">7.5</div> 
 
    <div class="row">8</div> 
 
    <div class="row">9</div> 
 
    <div class="row">1</div> 
 
    <div class="row">2</div> 
 
    <div class="row">3</div> 
 
</div>

+0

Danke für die Antwort, Ich verstehe, ich war wahrscheinlich nicht klar genug: S Der Flex-Tisch ist nicht das, was ich will, weil ich jedes div auf verschiedenen Höhen halten möchte. Und die 'clear: left' Lösung scheint grundsätzlich dasselbe zu tun, wie ich bereits habe:/ Grundsätzlich in der Lösung (wenn ich deine erste Tabelle nehme), würden sie keine Lücke zwischen 1,2,3,4 sein und 5,2lines, 7,8 –

+0

Stellt sich heraus, dass der gesuchte Effekt, den ich gesucht habe, nicht nur mit CSS erledigt werden kann:/ http://stackoverflow.com/questions/32102623/forcing-div-stack-from-left -to-right #2623 http://stackoverflow.com/questions/5234749/css-floating-divs-at-variable-heights Danke für die ausführliche Antwort noch! –

+0

@JackSwindle oh, willst du ein Mauerwerk? Sie können css Spalten verwenden http://w3bits.com/css-maurryonry/ –

0

Wenn Ihnen die Höhe nicht gefällt, verwenden Sie display: inline-block und vertical-align: top statt float left. dieses verursacht durch unterschiedliche Höhe jedes "Reihe" Elements.

.row{ 
    display: inline-block; 
    vertical-align: top; 
    width:20%; 
} 

Sie können auch jedes Element gleiche Höhe machen betrachten entweder flex oder Javascript in denen verwenden, können Sie überprüfen, welche div die höchste Höhe haben und es auf alle Elemente.

, wenn Sie wollen, dass es unterschiedliche Höhe haben und wollen, dass es um die Lücke zu füllen, lesen Sie bitte diese Frage

CSS Floating Divs At Variable Heights

+0

Danke für die Antwort! Ich versuche, es mit Ihrem Vorschlag zu arbeiten, aber kann nicht scheinen, den gewünschten Effekt noch zu bekommen:/ Können Sie vielleicht einen Snippet Code wie Michael von Ihrer Lösung geben? –

+0

Ah Danke für den Link ... stellt sich heraus, kann nicht mit nur CSS getan werden: /! –

0

.multiple-column{ 
 
    list-style: none; 
 
    padding: 0; 
 

 
    -webkit-column-count: 3; 
 
    -moz-column-count: 3; 
 
    column-count: 3; 
 
    -webkit-column-gap: 20px; 
 
    -moz-column-gap: 20px; 
 
    column-gap: 20px; 
 
} 
 
.multiple-column li{ 
 
    background: gray; 
 
    margin-bottom:10px; 
 
}
<ul class="multiple-column"> 
 
    <li style="height: 100px">A</li> 
 
    <li style="height: 200px">B</li> 
 
    <li style="height: 150px">C</a></li> 
 
    <li style="height: 120px">D</li> 
 
    <li style="height: 120px">E</li> 
 
    <li style="height: 60px">F</li> 
 
</ul>

Der Browser muss die CSS3 unterstützen.

+0

Danke für die Antwort! das Problem ist, dass ich die Reihenfolge der div von links nach rechts gehen will. Am Ende ging ich mit Isotope Plugin, scheint am einfachsten zu gehen –