Vertical Align

Ich persönlich finde diese Startseiten mit Links wie “Hier klicken, um Website XY zu betreten” ja höchst überflüssig. Warum soll der Besucher noch ein weiteres mal klicken müssen, um die Seite zu “betreten”? Anscheinend hatte er doch sowieso die Absicht, sich die Website anzusehen, sonst hätte er sie ja nicht aufgerufen. Wenn man jemanden anruft, ertönt ja auch keine Ansage, die sagt: “Hier ist das Telefon von XY. Wenn Sie jetzt wirklich mit XY telefonieren möchten, sagen Sie bitte ‘Weiter’.”

Trotzdem kann es vorkommen, dass man so eine Startseite bauen muss, z.B. wenn man nur ein Design umsetzt, das jemand anders vorgibt. Und dann ist es meistens auch noch so, dass das, was auf der Startseite stehen soll, mittig auf der Seite positioniert sein soll. Ist man in einer solchen Lage, hat man es meist mit einem der gefürchtetsten Probleme beim Gestalten mit validem XHTML und CSS zu tun: Vertikale Zentrierung.

Viel Frust bleibt einem erspart, wenn man weiß, dass die CSS-Eigenschaft “vertical-align” nur auf Inline-Elemente anzuwenden ist. Es ist kein Browser-Fehlverhalten, dass die vertikale Zentrierung eines DIV-Elements damit nicht funktioniert. Aber auch die Annahme, man könne mit “vertical-align” folglich ein Inline-Element innerhalb eines Block-Elements ausrichten, ist falsch: Die Ausrichtung erfolgt relativ zur Zeilenhöhe, nicht in Bezug auf die Höhe des umgebenden Block-Elements.

Screenshot: Vertical Align

“height” vs. “line-height”: Die Ausrichtung mit “vertical-align” erfolgt relativ zur Zeilenhöhe.

Wie in der Abbildung zu sehen ist, funktioniert “vertical-align”, richtig angewandt, tatsächlich wie gewünscht. Im Beispiel ist das auch ganz einfach, weil die tatsächliche Höhe, in deren Mitte der Text positioniert werden soll, bekannt ist. Das Problem bei der Startseite ist jedoch, dass man eben keine Kenntnis von der Höhe des Browserfensters hat. Es funktioniert auch nicht mit der Angabe line-height: 100%;, weil die in Prozent angebene Zeilenhöhe relativ zur Schriftgröße ermittelt wird.

Im folgenden möchte ich einen Workaround vorstellen, der geeignet ist, ein Element, dessen Höhe bekannt ist, mit wenig Aufwand - also ohne JavaScripts, ohne CSS-Hacks, ohne browserspezifische CSS-Regeln - vertikal auf der Seite zu positionieren. Die Methode ist so nicht dazu gedacht und geeignet, komplette, komlexe Layouts vertikal auszurichten. Prinzipiell sollte die Lösung jedoch für alle Elemente funktionieren, von denen die absolute Höhe bekannt ist.

Der Workaround basiert darauf, zunächst ein als Behälter dienendes Block-Element (im Beispiel das H1-Element) mit seiner Oberkante vertikal mittig auszurichten. Das funktioniert mit Hilfe absoluter Positionierung (position: absolute;) und der Angabe der gewünschten Differenz vom oberen Rand des Browserfensters (top: 50%;), obwohl man die tatsächliche Höhe des Browserfensters nicht kennt. Das darin enthaltene A-Element wird nun per CSS-Eigenschaft “margin-top” um die Hälfte seiner eigenen Höhe nach oben verschoben, et voilà: der Link ist vertikal zentriert. Weitere CSS-Regeln im Beispiel-Code dienen dazu, die horizontale Ausrichtung festzulegen sowie, zur Veranschaulichung, den Elementen kräftige Hintergrundfarben zuzuweisen.

Screenshot: Vertical Align mit absoluter Positionierung

Vertikale Zentrierung mit einfachen Mitteln

Beispiel ansehen

Der XHTML- sowie der CSS-Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title></title>
    <style type="text/css">
    /*<![CDATA[*/
    * {
        margin: 0; padding: 0;
    }
    body {
        background: gray;
        height: 100%;
    }
    h1 {
        background: yellow;
        position: absolute;
        top: 50%;
        width: 100%;
    }
    a {
        background: orange;
        display: block;
        font-size: 50px;
        line-height: 100px;
        margin-top: -50px;
        margin-left: auto;
        margin-right: auto;
        position: relative;
        text-align: center;
        width: 200px;
    }
    /*]]>*/
    </style>
</head>

<body>
    <h1>
        <a href="#">Link</a>
    </h1>
</body>
</html>

CSS-Bookmarks

  • Webstandards in Germany
    Redaktionell geführtes Verzeichnis Webstandards-bezogener Blogs, Agenturen und Initiativen von Stefan Asemota.
  • Bookmarks für Webdesigner
    Linksammlung, die nicht durch Umfang, sondern durch Qualität besticht.
  • The Flop
    Douglas Bowman archiviert seinen sensationellen 2005-er Flop
  • smalltransport.com/links/
    "Links to great design and design resources"
  • Full CSS Property Compatibility Chart
    "shows all CSS1, CSS2 and Internet Explorer CSS extensions and grades the level of support each recieves in a given browser."
  • CSSHilfe
    "CSSHilfe ist ein Verzeichnis, das mit Ressourcen, Tutorials und Tipps Hilfestellung bei der Recherche und Applikation von CSS geben möchte."
  • Stylegala
    "Stylegala aims to promote, discuss and inspire the web audience in the areas of design, CSS and web standards - combined."
  • Web Standards Awards
    "The Web Standards Awards aim to highlight the best in standards-compliant web site design"
  • css Zen Garden
    "A demonstration of what can be accomplished visually through CSS-based design."
  • Cascading Style Sheets, Level 2
    Deutsche Übersetzung der CSS-2-Spezifikation
  • Alle Bookmarks ansehen

XML-Feed


Login