mitmario.dev

CSS-Grundlagen · 10 von 11

CSS Funktionen

Du hast im letzten Artikel gelernt, wie Custom Properties Werte zentral speichern. Aber was, wenn du Werte nicht nur speichern, sondern berechnen willst? Zum Beispiel “volle Breite minus 200 Pixel für die Sidebar”? Genau dafür gibt es CSS-Funktionen. Sie erlauben dir, direkt in CSS zu rechnen, Grenzen zu setzen und Werte dynamisch anzupassen.

Steckbrief Grundlagen
Reihe
CSS-Grundlagen
Teil
10 von 11
Kapitel
7
Vorschauen
8
Lesezeit
5 Min
Stand
10.02.2026

calc(): Rechenoperationen in CSS

01 / 07

calc() ist die Basis-Funktion für Berechnungen. Du kannst addieren, subtrahieren, multiplizieren und dividieren, und das Beste: Du kannst verschiedene Einheiten mischen.

Einheiten mischen mit calc()
.sidebar {
  width: 200px;
}

.content {
  width: calc(100% - 200px - 16px);
}

Die Content-Spalte nimmt die volle Breite, minus die feste Sidebar-Breite und den Gap. Das wäre mit einer einzigen Einheit nicht möglich.

Rechenregeln

calc() unterstützt vier Operatoren:

Die vier Operatoren
.add { width: calc(100px + 50px); }
.sub { width: calc(100% - 40px); }
.mul { width: calc(20px * 3); }
.div { width: calc(100% / 3); }

Wichtig: Bei + und - brauchst du Leerzeichen um den Operator. calc(100%-40px) funktioniert nicht, calc(100% - 40px) schon. Bei * und / sind Leerzeichen optional, aber empfohlen.

calc() mit Custom Properties

calc() und Custom Properties ergänzen sich perfekt:

calc() mit Custom Properties
:root {
  --sidebar-breite: 200px;
  --abstand: 16px;
}

.main {
  width: calc(100% - var(--sidebar-breite) - var(--abstand));
}

Änderst du --sidebar-breite, passt sich die Content-Breite automatisch an. Das ist deutlich wartbarer als feste Werte in der calc()-Formel.

min() und max()

02 / 07

min() gibt den kleinsten Wert zurück, max() den größten. Beide akzeptieren beliebig viele Werte, getrennt durch Kommas.

min() und max()
/* Nimmt den kleineren Wert */
.box-min {
  width: min(100%, 400px);
  /* Wie max-width: 400px, aber flexibler */
}

/* Nimmt den größeren Wert */
.box-max {
  width: max(50%, 200px);
  /* Wie min-width: 200px, aber flexibler */
}

min(100%, 400px) verhält sich wie eine flexible Breite mit eingebautem Maximum: Auf schmalen Bildschirmen ist 100% kleiner und wird genommen, auf breiten Bildschirmen greift die 400px-Grenze. Das ersetzt in vielen Fällen max-width.

clamp(): Wert mit Ober- und Untergrenze

03 / 07

clamp() kombiniert min() und max() in einer einzigen Funktion. Sie akzeptiert drei Werte: Minimum, bevorzugter Wert und Maximum.

Fluid Typography mit clamp()
.fluid-text {
  font-size: clamp(16px, 4vw, 32px);
  /*              min   ideal  max   */
}

Die Schriftgröße ist mindestens 16px und maximal 32px. Dazwischen skaliert sie mit 4vw (4% der Viewport-Breite). Auf einem 1000px breiten Bildschirm wären das 40px, aber clamp begrenzt auf 32px.

clamp() für flexible Breiten

Flexible Container-Breite
.container {
  width: clamp(300px, 80%, 900px);
  margin: 0 auto;
}

/* Gleichbedeutend mit: */
.container-alternative {
  width: 80%;
  min-width: 300px;
  max-width: 900px;
}

