Mit CSS-Spalten können Sie ein von Print inspiriertes Layout mit wenig zusätzlichem Markup erstellen, das sich über eine feste Leinwand hinaus anpassen kann. Ein unterstützter Browser führt Berechnungen durch, um Inhalte ordentlich in Spalten umzubrechen und auszubalancieren. Wenn Sie bereits mit einem flüssigen Layout arbeiten, werden sich die Spalten automatisch neu anordnen. Mit der richtigen Kombination von Eigenschaften können CSS-Spalten eine interessante Layout-Option sein, die responsive-freundlich ist und gleichzeitig elegant abbaut.
Wo Spalten deklariert werden
Spalten können für jedes Block-Level-Element deklariert werden. Spalten können auf ein einzelnes Element angewendet oder durch Ansprechen ihres übergeordneten Elements auf mehrere Elemente angewendet werden.
In der folgenden Abbildung zeigt die linke Seite, wie CSS-Spaltenregeln auf den zweiten Absatz angewendet werden, um nur diesen Inhalt in Spalten umzuwandeln. Die rechte Seite zeigt, wie die Regeln auf ein Container-Element wie ein <div></div> oder <article></article> angewendet werden, um die Elemente in ein Mehrspaltenlayout umzuwandeln.

Wie man Spalten deklariert
Es gibt drei verschiedene Möglichkeiten, Spalten zu deklarieren
- Deklarieren Sie
column-count. - Deklarieren Sie
column-width. - Deklarieren Sie beides (empfohlen).
Lassen Sie uns die verschiedenen Möglichkeiten zur Deklaration von Spalten erkunden.
1. Deklarieren Sie column-count
Verwenden Sie column-count, um die Anzahl der Spalten zu deklarieren.
article {
-webkit-column-count: 2;
-moz-column-count: 2;
column-count: 2;
}
Live-Demo
Sehen Sie den Pen [2] CSS Columns, count-count von Katy DeCorah (@katydecorah) auf CodePen.
Die Anzahl der Spalten bleibt gleich, auch wenn sich die Browserbreite ändert, wie im untenstehenden GIF gezeigt.

2. Deklarieren Sie column-width
Verwenden Sie column-width, um die Breite der Spalten zu deklarieren.
Der angegebene Wert ist kein absoluter Wert, sondern eine Mindestbreite. Unter Berücksichtigung der column-width entscheidet der Browser, wie viele Spalten von *mindestens* dieser Breite in den Platz passen. Der Browser berücksichtigt bei dieser Berechnung auch den Spaltenabstand (Gutter) (mehr dazu später). Dann dehnt der Browser die Spalten gleichmäßig aus, um die Breite des Containers auszufüllen.
Wenn Sie beispielsweise den Absatz in der Live-Demo unten inspizieren, werden Sie feststellen, dass die Spaltenbreite tatsächlich größer als 150px ist, was der eingestellte Wert von column-width ist.
article {
-webkit-column-width: 150px;
-moz-column-width: 150px;
column-width: 150px;
}
Live-Demo
Sehen Sie den Pen [3] CSS Columns von Katy DeCorah (@katydecorah) auf CodePen.
Sobald der Browser nicht mindestens zwei Spalten mit der Breite von column-width unterbringen kann, erscheinen keine Spalten mehr und das Layout kehrt zu einem Einspaltenlayout zurück.
Das untenstehende GIF zeigt, wie die Spalten sich lösen, wenn die Browserbreite schmaler wird. Im Gegensatz zu column-count ist diese Eigenschaft von Natur aus responsive.

3. Deklarieren Sie beides (empfohlen)
Verwenden Sie column-count und column-width zusammen für die beste Kontrolle über CSS-Spalten. Sie können jede Eigenschaft einzeln deklarieren oder die Kurzschreibweise columns verwenden.
Wenn beide Eigenschaften deklariert sind, ist column-count die maximale Anzahl von Spalten und column-width ist die Mindestbreite für diese Spalten.
article {
-webkit-columns: 2 200px;
-moz-columns: 2 200px;
columns: 2 200px;
}
/* or */
article {
-webkit-column-count: 2;
-moz-column-count: 2;
column-count: 2;
-webkit-column-width: 200px;
-moz-column-width: 200px;
column-width: 200px;
}
Live-Demo
Sehen Sie den Pen [4] CSS Columns, columns von Katy DeCorah (@katydecorah) auf CodePen.
Das untenstehende GIF zeigt, wie die Spalten auf eine schmaler werdende Browserbreite reagieren, wenn column-count und column-width zusammen verwendet werden.

