Fixed Position im Internet Explorer kleiner Version 7

Moderne Browser beherrschen die Style-Anweisung position: fixed;, leider nicht so die alten IE-Browser vor der Version 7. Damit man dennoch Elemente auf der Seite fixieren kann, unterteilt man das Fenster in eine skrollenden Bereich und eine fixierten Bereich. Der Quelltext im <body> sieht wie folgt aus:

  1. <body>
  2. <div id="box">
  3. <div id="wrapper">
  4. <div id="content"> ... </div>
  5. <div id="navi"> ... </div>
  6. </div>
  7. </div>
  8. <div id="header"> ... </div>
  9. <div id="footer"> ... </div>
  10. <div id="decor1"></div>
  11. <div id="decor2"></div>
  12. <div id="decor3"></div>
  13. </body>

Wie steht's im Leben des Webdesigners könnte alles so schön sein, wäre da nicht der eine Browser oder der andere der ein wenig zickt. In diesem Fall ist es der Opera-Browser, für den Opera ist die fixierte Box (<div id="box">) im fixierten <body>. Wieviele Deco-Elemente man benötigt hängt natürlich vom Design ab. Die einen benötigen keines, die anderen mehr als drei (<div id="decor[1-n]">). Kommen wir zum zweiten Schritt, den CSS-Anweisungen:

  1. html, body, div, img {margin: 0; padding: 0; border: 0;}
  2. html {height: 100%; overflow: hidden;}
  3. body {height: 100%; overflow: hidden;}
  4. #box {width: 100%; height: 100%; overvlow: hidden;}
  5. #wrapper {height: 100%; width: 100%; position: absolute; top: 0; left: 0; padding: 0; margin: 0; overflow: auto; overflow-y: scroll; z-index: 10;}
  6. #content {... margin-top: 260px; padding-bottom: 36px;}
  7. #navi {...}
  8. #header {width: 100%; height: 230px; position: absolute; top: 0; right: 15px; padding-left: 30px; z-index: 15;}
  9. #footer {width: 100%; height: 18px; position: absolute; bottom: 0; right: 15px; padding-left: 30px; z-index: 16;}
  10. #decor1 {Width: ...; height: ...; position: absolute; top: ...; left: ...;}
  11. #decor2 {width: ...; height: ...; position: absolute; ...}
  12. #decor3 {width: ...; height: ...; position: absolute; ... etc.}

html, body und #box füllen den gesamten Viewport und die Skrollbalken sind deaktiviert. Der Wrapper (<div id="wrapper">) ersetzt den <body>. Styleanweisungen von Elementen im Wrapper unterscheiden sich nicht von Styleanweisungen von Elementen die gewöhnlich im <body> stehen, wenn dieser nicht gnadenlos seiner Skrollbalken beraubt ist. Alles außerhalb des Wrapper wird nun absolute positioniert. Wobei Elemente wie Header und Footer (<div id="header">,<div id="footer">) die über die gesamte Breite des Viewports gehen und per z-index über dem Wrapper stehen und damit den Scrollbalken verdecken, für diesen Platz machen müssen. Daher richtet man diese Elemente rechts neben dem Skrollbalken aus und kompensiert die 15px, die das Element nun aus dem Viewport links rutscht, per padding. Elemente im Wrapper benötigen entsprechend Abstände, wenn Elemente außerhalb des Wrappers, Inhalte überlagern. Decor-Elemente kann man nun frei auf im Viewport positionieren.

Diese Methode erübrigt sich in ein, zwei Jahren, wenn der Internet Explorer 6 und kleiner aus den Statistiken verschwunden ist.

Übrigens arbeitet diese Site-Template mit dieser Technik für fixed position.

Vorsicht Unwegsamkeit!

Bei dieser Technik darf es im Falle einer Fußzeile am unteren Rand des Viewports zu keinem Querskrollen kommen. Die Fußzeile verdeckt jeden horizontalen Skrollbalken und blockiert damit dessen Gebrauch. Man kann dem Problem ausweichen, in dem man die Fußzeile 15px vom unteren Viewport abrückt und im Wrapper die letzten 15 Pixel wie die Fußzeile gestaltet.

Siehe auch Total proportional, in der Seite sind links und rechts jeweils zwei Elememte fixiert, hier wurde für Browser, die position: fixed; schon verstehen auf die Divs verzichtet. Diese werden über Conditional Comments ausgeblendet. Die Stilanweisungen sind separat. Solange die fixierten Elemente außerhalb des Wrappers untergebracht werden, kann man man sich die unbeeinträchtigte Skrollfunktion der Browsers erhalten.

Silke Schümann, Gabäckerweg 37, 73630 Remshalden/Geradstetten, Fon 07151-970717, sag-hi @ pg4me.de