clamp(300px, 80%, 900px) ist kürzer als die Alternative mit drei separaten Eigenschaften und macht in einer Zeile klar: Der Container ist 80% breit, aber nie schmaler als 300px und nie breiter als 900px.

url(): Ressourcen referenzieren

04 / 07

url() ist keine Rechen-Funktion, aber eine der am häufigsten verwendeten CSS-Funktionen. Sie referenziert externe Ressourcen wie Bilder.

url() für Hintergrundbilder
.element {
  background-image: url("bild.jpg");
}

/* Auch für andere Ressourcen: */
.cursor {
  cursor: url("zeiger.png"), auto;
}

url() funktioniert überall dort, wo CSS eine externe Ressource erwartet: background-image, list-style-image, cursor, @font-face und mehr.

Funktionen kombinieren

05 / 07

Die wahre Stärke der CSS-Funktionen zeigt sich, wenn du sie kombinierst:

Verschachtelte Funktionen
:root {
  --base-size: 1rem;
  --scale: 1.25;
}

/* calc() in clamp() mit var() */
.heading {
  font-size: clamp(
    1rem,
    calc(var(--base-size) * var(--scale) + 1vw),
    2.5rem
  );
}

/* calc() in min() */
.section {
  padding: min(calc(2 * var(--base-size)), 5vw);
}

var() in calc() in clamp(): Die Schriftgröße basiert auf Custom Properties, wird dynamisch berechnet und hat feste Grenzen. Das klingt komplex, aber jede Funktion hat eine klare Aufgabe: var() liefert den Wert, calc() rechnet, clamp() begrenzt.

Häufige Fehler

06 / 07
01 Fehlende Leerzeichen in calc()
calc(100%-20px) ist ungültig. Schreibe calc(100% - 20px) mit Leerzeichen um + und -.
02 Division durch eine Einheit
calc(100px / 2px) funktioniert nicht. Bei Division muss der Divisor eine reine Zahl sein: calc(100px / 2).
03 clamp() mit vertauschten Werten
clamp(max, ideal, min) ist falsch. Die Reihenfolge ist immer Minimum, bevorzugter Wert, Maximum.
04 calc() für einfache Werte verwenden
calc(20px) ist sinnlos und weniger lesbar als 20px. Nutze calc() nur, wenn du tatsächlich rechnest oder Einheiten mischst.
05 min() und max() verwechseln
min() setzt eine Obergrenze (wird nie größer als der kleinste Wert). max() setzt eine Untergrenze (wird nie kleiner als der größte Wert). Die Namen sind aus Sicht des Ergebnisses zu verstehen, nicht aus Sicht der Grenze.

Zusammenfassung

07 / 07
FunktionSyntaxTypischer Einsatz
calc()calc(100% - 200px)Einheiten mischen, Berechnungen
min()min(100%, 400px)Obergrenze setzen (nie größer als)
max()max(50%, 200px)Untergrenze setzen (nie kleiner als)
clamp()clamp(16px, 4vw, 32px)Wert mit Min und Max begrenzen
url()url("bild.jpg")Externe Ressourcen referenzieren
var()var(--name, fallback)Custom Properties abrufen
Kombinierenclamp(1rem, calc(...), 3rem)Verschachtelte Funktionen

Du kannst jetzt direkt in CSS rechnen, Werte begrenzen und Funktionen kombinieren. Im nächsten Artikel geht es um Responsives Design: Wie du mit Media Queries, Mobile-First und den Einheiten und Funktionen aus den letzten Artikeln Layouts baust, die auf jedem Bildschirm funktionieren.

Newsletter

einmal die Woche, kostenlos

Neue Artikel und Videos, was sich auf der Lernplattform tut, und ab und zu ein Sonderpreis zum Kursstart. Kurz genug, dass du es auch liest.

Zuletzt verschickt · KW 40

Einmal alles neu, und die Lernplattform ist da

Danach kommt eine Mail mit Bestätigungslink, erst dann bist du eingetragen. Abmelden geht unten in jeder Ausgabe. Mehr dazu in der Datenschutzerklärung.