CSS-Berechnungen, Transformationen und Übergänge
April 2, 2017
Moderne CSS-Layouts basieren oft auf dynamischen Berechnungen und flüssigen, interaktiven Übergängen. Die Kombination aus der calc()-Funktion für mathematische Berechnungen, transform für GPU-beschleunigte visuelle Manipulationen und transition für weiche Zustandsänderungen ermöglicht die Erstellung hochentwickelter Benutzeroberflächen ohne Performance-Einbußen.
1. Dynamische Berechnungen mit calc()
Die calc()-Funktion ermöglicht es, mathematische Berechnungen direkt im CSS-Code durchzuführen. Der größte Vorteil ist die Möglichkeit, unterschiedliche Einheiten (z.B. Prozent und Pixel) miteinander zu kombinieren.
Einheitenübergreifende Berechnungen
/* Erstellt einen Container, der sich über die gesamte Bildschirmbreite (100vw) erstreckt,
abzüglich eines festen Abstands von 80px */
.container {
width: calc(100vw - 80px);
}
/* Berechnet die Breite für ein 6-spaltiges Raster */
.grid-item {
width: calc(100% / 6);
}
Einheiten-Konvertierung in Sass
In Sass können mathematische Operationen verwendet werden, um Pixelwerte dynamisch in relative Einheiten wie em oder rem umzurechnen.
// Formel: (Pixelwert / Basisgröße) * 1em
// Die Multiplikation mit 1em konvertiert die Zahl in eine em-Einheit
$base-font-size: 16px;
.card {
padding: (40px / $base-font-size) * 1em; /* Entspricht 2.5em */
}
2. Visuelle Manipulationen mit transform
Die transform-Eigenschaft verändert die visuelle Darstellung eines Elements (z.B. Größe, Position, Drehung), ohne dass der Browser das Layout der Seite neu berechnen muss. Dies macht Transformationen extrem performant (Hardware-beschleunigt).
Gängige Transformations-Funktionen
scale()(Skalieren): Vergrößert oder verkleinert ein Element.code.box:hover { transform: scale(1.15); /* Vergrößert um 15% */ }translate()(Verschieben): Verschiebt ein Element entlang der X- und Y-Achse.code.box { transform: translate(15px, -10px); /* 15px nach rechts, 10px nach oben */ }rotate()(Drehen): Dreht ein Element um einen bestimmten Winkel.code.icon-rotate { transform: rotate(45deg); /* Dreht um 45 Grad im Uhrzeigersinn */ }skew()(Scheren): Verzerrt ein Element entlang der Achsen.code.banner { transform: skew(10deg, 0deg); }
Praxis-Tipp: Perfekte Zentrierung mit translate
Ein klassischer Anwendungsfall für absolut positionierte Elemente ist die vertikale und horizontale Zentrierung relativ zum Eltern-Element.
.parent-container {
position: relative;
}
.centered-child {
position: absolute;
top: 50%;
left: 50%;
/* Verschiebt das Element um die Hälfte seiner eigenen Breite und Höhe nach oben links */
transform: translate(-50%, -50%);
}
3. Weiche Übergänge mit transition
Mit der transition-Eigenschaft werden Änderungen von CSS-Eigenschaften (z.B. bei :hover oder nach dem Hinzufügen einer Klasse per JavaScript) über einen definierten Zeitraum weich animiert, anstatt abrupt zu wechseln.
Grundlegendes Beispiel
.button {
background-color: #007bff;
/* Animiert die Hintergrundfarbe über 200 Millisekunden mit einer ease-Kurve */
transition: background-color 200ms ease;
}
.button:hover {
background-color: #0056b3;
}
Syntax der Kurzschreibweise
/* transition: <property> <duration> <timing-function> <delay>; */
transition: transform 300ms ease-in-out 100ms;
Mehrere Eigenschaften gleichzeitig animieren
Sie können verschiedene Eigenschaften mit unterschiedlichen Zeiten animieren, indem Sie sie durch ein Komma trennen.
.card {
opacity: 0.8;
transform: translateY(0);
transition:
opacity 250ms ease,
transform 300ms cubic-bezier(0.25, 0.8, 0.25, 1);
}
.card:hover {
opacity: 1;
transform: translateY(-5px);
}
Performance-Tipp: Nur "günstige" Eigenschaften animieren
Um Ruckeln und hohen Akkuverbrauch (insbesondere auf Mobilgeräten) zu vermeiden, sollten Sie nach Möglichkeit nur Eigenschaften animieren, die direkt von der GPU verarbeitet werden können:
transform(für Position, Skalierung, Drehung)opacity(für Transparenz)
Vermeiden Sie Animationen von Eigenschaften wie width, height, margin oder top, da diese bei jeder Änderung eine vollständige Neuberechnung des Seitenlayouts (Layout und Paint) im Browser erzwingen.
Fazit
Die Kombination aus calc(), transform und transition ermöglicht die Erstellung dynamischer, reaktionsschneller und flüssiger Benutzeroberflächen. Durch die Auslagerung von Transformationen auf die GPU und die Beschränkung von Übergängen auf performante Eigenschaften wie transform und opacity stellen Sie sicher, dass Ihre Animationen auch auf mobilen Endgeräten mit 60 FPS (oder mehr) laufen.