CSS background-attachment: Mitscrollen oder fixieren?
Ohne weitere Angaben im CSS scrollen Hintergrundbilder mit dem Inhalt, wenn der Benutzer die Seite scrollt. background-attachment regelt, ob das Hintergrundbild beim Scollen mitscrollt oder auf den Viewport fixiert wird oder mit dem Inhalt des Elements scrollt.
fixed – im Browserfenster fixiert
background-attachment: fixed fixiert das Hintergrundbild an einer festen Position im Browserfenster und erweckt beim Scrollen den Anschein, die folgenden Inhalte würden über das Hintergrundbild geschoben. background: fixed ist die Basis für den Parallax-Effekt.
elem { background: url(flowers.png); }
Umschalten und ein Stück scrollen, um den Unterschied zu sehen.
- scroll (Voreinstellung)
- lässt das Hintergrundbild zusammen mit Text und Bildern scrollen.
- fixed
- hält das Hintergrundbild fest.
background-attachment: fixed ist mit einem hohen Aufwand für das Rendern und das Scrollen verbunden und die mobilen Browser sparen Energie an allen Ecken und Katen. Darum ist background: fixed auf vielen mobilen Geräten deaktiviert oder verhält sich nicht wie vorgesehen.
Besonders iOS (Safari auf dem iPad, iPhone) ist ausgesprochen sparsam beim Scrollen und setzt Javascript während des Scrollens aus.
Und mehr Klagen über background: fixed auf dem iPad: Mit background-size: cover wird das Hintergrundbild in Mobile Safari und Mobile Chrome zwar angezeigt, aber nur ein Bildauschnitt ist sichtbar und wirkt, als wäre er stark gezoomt. Daran hat sich auch in der aktuellen Version 17.2.1 (19617.1.17.11.12) nichts geändert.
Unter Android mit Chrome wirkt background-attachment: fixed, nicht mit dem Samsung-Browser.
.fixed {
background-image: url(rhein.jpg);
background-position: bottom center;
background-repeat: no-repeat;
background-size:cover;
background-attachment:fixed;
}
Wenn das Bild »zu kurz« ist
Das Bild im Absatz zuvor ist nahezu quadratisch. Wenn die Seite gescrollt wird, wird der Streifen oben und unten weiß – das Bild ist »zuende«. Das Problem ist typisch für background-attachment: fixed. Das Setup (quadratisches Bild und nur ein schmaler sichtbarer Streifen) verstärken es noch.
Die beste Lösung ist natürlich die Wahl eines größeren Bildes: Das Bild muss deutlich höher sein als der Viewport. Die Faustregel lautet: mindestens 2 bis 3 mal Viewport-Höhe.background-attachment: local – Hintergrund scrollt mit
Die Werte scroll und fixed gehen zurück auf CSS 2.1. scroll ist die Voreinstellung, bei der die Position des Hintergrunds relativ zum Element bleibt, für das es definiert ist. background-attachment: fixed ist relativ zum Viewport (aka Browserfenster), so dass der Hintergrund beim Scrollen fest steht. Wenn aber nur ein Teil der Seite scrollbar ist – z.B. ein Block mit overflow: scroll – scrollte der Hintergrund nicht mit, wenn der Block selber gescrollt wurde.
Mit background-attachment: local richtet sich der Hintergrund am Block aus:
- background-attachment: scoll
- Beim Scrollen der Seite scrollt der Hintergrund des Blocks mit, beim Scrollen des Overlays im Block bleibt der Hintergrund fest.
- background-attachment: local
- Beim Scrollen der Seite scrollt der Hintergrund des Blocks mit, beim Scrollen des Overlays im Block scrollt der Hintergrund mit.
Der Wechsel von scroll zu local zeigt, dass sich das Bezugssystem ändert – die Position des Hintergrundbilds richtet sich bei local am Block aus.