Mehr von Jürgen Gutsch

Mehr von Jürgen Gutsch

Empfehlungen von Jürgen Gutsch

Blog-Empfehlungen von Jürgen Gutsch

Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Jürgen Gutsch

ASP.NET und mehr...

News

CSS: 100% Höhe bei DIVs

Hin und wieder kommt es vor, dass DIV Elemente 100% hoch sein müssen.

Wozu benötigt man 100% hohe DIV Elemente? Oftmals werden Websites so gestaltet, dass sie 100% der Höhe des Browserfensters ausnutzen sollen. In den Zeiten von AJAX und Web 2.0 sollen immer öfter DHTML Fensterchen aufgehen und der Rest der Seite ausgegraut werden.

Wenn man beachtet, wie eine HTML Seite aufgebaut ist, ist es eigentlich recht einfach.

Gegeben ist folgendes HTML:



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Untitled Page</title>
    <link href="styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1">
        <div id="page">
        </div>
    </form>
</body>
</html>

Das Element
mit der ID "page" soll 100% der Seitenhöhe nutzen und 48.7em (das entspricht mit normalen Einstellungen ca 780px) breit sein. Damit das Element auf der weißen Seite sichtbar wird, so es temporär rot eingefärbt werden.

normalerweise würde man jetzt hingehen und folgende Formatierung für die ID "page" in die CSS Datei schreiben:

#page
{
    height: 100%;
    width: 48.7em;
    background-color: red;
}

Damit es keine Ränder gibt wird man den BODY und das FORM ebenfalls formatieren:

body, form
{
    margin: 0px;
    padding: 0px;
}

Mit dem Resultat, das unser DIV jetzt genau eine Zeile hoch, rot und 48.7em breit ist, obwohl 100% angegeben ist.

Bis hier hin werden alle schon gekommen sein... ;-)

100% ist eine relative Angabe. Wir müssen uns also Fragen: "100% von was?"
Vom Fenster, klar. Aber woher weis das CSS wie hoch das Fenster ist? Gar nicht!

CSS formatiert Elemente, relativ zum vorhergehenden, oder relativ zum übergeordneten. So werden Positionierung in den meisten Fällen relativ zum vorherigen Element vorgenommen. Und das meiste andere, relativ zum übergeordneten.

Was heißt das? Das heißt, dass das DIV jetzt 100% die Höhe des vorhergehenden Elements hat, bzw. die Höhe des Whitespace Zeichens innerhalb des DIVs

Was tun? Die Lösung liegt auf der Hand. Wir müsse die Elemente HTML, BODY, und FORM ebenfalls auf 100% Höhe setzen:

html, body, form
{
    height: 100%;
    margin: 0px;
    padding: 0px;
}
#page
{
    height: 100%;
    width: 48.7em;
    background-color: red;
}

HTML als oberstes Element, ist damit genau so hoch wie die Frame des Browserfensters und die untergeordneten Elemente BODY und FORM sind genauso hoch wie das jeweilige übergeordnete.

Im IE7 muss der FORM Tag fälschlicherweise nicht berücksichtigt werden. Es würde also reichen nur HTML und BODY 100% groß zu machen. Firefox und Opera benötigen dagegen ein 100% hohes FORM Tag.

Posted: Montag, 21. April 2008 21:39 von Jürgen Gutsch
Abgelegt unter: , ,

Kommentare

Peter Bucher sagte:

Endlich && Well Done :))

# April 21, 2008 22:12

Uwe Keim sagte:

Bei einem Projekt habe ich mal die Idee geklaut, wie es der Google Calendar macht:

Per JavaScript-Timer die Höhe zyklisch nachführen, so dass auch bei Fenstergrößenänderung durch den Benutzer die 100% Höhe stets gelten.

# April 22, 2008 07:06

Jürgen Gutsch sagte:

Hallo Uwe,

auf diese Art kannst du das Fenster so vergrößern und verkleinern wie du möchtest.

Es bleiben immer 100% der Fenstergröße

# April 22, 2008 07:13

Uwe Keim sagte:

A jo, ich weiß, deswegen habe ich es ja so gemacht.

# April 22, 2008 10:04

Jürgen Gutsch sagte:

Bitte? Sorry...

Ich meinte die von mir beschriebene CSS Art, damit bleiben es ebenfalls immer 100%, ganz egal wie du den Browser ziehst ;-)

(JavaScripts sind somit nicht nötig)

# April 22, 2008 10:16

Uwe Keim sagte:

Ah, so war's gemeint.

Ich glaube aber, ganz ohne JS geht es doch nicht, gibt bestimmt bestimmte Fälle bei denen es nicht reicht.

# April 22, 2008 12:20

Peter Bucher sagte:

Was für Fälle?

# April 22, 2008 14:39

Jürgen Gutsch sagte:

Mit IE7, dem nesten Firefox und dem neusten Opera hab ich's auf alle Fälle erfolgreich getestet.

# April 22, 2008 16:46

Peter Bucher sagte:

IE6? (Muss nicht native sein... gibts sowas überhaupt noch? ^^) :-) *selberZuFaulUmZuTesten*

# April 22, 2008 18:35

Peter Bucher sagte:

Sodele, bin mal dazu gekommen (WS08 unterstützt keinen Standalone IE6 mehr).

In IE6 (native) klappt die Lösung auch wunderbar.

Und schliesslich noch ein Tipp, den Jürgen vergessen hat: Wenn man 100.01% Höhe angibt, gibt es in Mozilla Browsern _immer_ Ein Scrollbalken, ohne ihn jedoch bewegen zu können.

Das bewirkt, dass der Scrollbalken immer da ist (Wie im IE), und dadurch die Seite nicht plötzlich mehr Platz hat und dann wieder weniger.

# Mai 28, 2008 17:37

Jürgen Gutsch sagte:

Danke für den Tip.

Das ist gerade dann wichtig, wenn man zentriert ausgerichtete Webseiten hat. Ohne den Hack würde die Seite, je nach dem ob ein Scrollbalken da ist, oder nicht, beim Navigieren hin und her springen.

Ich selber habe den "Hack" (html{height:100.01%;}) überall drin. Hier im Beispiel hab ichs nur rausgenommen, da es nicht direkt mit dem Thema zu tun hat.

# Mai 28, 2008 17:56

Peter Bucher sagte:

Ja, ich wusste schon dass du das kennst, ich habs schliesslich von dir :-)

IMHO passt das aber gut zum Thema, als Zusatz.

# Mai 28, 2008 17:59

tuebben sagte:

der "html{height:100.01%;}"-Hack scheint im neuesten Firefox aber nicht mehr zu funktionieren, oder?

# Juli 8, 2008 20:35
Anonyme Kommentare sind nicht zugelassen