Spalten anpassen
Es gibt mehrere Eigenschaften, um CSS-Spalten weiter anzupassen.
column-gap
Um den Abstand (Gutter) zwischen den Spalten anzupassen, deklarieren Sie column-gap.
Für die meisten Browser ist der Standardwert für column-gap 1em. Sie können einen neuen Wert deklarieren, solange er größer oder gleich 0 ist.
article {
-webkit-columns: 2 200px;
-moz-columns: 2 200px;
columns: 2 200px;
-webkit-column-gap: 4em;
-moz-column-gap: 4em;
column-gap: 4em;
}
Live-Demo
Sehen Sie den Pen [5] CSS Columns, column-gap von Katy DeCorah (@katydecorah) auf CodePen.
Der Browser führt notwendige Berechnungen durch, um die Spalten trotz eines größeren Abstands gleichmäßig zu verteilen und auszubalancieren.
Das untenstehende GIF zeigt, wie der Browser die Spalten löst und den Abstand aufhebt, wenn die Browserbreite schmaler wird.

column-rule
Um eine vertikale Linie zwischen jeder Spalte hinzuzufügen, deklarieren Sie column-rule.
Diese Eigenschaft ist die Kurzschreibweise für column-rule-width, column-rule-style, column-rule-color. Die Kurzschreibweise folgt dem gleichen Styling-Muster wie border.
article {
-webkit-columns: 2 200px;
-moz-columns: 2 200px;
columns: 2 200px;
-webkit-column-gap: 4em;
-moz-column-gap: 4em;
column-gap: 4em;
-webkit-column-rule: 1px dotted #ddd;
-moz-column-rule: 1px dotted #ddd;
column-rule: 1px dotted #ddd;
}
Live-Demo
Sehen Sie den Pen [6] CSS Columns, column-rule von Katy DeCorah (@katydecorah) auf CodePen.
Ähnlich wie bei column-gap verschwindet die vertikale Linie, sobald die Browserbreite zu schmal wird, wie im untenstehenden GIF gezeigt.

column-span
Um den Spaltenfluss vorübergehend zu unterbrechen, deklarieren Sie column-span für ein untergeordnetes Element. Derzeit unterstützt Firefox diese Funktion nicht (aber Sie können dafür stimmen auf Bugzilla).
Das Bild unten enthält eine Überschrift, die den Beginn eines neuen Kapitels in der Geschichte anzeigt, aber der Spaltenfluss wird fortgesetzt.

Um die Überschrift aus dem Spaltenfluss herauszulösen, fügen Sie dem Element column-span: all hinzu. Diese Deklaration stoppt vorübergehend den Spaltenfluss, damit das Element die Spalten überspannen kann, und beginnt den Spaltenfluss mit dem nächsten Element neu.
h3 {
-webkit-column-span: all;
column-span: all;
}
Live-Demo
Sehen Sie den Pen [7] CSS Columns, column-span von Katy DeCorah (@katydecorah) auf CodePen.
column-fill
Um die Art und Weise, wie der Inhalt die Spalten füllt, zu ändern, deklarieren Sie column-fill. Derzeit ist diese Eigenschaft nur in Firefox verfügbar.
Wenn einem spaltenbasierten Element eine Höhe hinzugefügt wird, verhält sich Firefox anders als andere Browser. Firefox gleicht den Inhalt automatisch aus, während die anderen Browser die Spalten sequenziell füllen.
Das folgende Bild zeigt, wie sich Firefox im Vergleich zu anderen Browsern verhält, wenn einem spaltenbasierten Element eine Höhe hinzugefügt wird.

In Firefox können Sie dieses Verhalten ändern, indem Sie column-fill: auto deklarieren. Diese Regel führt dazu, dass die Spalten sequenziell gefüllt werden, wie in der folgenden Live-Demo gezeigt.
article {
-webkit-columns: 2 200px;
-moz-columns: 2 200px;
columns: 2 200px;
-moz-column-fill: auto;
column-fill: auto;
height: 350px;
}
Live-Demo
Sehen Sie den Pen [8] CSS Columns, column-fill von Katy DeCorah (@katydecorah) auf CodePen.
Da eine Höhe deklariert werden muss, damit Firefox column-fill aktiviert, bricht die Höhenbeschränkung das flüssige Muster. Der Inhalt dehnt sich horizontal aus, da er nicht vertikal fließen kann, wie im untenstehenden GIF gezeigt. In diesem Fall könnte eine Media Query hinzugefügt werden, um die Höhe zu verwalten (mehr dazu später).

