--variable)CSS Custom Properties, auch bekannt als CSS-Variablen, bieten eine
flexible Möglichkeit, wiederverwendbare Werte in einem Stylesheet zu
definieren. Sie ermöglichen es, einheitliche Stile zu erstellen und
zentralisierte Änderungen vorzunehmen, ohne mehrfach im Code Anpassungen
vornehmen zu müssen. Custom Properties beginnen mit zwei Bindestrichen
(--) und werden direkt im CSS-Code definiert und
verwendet.
CSS Custom Properties können in jedem Selektor definiert und
verwendet werden. Üblicherweise werden sie im
:root-Pseudo-Selektor definiert, um sie auf globaler Ebene
bereitzustellen.
:root {
--main-color: #3498db;
--secondary-color: #2ecc71;
--font-size: 16px;
}Hier werden drei Variablen global definiert:
--main-color: die Hauptfarbe.--secondary-color: die Sekundärfarbe.--font-size: die Standard-Schriftgröße.CSS-Variablen werden mit der Funktion var() aufgerufen.
Innerhalb der var()-Funktion kann auch ein optionaler
Fallback-Wert angegeben werden, der verwendet wird, falls die Variable
nicht definiert ist.
button {
background-color: var(--main-color);
color: #fff;
font-size: var(--font-size, 14px); /* Fallback-Wert von 14px, falls --font-size nicht definiert ist */
}In diesem Beispiel wird die Hintergrundfarbe des Buttons auf den Wert
von --main-color gesetzt. Falls --font-size
nicht verfügbar ist, wird 14px als Fallback-Schriftgröße verwendet.
CSS Custom Properties lassen sich mit JavaScript dynamisch ändern, was besonders nützlich ist, um Designanpassungen wie Themes oder Benutzereinstellungen umzusetzen.
<button onclick="switchTheme()">Wechsel Theme</button>:root {
--background-color: #ffffff;
--text-color: #333333;
}
body {
background-color: var(--background-color);
color: var(--text-color);
}function switchTheme() {
document.documentElement.style.setProperty('--background-color', '#333333');
document.documentElement.style.setProperty('--text-color', '#ffffff');
}Mit diesem Beispiel ändert der
switchTheme()-Funktionsaufruf die Farben der Custom
Properties dynamisch, sodass der Hintergrund und die Textfarbe des
gesamten Dokuments angepasst werden.
CSS Custom Properties werden vererbt und können in anderen Selektoren überschrieben werden, was flexible Anpassungen für spezifische Komponenten ermöglicht.
:root {
--main-color: #3498db;
}
.section {
--main-color: #e74c3c; /* Überschreibt die globale Variable innerhalb dieses Elements */
color: var(--main-color);
}In diesem Beispiel wird --main-color in
.section lokal überschrieben und erscheint in diesem
Kontext in Rot, während es im restlichen Dokument Blau bleibt.
Custom Properties können zusammen mit CSS-Funktionen wie
calc(), min(), und max()
verwendet werden, um berechnete Werte dynamisch anzupassen.
:root {
--spacing: 10px;
--padding: calc(2 * var(--spacing));
}
.container {
padding: var(--padding); /* Ergibt 20px, basierend auf der Berechnung */
}Hier wird --padding als das Doppelte von
--spacing berechnet und liefert so eine dynamische Lösung
für Abstandswerte.
calc(), min(), max(),
clamp())CSS bietet mehrere mathematische Funktionen, die es ermöglichen,
dynamische und flexible Werte für CSS-Eigenschaften festzulegen. Mit
Funktionen wie calc(), min(),
max() und clamp() lassen sich Berechnungen
direkt im CSS-Code durchführen, wodurch Layouts noch besser an
unterschiedliche Bildschirmgrößen und Anforderungen angepasst werden
können.
calc()Die calc()-Funktion führt Berechnungen mit verschiedenen
Einheiten durch und eignet sich besonders für responsive Designs, die
flexible Maße benötigen. Mit calc() lassen sich Werte für
Breite, Höhe, Abstände und mehr dynamisch berechnen.
.element {
width: calc(100% - 50px);
padding: calc(1rem + 5px);
}+,
-, *, / (nur im Zusammenspiel mit
festen Werten).calc()calc() ermöglicht
die Kombination von Prozenten und festen Werten, um Layouts zu
gestalten, die sich an die Bildschirmgröße anpassen.calc()
ermöglichen das gleichmäßige Platzieren von Elementen in Containern mit
variabler Größe..container {
padding: calc(50% - 10px); /* Beispiel für eine zentrierte Positionierung */
}min()Die min()-Funktion gibt den kleineren Wert von zwei oder
mehr Werten zurück und wird verwendet, um sicherzustellen, dass eine
Eigenschaft nicht größer als ein bestimmter Wert ist.
.element {
width: min(100%, 600px);
}In diesem Beispiel passt sich die Breite des Elements dynamisch an: sie ist 100% des Containers, aber nicht breiter als 600px.
min()min() ist
nützlich, um responsive Grenzen zu setzen, z. B. ein Layout, das nicht
breiter als ein bestimmter Wert wird.min() eignet
sich auch für flexible Schriftgrößen, die auf großen Bildschirmen eine
maximale Grenze haben..title {
font-size: min(5vw, 30px);
}Hier wird die Schriftgröße dynamisch auf 5% der Viewport-Breite angepasst, aber sie überschreitet niemals 30px.
max()Die max()-Funktion gibt den größeren Wert von zwei oder
mehr Werten zurück und wird verwendet, um sicherzustellen, dass eine
Eigenschaft einen Mindestwert erreicht.
.element {
height: max(50vh, 300px);
}In diesem Beispiel beträgt die Höhe des Elements mindestens 300px, wächst jedoch auf 50% der Viewport-Höhe, wenn mehr Platz verfügbar ist.
max()max() stellt sicher, dass Elemente immer eine bestimmte
Mindestgröße haben, unabhängig von der Größe des Containers..paragraph {
font-size: max(1rem, 2vw);
}Hier bleibt die Schriftgröße mindestens bei 1rem, aber wächst auf bis zu 2vw, wenn genügend Platz vorhanden ist.
clamp()Die clamp()-Funktion bietet eine Kombination aus
minimalem, bevorzugtem und maximalem Wert und ist ideal für responsive
Designs. Die Syntax lautet: clamp(min, preferred, max).
.element {
font-size: clamp(1rem, 2vw + 1rem, 2.5rem);
}In diesem Beispiel hat die Schriftgröße einen Mindestwert von 1rem und einen Maximalwert von 2.5rem, skaliert aber flexibel auf 2vw + 1rem dazwischen.
clamp()clamp()
erlaubt es, Schriftgrößen an den Viewport anzupassen, ohne dass sie zu
klein oder zu groß werden.clamp() lassen
sich responsive Abstände definieren, die den verfügbaren Platz optimal
nutzen..container {
padding: clamp(10px, 2vw, 30px);
}Hier beträgt der Padding-Wert mindestens 10px und höchstens 30px, skaliert jedoch dynamisch auf 2vw dazwischen.