Linke Hälfte Und Rechte Hälfte Layout – Viele Unterschiedliche Wege

Avatar of Geoff Graham
Geoff Graham am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Vor vielen Jahren haben wir hier auf CSS-Tricks über diese Idee geschrieben. Wir dachten, es wäre an der Zeit, das zu aktualisieren und dem Thema gerecht zu werden.

Stellen Sie sich ein Szenario vor, in dem Sie ein Layout in zwei Hälften teilen müssen. Inhalt auf der linken und Inhalt auf der rechten Seite. Grundsätzlich werden zwei Spalten gleicher Höhe innerhalb eines Containers benötigt. Jede Seite nimmt genau die Hälfte des Containers ein, wodurch ein deutlicher Bruch zwischen den beiden entsteht. Wie bei vielen Dingen in CSS gibt es eine Reihe von Wegen, dies zu erreichen, und wir werden viele davon gleich durchgehen!

Verwendung von Hintergrundverläufen

Eine einfache Möglichkeit, das Erscheinungsbild eines sich ändernden Hintergrunds zu erzeugen, ist die Verwendung von Verläufen. Die eine Hälfte des Hintergrunds wird auf eine Farbe gesetzt und die andere Hälfte auf eine andere Farbe. Anstatt von einer Farbe zur anderen zu verblassen, wird in der Mitte ein Farbstopp mit Null Abstand gesetzt.

.container {
  background: linear-gradient(
    to right, 
    #ff9e2c 0%, 
    #ff9e2c 50%, 
    #b6701e 50%, 
    #b6701e 100%
  );
}

Dies funktioniert mit einem einzigen Container-Element. Das bedeutet jedoch auch, dass man mit Floats oder möglicherweise einer anderen Layout-Methode arbeiten muss, wenn Inhalte beide Seiten des Containers füllen sollen.

Siehe den Pen Linke Hälfte / Rechte Hälfte mit Hintergrundverlauf von CSS-Tricks (@css-tricks) auf CodePen.

Verwendung von absoluter Positionierung

Ein anderer Weg könnte darin bestehen, zwei Container in einem übergeordneten Container einzurichten, sie absolut zu positionieren, sie mit Prozentwerten in Hälften zu teilen und dann die Hintergründe anzuwenden. Der Vorteil hierbei ist, dass wir nun zwei separate Container haben, die ihren eigenen Inhalt aufnehmen können.

Siehe den Pen Linke Hälfte / Rechte Hälfte mit absoluter Positionierung von CSS-Tricks (@css-tricks) auf CodePen.

Absolute Positionierung ist manchmal eine perfekte Lösung und manchmal unhaltbar. Der übergeordnete Container muss hier eine festgelegte Höhe haben, und das Festlegen von Höhen ist oft schlecht für Inhalte (Inhalte ändern sich!). Ganz zu schweigen davon, dass absolut positionierte Elemente aus dem Dokumentfluss entfernt werden. Es wäre also schwierig, dies zum Laufen zu bringen, während beispielsweise anderer Inhalt darunter geschoben wird.

Verwendung von (Fake-)Tabellen

Ja, ja, Tabellen sind so altmodisch (ganz zu schweigen von den Problemen mit der Barrierefreiheit und der mangelnden Flexibilität im Layout). Nun, die Verwendung der Eigenschaft display: table-cell; kann tatsächlich eine praktische Methode sein, um dieses Layout zu erstellen, ohne HTML-Tabellen-Markup zu schreiben. Kurz gesagt, wir verwandeln unseren semantischen übergeordneten Container in eine Tabelle und die untergeordneten Container in Zellen innerhalb der Tabelle – alles in CSS!

Siehe den Pen Linke Hälfte / Rechte Hälfte mit Display Table von CSS-Tricks (@css-tricks) auf CodePen.

Sie könnten die Display-Eigenschaften bei Breakpoints sogar ziemlich einfach ändern, sodass die Seiten auf kleineren Bildschirmen gestapelt werden. display: table; (und Freunde) wird bereits seit IE 8 und sogar alten Androids unterstützt, ist also ziemlich sicher!

