Tutorial: HTML Elemente zentrieren

Icon Elemente Zentrieren Um HTML Elemente zu zentrieren gibt es leider keine allgemeingültige Lösung, die für alle Browser ein gleiches Erscheinungsbild garantiert. Somit ergibt sich die Notwendigkeit die Vor- und Nachteile verschiedener Methoden zu vergleichen, um die für den gewünschten Zweck am besten geeignete Variante auswählen zu können. Einige Methoden werden im Folgenden angesprochen und ihre Stärken und Schwächen gegenübergestellt.
Wichtig zu beachten ist, dass bei prozentualen Angaben die Ausmaße des Elternelementes zur Berechnung herangezogen werden. Aus diesem Grunde ist es wichtig, ihnen entsprechende Angaben zuzuweisen. Für die anschließenden Beispiele werden alle browserabhängigen margin- und padding- Werte auf 0 gesetzt, sowie eventuelle Rahmen unterdrückt:
* {margin:0; padding:0; border:none;}
Zudem werden ausdrücklich für html und body 100% Breite und 100% Höhe vorgegeben:
html, body {height:100%; width:100%;}
Relevante CSS Angaben sind auf den Beispielseiten direkt im Quelltext notiert und nicht in separate Dateien ausgelagert. So ist der CSS-Code einfach im Quelltext der jeweiligen Seite nachzulesen. TOP

Horizontale Zentrierung

Hier muss man primär einmal zwischen Inlineelementen (extern) und Blockelementen (extern) unterscheiden. Das kleinste Problem stellt dabei die einfache Zentrierung von Inlineelementen dar. Mit text-align:center; lässt sich diese Anordnung per CSS einfach durchführen.
Fast ebenso einfach gestaltet sich dagegen das Zentrieren von Blockelementen. Folgendes Beispiel soll dies verdeutlichen:
Ein Blockelement, in diesem Fall eine Liste soll halb so breit sein wie das Browserfenster und horizontal zentriert werden.
Für standardkonforme Browser bietet sich dazu eine Lösung mittels margin an, nämlich:
margin-left:auto; margin-right:auto;.
Das allerdings funktioniert im IE nur bedingt. Versionen kleiner IE6 verstehen margin:auto; nicht, der IE6 nur im standardkompatiblen Modus, aber nicht im Kompatibilitätsmodus (Quirks). Trotzdem kann man auch im IE Blockelemente horizontal zentrieren. Denn glücklicherweise macht der IE in diesen Fällen einen anderen Fehler: Er wendet die Eigenschaft text-align:center; auch auf Blockelemente an.
Also geben wir dem Elternelement der Liste eben diese Anweisung und zentrieren dadurch die Liste auch für den IE. Da nun aber auch der Listentext zentriert ist, da diese Eigenschaft vererbt wird, muss der Text in der Liste ausdrücklich wieder linksbündig ausgerichtet werden.
Standardkonforme Browser werden durch diesen Umweg nicht aus dem Konzept gebracht, so dass mit einer Kombination beider Methoden problemlos ein allgemeingültiges Ergebnis erreicht wird.
Anzeigebeispiel TOP

Vertikale Zentrierung

Eine Zentrierung von HTML Elementen in der Vertikalen ist deutlich schwieriger, als in der Horizontalen. Da es eine universelle, ideale Lösung nicht gibt, ist es wichtig die Möglichkeiten miteinander zu vergleichen, um die geeignete für den jeweiligen Zweck auzuwählen.

Inhalt in einer Zeile vertikal zentrieren

Um bei dem vorherigen Beispiel der Liste zu bleiben, sollen nun die Listenpunkte 3em hoch werden. Dabei stellt sich das Problem, dass der Text nun unschön am oberen Rand der Listenpunkte klebt. Um diesen Text einfach vertikal zu zentrieren, bietet sich die Eigenschaft line-height an. Setzt man diese ebenso auf 3em, dann ist der Text in den Listenpunkten vertikal zentriert, wie man es vielleicht für eine Navigationsliste erreichen möchte.
Doch gibt es hier das Problem, dass bei einem Zeilenumbruch der Zeilenabstand entsprechend groß dargestellt wird. Wird dieser Umstand aber ausreichend bedacht, ist diese Methode für „Einzeiler” universell einsetzbar.
Anzeigebeispiel TOP

Block Element bekannter Größe zentrieren

Sofern die Größe des zu zentrierenden Elementes bekannt ist, kann eine absolute Positionierung mit negativem Margin eingesetzt werden. Dazu wird das Element absolut positioniert, und die linke obere Ecke des Elements mittels
top: 50%; left:50%;
in der Mitte des Browserfensters positioniert. Mit dem negativen margin-top: HöheElement/2 und margin-left: BreiteElement/2 findet dann die Zentrierung in beiden Dimensionen statt. In dem Beispiel also margin-top:-10.5em; und margin-left:-250px;
Anzeigebeispiel
Problematisch wird diese Methode allerdings, wenn das Browserfenser kleiner wird, als das zentrierte Element. Auf Grund der absoluten Positionierung wird ein Teil des Elements aus dem Browserfenster geschoben, ohne durch die Bildlaufleisten erreichbar zu sein. Der Inhalt wird somit zumindest teilweise unzugänglich. Davon abgesehen ist diese Methode aber universell einsetzbar, sofern die Ausmaße des zu zentrierenden Elementes vorgegeben sind.