Die anderen Browser unterstützen column-fill nicht und füllen die Spalten sequenziell, wenn einem spaltenbasierten Element eine Höhe hinzugefügt wird. Es ist erwähnenswert, dass die Beschränkung die Flüssigkeit unterbricht, wenn einem spaltenbasierten Element, unabhängig vom Browser oder der Verwendung von column-fill, eine Höhe hinzugefügt wird.
Einschränkungen
Spalten können eine elegante Möglichkeit sein, Inhalte zu liefern, solange der Inhalt lesbar bleibt. Ein Mehrspaltenlayout kann schwer lesbar werden, wenn der Inhalt horizontal überläuft oder die Spalten höher als der Viewport werden.
Inhalt läuft horizontal über
Wie im Abschnitt column-fill gezeigt, dehnt sich das Element horizontal aus, um den Inhalt aufzunehmen, wenn einem spaltenbasierten Element eine Höhe hinzugefügt wird. Der Überlauf bricht das Layout und lenkt Benutzer in eine andere Richtung.
Mögliche Lösung: Erstellen Sie eine min-width Media Query, um die Höhenregel zu deklarieren.
In der folgenden Demo habe ich das Browserfenster verengt, um festzustellen, wann die Spalten zu überlaufen begannen, und diese Zahl notiert. Als Nächstes habe ich eine min-width Media Query mit dem Wert, wann die Spalten überlaufen, geschrieben und die Höhenregel in die Media Query verschoben.
article {
-webkit-columns: 2 200px;
-moz-columns: 2 200px;
columns: 2 200px;
-moz-column-fill: auto;
column-fill: auto;
}
@media (min-width: 500px) {
article {
height: 350px;
}
}
Live-Demo
Sehen Sie den Pen [11] CSS Columns, column-fill height von Katy DeCorah (@katydecorah) auf CodePen.
Wie im untenstehenden GIF gezeigt, ist die Höhenregel außer Reichweite, wenn die Spalten sich lösen, und die Spalten fließen vertikal.

Spalten werden höher als der Viewport
Wenn Ihre Spaltenhöhe über den Viewport hinausgeht, müssen Benutzer scrollen, um dem Spaltenfluss zu folgen.
Mögliche Lösung: Erstellen Sie eine min-height Media Query, um die Spalten zu aktivieren.
Im folgenden Beispiel werden die Spalten nur aktiviert, wenn das spaltenbasierte Element eine min-height: 400px; hat. Ich bin auf diese Zahl gekommen, indem ich die Browserbreite bis kurz vor dem Punkt verengt habe, an dem die Spalten sich lösen. Als Nächstes habe ich die Höhe des Browsers angepasst, um herauszufinden, wo die Spalten unter den Viewport zu fallen begannen. Diese Zahl habe ich für den Wert der min-height Media Query verwendet.
@media (min-height: 400px) {
article {
-webkit-columns: 2 350px;
-moz-columns: 2 350px;
columns: 2 350px;
}
}
Live-Demo
Sehen Sie den Pen [10] CSS Columns, vertical friendly von Katy DeCorah (@katydecorah) auf CodePen.
Das untenstehende GIF zeigt, dass das spaltenbasierte Element mindestens 400 Pixel hoch sein muss, um den Inhalt in Spalten anzuzeigen.

Unterstützung
CSS-Spalten haben eine gute Unterstützung (IE10+) und erfordern immer noch Präfixe für alle Eigenschaften. Weitere Details zu den Mehrspalteneigenschaften finden Sie unter Can I Use….
Selbst wenn Ihr bevorzugter Browser Mehrspaltenlayouts nicht unterstützt, denken Sie daran, dass sie elegant in ein Einspaltenlayout abfallen. CSS-Spalten sind wie die Rolltreppen der Inhaltslieferung (wie von Mitch Hedberg treffend formuliert)