Verwendung von Floats

Wir können unseren guten Freund float verwenden, um die Container nebeneinander anzuordnen. Der Vorteil hierbei ist, dass er absolute Positionierung vermeidet (die, wie wir bereits bemerkt haben, unübersichtlich sein kann).

Siehe den Pen Linke Hälfte / Rechte Hälfte mit Floats von CSS-Tricks (@css-tricks) auf CodePen.

In diesem Beispiel legen wir explizit Höhen fest, um sie gleichmäßig zu machen. Aber diese Möglichkeit haben Sie bei Floats standardmäßig nicht wirklich. Sie könnten den bereits besprochenen Hintergrundverlaufstrick verwenden, damit sie einfach gleichmäßig *aussehen*. Oder Sie schauen sich verrückte negative Margin-Tricks und dergleichen an.

Denken Sie auch daran, dass Sie möglicherweise die Floats am übergeordneten Element löschen müssen, um den Dokumentenfluss beizubehalten.

Verwendung von Inline-Block

Wenn das Löschen von Elementen nach Floats mühsam erscheint, ist die Verwendung von display: inline-block eine weitere Option. Der Trick hierbei ist, sicherzustellen, dass die Elemente für die einzelnen Seiten keine Brüche oder Leerzeichen dazwischen im HTML aufweisen. Andernfalls wird dieser Platz als tatsächliches Leerzeichen gerendert und die zweite Hälfte bricht ab und fällt nach unten.

Siehe den Pen Linke Hälfte / Rechte Hälfte mit Inline-Block von CSS-Tricks (@css-tricks) auf CodePen.

Auch hier hilft nichts an Inline-Block, um die Höhen der Seiten auszugleichen, sodass Sie dies explizit tun müssen.

Es gibt auch weitere potenzielle Wege, um dieses oben beschriebene Abstands-Problem zu lösen.

Verwendung von Flexbox

Flexbox ist eine ziemlich fantastische Methode dafür. Beachten Sie nur, dass sie auf IE 10 und höher beschränkt ist und Sie möglicherweise mit Präfixen und Werten kreativ werden müssen, um die beste Unterstützung zu erhalten.

Bei dieser Methode verwandeln wir unseren übergeordneten Container in eine flexible Box, wobei die untergeordneten Container einen gleichen Anteil am Platz einnehmen. Keine Notwendigkeit, Breiten oder Höhen festzulegen! Flexbox weiß einfach, was zu tun ist, da die Standardeinstellungen perfekt darauf abgestimmt sind. Zum Beispiel sind flex-direction: row; und align-items: stretch; das, was wir suchen, aber das sind die Standardwerte, also müssen wir sie nicht festlegen. Um sicherzustellen, dass sie jedoch gleichmäßig sind, ist das Festlegen von flex: 1; auf den Seiten eine gute Idee. Dies zwingt sie, gleiche Anteile am Platz einzunehmen.

Siehe den Pen Linke Hälfte / Rechte Hälfte mit Flexbox von CSS-Tricks (@css-tricks) auf CodePen.

In dieser Demo machen wir die Seiten-Flex-Container ebenfalls zu Flex-Containern, nur zum Spaß, um die vertikale und horizontale Zentrierung zu handhaben.

Verwendung von Grid Layout

Für diejenigen, die am Puls der Zeit leben, ist die CSS Grid Layout-Technik wie die Methoden Flexbox und Tabelle in einer zusammengeführt. Mit anderen Worten, ein Container wird definiert, dann in Spalten und Zellen aufgeteilt, die flexibel mit untergeordneten Elementen gefüllt werden können.

Wenn die Zellen im folgenden Demo gestapelt sind, unterstützt Ihr Browser kein CSS Grid. Zum Zeitpunkt des Schreibens ist die Unterstützung auf Firefox, Chrome, Safari und Opera beschränkt (außer Opera Mini).

Siehe den Pen Linke Hälfte / Rechte Hälfte mit Grid Layout von CSS-Tricks (@css-tricks) auf CodePen.

Ist es nicht cool, wie viele Wege es gibt, Dinge in CSS zu tun?