Eine weitere Methode besteht darin, ein zusätzliches Element einzufügen, das den oberen Abstand des zu zentrierenden Elementes bestimmt. Diese Methode basiert auf float und clear. Das Prinzip ist ähnlich wie bei der vorherigen Methode. Dem Abstandhalter wird 50% Höhe zugewiesen und er wird links gefloatet. Durch margin-bottom:- HöheElement/2 wird das HTML Element in der vertikalen Mitte zentriert.
Anzeigebeispiel
Der Vorteil dieser Methode liegt auf der Hand: Da das zentrierte Element nicht absolut mit negativen margins positioniert werden muss, bleiben die Inhalte auch bei verkleinertem Browserfenster über die Bildlaufleisten erreichbar.
Als Nachteil muss man in Betracht ziehen, dass ein zusätzliches Element eingefügt wird, das selbst keinen Inhalt trägt, sondern nur gestalterischen Zwecken dient.
Diese Methode ist im Original in englischer Sprache unter http://d-graff.de/fricca/center.html (extern) erschienen. TOP

Block Element unbekannter Größe zentrieren

Diese Aufgabe ist zu erfüllen, wenn man eine Tabelle zu Hilfe nimmt. Mit der Eigenschaft vertical-align:middle; können Elemente in Tabellenzellen vertikal zentriert werden. Dazu muss also in einer Tabelle eine Tabellenzelle enthalten sein, der diese Eigenschaft zugewiesen wird.
Horizontal wird das Element dann wie oben erläutert mit margin:auto; zentriert. Da keine Tabelle existiert, wird für das html Element die Eigenschaft display als Tabelle definiert und für das Element body als Tabellenzelle. In CSS sieht das dann so aus:

  • html {display:table;}
  • body {display:table-cell; vertical-align:middle;

Anzeigebeispiel
Diese Methode ist nahezu perfekt. Es wird kein zusätzliches Element im HTML eingefügt und der Quellcode bleibt schlank und auf reine Auszeichnung beschränkt, wie HTML sein sollte. Die besondere Einschränkung liegt hier eigentlich nur in dem Umstand, dass der Internet Explorer die für diese Methode notwendigen Anweisungen nicht umsetzen kann.
Hier stellt sich nun ein Konflikt ein. Entweder den Umstand hinnehmen, daß die Darstellung im IE nicht der standardkonformer Browser entspricht, was in den meisten Fällen hinnehmbar sein wird.
Oder, sofern die vertikale Zentrierung zwingend erforderlich erscheint, muss dem IE notfalls nachgeholfen werden. Leider werden aber zusätzliche HTML Elemente erforderlich, die nicht der reinen Auszeichnung der Inhalte dienen, sondern lediglich die Darstellung ermöglichen sollen. Streng genommen widerspricht das der Intention von HTML als reiner Auszeichnungssprache.
Die Qual der Wahl liegt in diesem Fall beim Webseitenersteller. TOP

Zentrieren mittels HTML Tabelle

Um die HTML Elemente auch für den IE vertikal zentriert darstellen zu können, ist es nötig eine Tabelle nicht nur per Definition zu "erstellen", sondern tatsächlich eine Tabelle einzufügen. Die Diskussion, ob diese Methode der Absicht von HTML entspricht oder nicht, überlasse ich an dieser Stelle anderen. Für den IE ist mir jedenfalls keine bessere Möglichkeit bekannt. Abgesehen vielleicht von Lösungen über JavaScript, die aber auch nicht bei jedem Nutzer funktionieren würden.
Der Trick für den IE besteht nun darin, eine Tabelle einzufügen, die eine einzige Zelle enthält. Diese Tabellenzelle wird über die gesamte Breite und Höhe des Browserfenster ausgedehnt, so dass die in dieser Zelle zentrierten Elemente auch im Browserfenster zentriert erscheinen. Das funktioniert natürlich auch in standardkonformen Browsern.
Anzeigebeispiel
Der Code sähe dann so aus:

  • table {height:100%; width:100%;}
  • td {height:100%; width:100%; vertical-align:middle;

Der Vorteil dieser Methode liegt sicherlich darin, dass sie von allen gängigen Browsern einschließlich des IE dargestellt werden kann. Allerdings werden hier inhaltlich unnötige HTML Elemente eingefügt, die rein gestalterischen Aspekten dienen. Nun ist die Anzahl dieser Elemente durchaus so sehr begrenzt, dass man in diesem Fall auch begründet pragmatisch dafür argumentieren kann.
Obwohl Layouttabellen zu Recht verpönt sind, kann man in diesem speziellen Fall in Anbetracht der doch sehr rudimentär angelegten Tabelle vielleicht eine Ausnahme gelten lassen. Die Entscheidung liegt bei Ihnen.

TOP