Der bessere Trick gegen ruckelnde Websites

[An dieser Stelle würden Sie einen Facebook-„Gefällt mir“-Button sehen – wenn Deutschland nicht das Land der ausufernden Datenschutz-Paranioia wäre.]

Zentriert ausgerichtete Websites (mit fester Breite) ruckeln optisch ein klein wenig horizontal hin und her, wenn man von einer langen Seite mit vertikalem Scrollbalken zu einer kurzen Seite ohne Scrollbalken wechselt – und umgekehrt. Der allgemein übliche Trick zur Vermeidung dieses Ruckel-Effekts hat einen unerwünschten Nebeneffekt: Er macht die Seite im Safari 3 unbenutzbar. Auch wenn die Verbreitung des Safari 3 weit unter der Ein-Prozent-Marke liegt, hat mich das gestört.

Meine bisherige Lösung: Erzwingen des vertikalen Scrollbalkens mithilfe der body-Höhe

Wie viele andere Webdesigner auch, habe ich bis gestern den folgenden bekannten Trick angewendet, um die Anzeige eines vertikalen Scrollbalkens zu erzwingen, unabhängig von der Länge bzw. Kürze der Seite.

html {
  height: 100%;
}

body {
  height: 101%;
}

Dadurch ist jede Seite immer ein klein wenig länger als der Viewport im Browser, so dass ein „echter“ vertikaler Scrollbalken angezeigt wird. Nicht so im Safari 3. Dort wird im Gegensatz zu allen anderen Browsern überhaupt kein Scrollbalken angezeigt. Und noch schlimmer: Eine auf diese Weise „gepimpte“ Seite kann im Safari 3 überhaupt nicht mehr gescrollt werden und ist damit in diesem Browser unbenutzbar.

Meine neue Lösung: Erzwingen des vertikalen Scrollbalkens mithilfe der CSS3-Eigenschaft overflow-y

Anstatt einen „echten“, funktionierenden vertikalen Scrollbalken mit einem etwas zu hohen body zu erzwingen, lässt sich das Ruckel-Problem auch viel einfacher beheben. Die CSS3-Eigenschaft overflow-y lässt sich prima dazu verwenden, auch bei kurzen Seiten einen inaktiven vertikalen Scrollbalken anzeigen zu lassen. Das reicht völlig aus, denn es geht schließlich nur darum, dass der Platz des vertikalen Scrollbalkens „reserviert“ ist. Und so geht es:

html {
  overflow-y: scroll;
}

Soweit ich das bisher testen konnte, kommen alle Browser problemlos damit klar und zeigen bei zu kurzen Seiten einen inaktiven vertikalen Scrollbalken an.

Wichtig dabei: Die Eigenschaft overflow-y muss dem html-Element zugewiesen werden, nicht dem body. Versucht man letzteres, erhält man in den Internet-Explorer-Versionen 6 und 7 zwei vertikale Scrollbalken direkt nebeneinander, was seltsam aussieht.


Kommentare


Walter Walser

Kommentar Nr. 1 · Wednesday, 30. June 2010, 09:06 Uhr

Danke, guter Tipp!
Der Trick funktionierte bei meinen Tests bestens.
Einzige kleine Ergänzung: Der W3C CSS Validierungsdienst meldet nun bei dieser Zeile einen Fehler.


knuti

Kommentar Nr. 2 · Wednesday, 30. June 2010, 11:09 Uhr

Danke für diesen Supertipp.

p.s.: ich muss jetzt beim Captcha MODx... eingeben!
Das ist doch so gewollt ;-)


Michael van Laar

Kommentar Nr. 3 · Thursday, 1. July 2010, 22:37 Uhr

@knuti: Ja, wenn ich mich recht entsinne, ist MODx eines der Captcha-Wörter. Ich muss die Liste bei Gelegenheit mal etwas fantasievoller gestalten.


Jane

Kommentar Nr. 4 · Tuesday, 30. November 2010, 10:58 Uhr

Hallo Michael,
dein Tipp war mein Startpunkt, aber dann habe ich noch etwas weiter recherchiert.

Mit
body { overflow-y:scroll; }
und
body { o\verflow:visible; }
trickst man die ollen IEs aus :-)

Und immer schön, mal einen Modxler zu treffen.


Jane

Kommentar Nr. 5 · Tuesday, 30. November 2010, 12:35 Uhr

Nachtrag Kommentar:

natürlich nur wenn man es über eine IE7patch-Datei einbaut.


ConnyLo

Kommentar Nr. 6 · Tuesday, 28. December 2010, 01:54 Uhr

Wenn man so am MODx basteln ist und über das Suchwort »Captcha« hierher gelangt… Aber Deinen Tipp nehme ich gerne mit ;-)


Silke

Kommentar Nr. 7 · Thursday, 31. March 2011, 09:55 Uhr

Hallo,

aber wie kann man dann das Problem im W3C CSS Validierungsdienst ausschalten? Dort wird nun angezeigt:
Die Eigenschaft overflow-y existiert nicht in CSS level 2.1, aber in : scroll scroll

Das sieht sehr unschön aus, wenn dort ein Fehler angezeigt wird.

Würde mich über einen hilfreichen Tipp sehr freuen.

L.G. Silke


Michael van Laar

Kommentar Nr. 8 · Thursday, 31. March 2011, 10:09 Uhr

@Silke: Da darfst du mich nicht fragen. Auf HTML-Validierung achte ich zwar. Aber weil man bei CSS immer mit haufenweise Hacks und Tricks arbeiten muss, achte ich übrhaupt nicht auf CSS-Validierung.


Johannes

Kommentar Nr. 9 · Thursday, 1. September 2011, 15:34 Uhr

Hallo,

Naja, die CSS Validierung kann meiner Meinung nach sehr sinnvoll sein z.B. wenn man ein Semikolon vergessen hat o. ä.
Bei browserspezifische Präfixe hört die Validierung jedoch auf. Zusätzlich lässt die Warnung "Die gleichen Farben für den Vordergrund und den Hintergrund in den zwei Kontexten " meinen Puls rasant ansteigen. Diese Warnung kommt selten alleine.
Meine Lösung den W3C Validator zu umgehen: einfach das Stylesheet vor dem Validiator verbergen.
Mehr dazu mehr auf meiner Webseite http://www.rocking-minds.org/blog/2011-08-31/the_w3c_css_validation_hack (Anleitung auf Englisch)

Ich hoffe ihr könnt etwas mit meinem kleinen "Hack" anfangen.
Gruß Johannes


Klaus Rascher

Kommentar Nr. 10 · Saturday, 10. December 2011, 13:34 Uhr

Maximalen Dank. Seeeeehr hilfreicher Hinweis.