Ein Mehrspaltenlayout kann nicht abstürzen, es kann nur zu einem Einspaltenlayout werden.
Dies ist eine ausgezeichnete Anleitung, vielen Dank.
Spalten, die über den Viewport hinauslaufen, waren eine große Sorge für mich, bis Sie zeigten, wie einfach sie überwunden werden können. Meistens ist, sobald ein Bildschirm in der Breite zu klein ist, er fast sicher auch in der Höhe zu klein, und Ihre Media Queries sind eine perfekte Ergänzung.
Toller Artikel! Informativ und gut präsentiert. Danke.
Sie können die gleiche Art von Dingen mit Flexbox tun, so: http://codepen.io/tjacobdesign/blog/building-flexible-layouts/
Ich bin super begeistert von diesen Techniken. Es wird so schön sein, nicht mehr auf Media Queries für alles angewiesen zu sein. :)
Großartig! Verdammt, IE-Nutzer! Ich kann diese schönen Funktionen nicht nutzen, weil Leute darauf bestehen, diesen Mist-Browser zu benutzen.
Hey Fernando, Sie können sich Modernizr oder CSS3PIE für CSS3-Unterstützung in älteren IE-Versionen ansehen. Vermeiden Sie es nicht, moderne Standards zu verwenden, nur um ältere IE-Versionen zu unterstützen, sie werden irgendwann aussterben!
Früher mochte ich Mitch Hedberg. Ich mag ihn immer noch, aber das tat ich früher auch.
Verzeihen Sie mir, wenn dies eine ziemlich ignorante Bemerkung ist... Ich habe mich schon seit einiger Zeit nicht mehr um IE gekümmert, und die Vorstellung, dass die IE10+-Unterstützung akzeptabel ist, verwirrt mich. Internet Explorer 10 ist auf Benutzer beschränkt, die Windows 8 installiert haben... jeder unter 8 ist auf 9 oder niedriger angewiesen, je nach spezifischer Version, richtig?
Und Windows 7 stellt immer noch einen erheblichen Teil der Windows-Benutzer dar (ungefähr 50 %, soweit ich weiß).
Zugegeben, alle Verwendungen wie diese hängen von den spezifischen Benutzerstatistiken Ihrer Website ab... aber im Durchschnitt scheint es, dass die Akzeptanz von IE10 als "ordentliche Unterstützung" eine eher enge Sichtweise dessen ist, was akzeptabel ist.
Hey Robert, ich denke, ich hätte bessere Worte als "ordentliche Unterstützung" verwenden können. Ich verstehe, dass das ein relativer Begriff ist. Meine Absicht in diesem Abschnitt war es, darauf hinzuweisen, dass selbst ohne Unterstützung die Benutzer immer noch auf die Inhalte zugreifen können.
Couldn’t agree more.
Die Agentur, für die ich arbeite, meine früheren Jobs und ich selbst bei freiberuflicher Tätigkeit sind immer besorgt wegen IE.
Zumindest in Brasilien stellt IE einen großen Teil der Nutzer dar. Ich unterstütze immer noch IE7. Das ist bald vorbei. Jetzt denke ich über IE8-9 nach, aber ich muss immer IE7 überprüfen, um zumindest lesbar zu sein und eine ordentliche Navigation zu haben.
Wenn ich lese, dass IE10 als ordentliche Unterstützung gilt, werde ich auch wütend. =(
Einige meiner Kunden haben sogar IE9, nutzen aber den Kompatibilitätsmodus, ohne es zu wissen.
Internet Explorer 10 und 11 können auch auf Windows 7 installiert werden. Vielleicht sogar IE12.
Das Problem ist Windows Vista – das kommt nicht über IE9 hinaus – und vor allem Windows XP, das bei IE8 stecken bleibt.
IE10 und 11 sind jetzt automatische Updates für Windows 7 für Benutzer mit IE9. Da es sich um ein automatisches Update handelt, ist der Trend, dass die meisten Benutzer über IE8 hinaus jetzt IE11 verwenden (Vista bleibt bei IE9 stecken – aber die Verwendung von IE10 ist jetzt ziemlich ähnlich wie die Verwendung anderer Browser mit automatischen Updates: Sie ist niedrig genug, um eine Anomalie und keine zuverlässige Benutzerbasis zu sein).
Aufgrund der mangelnden Popularität von Vista bleibt IE8 die größere Sorge – aber die Unterstützung für XP ist jetzt beendet, und viele Firmenbenutzer steigen endlich auf Windows 7 um – wo ein moderner Browser ein Minimum ist.
Dies ist definitiv eine gute Zeit, um sich mit den Technologien zu befassen, die IE8 und 9 zurückgehalten haben. Ihre eigene spezifische Zielgruppe ist der König für die Definition Ihrer Unterstützung – aber es gibt keinen Grund, die neuesten CSS- und HTML-Funktionen heute nicht zu verwenden, solange Sie sie mit einem eleganten Abbau für Benutzer, die hinter älterer Technologie zurückbleiben, unterstützen. Wenn Sie bereits "mobile-first" entwickeln, sind Sie bereits auf dem besten Weg, auch für alte IE-Versionen eine grundlegende, aber nutzbare Erfahrung zu bieten.
Robert, IE10 ist nicht auf Windows 8 beschränkt, sowohl IE10 als auch 11 sind für Windows 7 verfügbar, vorausgesetzt, Sie haben das Service Pack installiert. Ich verwende die neueste Version von IE11 unter Win7. Die einzigen OS-Beschränkungen für IE sind: XP-Benutzer sind auf maximal IE8 beschränkt, Vista-Benutzer auf maximal IE9.
Ich mag die Richtung, in die sich das Web entwickelt – man lernt jeden Tag etwas Neues und Tolles. Danke für die ausführlichen Beispiele, Katy :)
IE10+ ist keine "ordentliche" Unterstützung. Ich wünschte, meine Zielgruppe wären Kunden mit hochmodernen Browsern. Hier im Großstadtdschungel (ein beliebter Ort, ich versichere Ihnen) ist IE10 ein Traum.
Ich werde CSS-Spalten sofort verwenden, in etwa 8 Jahren.
Es gibt oben einen IE-10-Thread, also werde ich diesen hier begraben, um die Dinge zusammenzufassen.
Toller Artikel. Es scheint, dass etwas wie dies verwendet werden könnte, um großartige HTML-E-Mails zu erstellen, vorausgesetzt, die meisten Clients rendern sie richtig...
Würde das mit älteren Browsern funktionieren? Wenn nicht, gibt es eine vernünftige CSS-Backup-Lösung?
Wenn ein Browser keine Spalten unterstützt, werden die Elemente einfach in einer normalen Spalte angezeigt.
Ich glaube, es gibt einen Fehler. Wo es heißt
Es gibt kein GIF darunter. Das Bild ist eine Wiederholung der vorherigen PNG-Datei.
Sie haben Recht! Das Bild wurde jetzt korrigiert. Danke, dass Sie es gefunden und kommentiert haben!
Vielen Dank für dieses tolle Tutorial. Ich denke, Sie sollten ein WordPress-Theme oder etwas Ähnliches mit all diesen Funktionen erstellen.
Jetzt brauchen wir nur noch das
-webkit-columns-flow: row;
-moz-columns-flow: row;
columns-flow: row;
Um verschiedene Höhenobjekte horizontal fließen zu lassen.
Hier ist mein responsives, horizontal scrollendes, spaltenbasiertes Website-Mockup, das ich vor einiger Zeit erstellt habe.
http://ghostmounta.in/cols/
Oben gibt es etwas, wo (bei mir) steht
Die rechte Seite zeigt, wie die Regeln auf ein Container-Element angewendet werden, wie ein
oder
um die Elemente in ein Mehrspaltenlayout umzuwandeln.
Ich glaube, ein paar HTML-Elemente sind verloren gegangen – nicht richtig escaped?
Ich glaube, dieses Polyfill sollte Dinge für IE8-9 zumindest beheben
http://welcome.totheinter.net/columnizer-jquery-plugin/
Sehr schön und vollständig, daher nützlich.
Danke, Katy ;)
Zieht die großartigen erweiterten Kommentare an, wie es sein sollte!
Toller Artikel
Sie haben gerade alle Geheimnisse des UI-Designs für Entwickler wie mich revolutioniert. Wir können alles mit unternehmensinterner Geschäftslogik auf dem Server machen, aber was CSS angeht, sind die meisten von uns extrem schlecht. Dieser Artikel macht in dieser Hinsicht einen großen Unterschied. Danke.