So erstellen Sie eine schwebende DIV-Liste in Spalten, nicht in Zeilen

7

Ich habe ein HTML-Layout-Puzzle auf meinen Händen. Ich habe eine große alphabetische Liste, die von meiner PHP-App generiert wird, und ich muss sie auf einer Webseite ausgeben. Das generierte Markup sieht folgendermaßen aus:

%Vor%

Das Stylesheet sieht folgendermaßen aus:

%Vor%

Gelaufenes Ergebnis:

Wie Sie sehen können, ist dies nicht gut lesbar, ich würde erwarten, dass DIVs in zwei Spalten ausgegeben werden, also würden die ersten Spalten "A B C D" und die zweite Spalte "E F G H" enthalten.

Gibt es eine Möglichkeit, dies zu tun, ohne das Markup zu ändern? Es ist möglich, zu geraden und ungeraden divs unterschiedliche Klassen hinzuzufügen, aber da divs in einer Schleife ausgegeben werden, gibt es keine Möglichkeit, sie anders zu teilen.

Sehen Sie eine Demo: Ссылка

Hinweis: Ich habe es bereits gelöst, indem ich die Liste in zwei Teile durch PHP aufgeteilt habe, aber ich möchte wissen, ob es hier eine HTML / CSS-Lösung gibt.

    
Silver Light 30.03.2011, 09:01
quelle

5 Antworten

13

Je nachdem, welchen Browser Sie unterstützen müssen, können Sie die neue Eigenschaft CSS3 column-count verwenden.

Markieren Sie mit einer einfachen Liste

%Vor%

Verwenden Sie dieses CSS:

%Vor%

Hier ist eine Geige - obwohl sie in keiner IE Version bereits unterstützt wird. Um ältere Browser zu unterstützen, gibt es jQuery-Lösungen wie Columnizer jQuery Plugin , die Sie ebenso verwenden können wie oder anstelle der CSS3-Lösung,

    
ajcw 30.03.2011, 09:20
quelle
10

Mit Ihrem Markup würde eine CSS3-Lösung wie folgt aussehen:

HTML

%Vor%

CSS:

%Vor%

Mit dieser Methode erhalten Sie den zusätzlichen Vorteil, dass die Spaltenhöhen gleich sind, unabhängig vom Inhalt jedes inneren <div> .

Wenn es nicht durch alle anbieterspezifischen Präfixe offensichtlich ist, ist die Browser-Unterstützung dafür auf moderne Browser beschränkt (so wie ich es mag), also ist es nicht wirklich produktionsfähiger Code (es sei denn, du magst nervös sein).

Demo: jsfiddle.net/Marcel/tk2tS

    
Marcel 30.03.2011 09:19
quelle
1

Ich kann mir keine reine CSS-Lösung vorstellen.

Du hast gesagt:

  

Hinweis: Ich habe es bereits gelöst, indem ich geteilt habe   die Liste in zwei Teilen von PHP, aber ich   möchte wissen, ob es ein HTML / CSS gibt   Lösung hier.

Sie haben also die Power von PHP . In diesem Fall würde ich den Code behalten, den Sie bereits haben, aber die Elemente in einer anderen Reihenfolge ausgeben:

Siehe: Ссылка

%Vor%

Wie einfach das sein wird, hängt davon ab, wie Ihr PHP strukturiert ist.

Wenn Sie alles in einem Array haben, würden Sie in diesem Fall nur zwei Schleifen haben (eine, die ungerade Array-Elemente ausgibt, die anderen geraden). Wenn Sie Unterstützung für n Spalten benötigen, wäre das auch kein Problem.

Was würde wäre ein Problem, wenn Sie die Ausgabe "on-the-fly" innerhalb der Schleife erstellen. In diesem Fall müssten Sie wahrscheinlich darauf zurückgreifen, die Ausgabe jeder Iteration der Schleife in ein Array zu puffern und anschließend denselben Doppelschleifenprozess durchzuführen.

    
thirtydot 30.03.2011 09:35
quelle
1

@ Silber

Ich versuche für die Seite, ohne extra Markup zu verwenden, vielleicht ist es für Sie nützlich

Ссылка

    
sandeep 30.03.2011 12:25
quelle
0

Sie müssen float nicht für die Elemente verwenden, aber vielleicht für eine Box, in der sich die Elemente befinden, versuchen Sie es mit:

%Vor%

Bearbeiten: jetzt mit 2 Spalten:)

    
Kevin Glier 30.03.2011 09:04
quelle

Tags und Links