Sanfte Übergänge in CSS – Hover-Effekte mit transition statt harter Sprünge
Ein guter Hover-Effekt springt nicht, er gleitet. Mit transition animierst du Farbe, Größe und Schatten weich – in einer Zeile. Ich zeige das Muster, warum du niemals transition: all nimmst und wie du Nutzer mit Bewegungsempfindlichkeit respektierst.
Ein Button, der beim Überfahren einfach die Farbe wechselt, wirkt hart. Derselbe Button mit einem weichen Übergang wirkt sofort hochwertiger – und das kostet eine Zeile CSS.
Das Grundmuster
.btn {
background: #2563eb;
transform: translateY(0);
box-shadow: 0 2px 6px rgb(0 0 0 / 0.15);
transition: background 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
}
.btn:hover {
background: #1d4ed8;
transform: translateY(-2px); /* hebt sich leicht an */
box-shadow: 0 6px 16px rgb(0 0 0 / 0.25); /* Schatten wird größer */
}transition gehört auf den Normalzustand, nicht auf :hover – so gleitet der Effekt in beide Richtungen (rein und wieder raus). Die drei Werte je Eigenschaft sind: *was*, *wie lange*, *mit welcher Kurve*.
Nimm nie transition: all
transition: all 0.2s ease; /* ⚠️ animiert versehentlich ALLES */all sieht bequem aus, animiert aber auch Eigenschaften, die du gar nicht meinst – das kostet Performance und kann ruckeln. Zähl lieber die zwei, drei Eigenschaften auf, die du wirklich änderst. Am flüssigsten laufen dabei transform und opacity, weil der Browser sie besonders effizient rendert.
Nutzer mit Bewegungsempfindlichkeit respektieren
Manche Menschen reagieren empfindlich auf Bewegung. Ein kurzer Media-Query schaltet Animationen für sie ab:
@media (prefers-reduced-motion: reduce) {
.btn { transition: none; }
}Das ist gute Praxis und in vielen Kontexten sogar Teil der Barrierefreiheit.
Weiche Übergänge sind der günstigste Weg, eine Seite „teurer" wirken zu lassen. Mehr HTML- & CSS-Snippets gibt's auf code.bymw.de.
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
Container Queries – Komponenten, die auf ihren Platz reagieren, nicht auf den Bildschirm
Media Queries fragen die Bildschirmbreite ab. Container Queries fragen, wie breit der Container einer Komponente gerade ist – so passt sich eine Karte in der Sidebar anders an als dieselbe Karte im Hauptbereich. Endlich wirklich wiederverwendbare Bausteine.
position: sticky – ein Header, der beim Scrollen oben kleben bleibt
Für einen mitfahrenden Header brauchst du kein JavaScript. Zwei CSS-Zeilen genügen mit position: sticky. Ich zeige das Muster, erkläre die eine Voraussetzung, die oft vergessen wird, und den häufigsten Grund, warum es „nicht klebt".
CSS-Variablen und Dark Mode – ein Theme, das sich selbst umschaltet
Mit CSS Custom Properties definierst du Farben an einer Stelle und nutzt sie überall. Der Clou: Für den Dark Mode überschreibst du nur die Variablen – nicht jede einzelne Regel. Ich zeige beides, inklusive automatischer System-Erkennung.