Warum display:table-cell nicht-center-Inhalte ohne display:table?

Ich bin auf der Suche nach der effizientesten (oder eleganter) Weg, um vertikal-und horizontal-center-Inhalte von variabler Höhe. Ich kam mit dieser: http://cssdeck.com/t/2veysdkg/16, die mit css-Tabellen vertikal zentrieren Sie die wichtigsten Inhalte.

Meine Anforderungen für das schreiben dieses Besondere Stück code:

  • Werden können, muss das center variable und fixe Breite-Inhalte vertikal und horizontal
  • Zentriert-Inhalt muss in den normalen Belegfluss (also nicht überlappend)
  • Sticky footer und normalen header, beide 100% width
  • Als paar hacks, hässlich-code oder nicht-semantisches html als möglich
  • Ich didn 'T Pflege über die Unterstützung für IE6, IE7 (ich' ll verwenden Sie ein anderes stylesheet)

Komisch ist, dass die oben genannten Anforderungen sind nur erfüllt, wenn die Kopf-und Fußzeile festgelegt display:table-row, und der body-tag zu display:table. Das ist komisch, weil wie ich es verstehe, css generieren anonyme Tische Elemente bei der parent-Tabelle Elemente fehlen. So display:table-cell funktionieren sollte, ohne alle umliegenden Elemente, aber noch habe ich nicht in der Lage gewesen, es zu schaffen.

Wenn es nach mir geht würde ich lieber nicht Durcheinander mit den display-Modus für das body-tag, und lassen Sie die Kopf-und Fußzeile auf display:block. Aber ich habe nicht in der Lage gewesen, es zu schaffen. Hat jemand verstehen, warum das nicht funktioniert, und wie erfüllen die oben genannten Anforderungen ohne die Verwendung von display:table und display:table-row?

Für diejenigen, die lieber nicht besuchen cssdeck zu meiner sourcecode werde ich es hier posten:

HTML

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Vertical Centering</title>
    </head>
    <body>
        <div id="header">header</div>
        <div id="vertical">
            <div id="horizontal">content</div>
        </div>
        <div id="footer">footer</div>
    </body>
</html>

CSS

body, html {
    height: 100%;
    width: 100%;
    margin: 0;
    padding: 0;
}

body {
    display: table;
}

#header {
    display: table-row;
    height: 2em;
    background: gray;
}

#vertical {
    display: table-cell;
    vertical-align: middle;
    width: 100%;
    height: 100%;
}

#horizontal {
    height: 500px;
    width: 500px;
    margin: auto;
    background: gray;
}

#footer {
    height: 2em;
    display: table-row;
    width: 100%;
    background: gray;
}
Können Sie uns zeigen, die html, wo Sie tatsächlich Probleme haben?
natürlich habe ich es auf die Frage (ein Arbeits - /Bearbeitbare Beispiel finden Sie hier: cssdeck.com/t/2veysdkg/16).

InformationsquelleAutor | 2012-06-08

Schreibe einen Kommentar