Back

Absolute Werte in CSS mit abs()

Absolute Werte in CSS mit abs()

Sie haben eine CSS Custom Property, die je nach Kontext positiv oder negativ sein kann, und müssen sie an einer Stelle verwenden, die nur positive Werte akzeptiert – wie padding oder animation-delay. Vor abs() griffen Sie entweder auf JavaScript zurück oder schrieben einen umständlichen max()-Workaround. Jetzt können Sie das direkt in CSS handhaben.

Die wichtigsten Punkte

  • abs() ist eine CSS-Mathematikfunktion, die den absoluten (nicht-negativen) Wert eines numerischen Ausdrucks zurückgibt und dabei die ursprüngliche Einheit beibehält.
  • Sie akzeptiert Zahlen, Längenangaben, Prozentangaben, Winkel und jeden Ausdruck, der innerhalb von calc() gültig ist.
  • Häufige Anwendungsfälle sind das Bereinigen von Custom Properties für Eigenschaften, die negative Werte ablehnen, symmetrisches Animations-Timing und responsives Spacing.
  • Für ältere Browser verwenden Sie max(var(--x), calc(-1 * var(--x))) als Fallback.

Was ist die CSS-Funktion abs()?

abs() ist eine CSS-Mathematikfunktion aus der Spezifikation CSS Values and Units Module Level 4. Sie nimmt einen einzelnen numerischen Ausdruck entgegen und gibt dessen Absolutwert zurück – immer nicht-negativ, in derselben Einheit wie die Eingabe.

width: abs(-200px);         /* → 200px */
padding: abs(20px - 30px);  /* → 10px */
font-size: abs(-1.5rem);    /* → 1.5rem */

Sie funktioniert mit Zahlen, Längenangaben, Prozentangaben, Winkeln und jedem Ausdruck, den Sie innerhalb von calc() schreiben würden. Die Einheiten bleiben exakt erhalten.

Syntax und unterstützte Werttypen

abs( <calc-sum> )

Das Argument kann alles sein, was sich zu einem numerischen Wert auflöst:

abs(-4)                /* einfache Zahl → 4 */
abs(-8vh)              /* Längenangabe → 8vh */
abs(-60%)              /* Prozentangabe → 60% */
abs(20% - 60%)         /* Ausdruck → 40% */
abs(min(-20px, 10px))  /* verschachtelte Funktion → 20px */

Eine wichtige Klarstellung: abs() arbeitet mit dem mathematischen Ausdruck, den Sie angeben, aber Werte wie Prozentangaben werden später noch gemäß den normalen Regeln der Eigenschaft aufgelöst. Zum Beispiel wird abs(25%) in background-position anschließend noch durch die Größenberechnungsformel dieser Eigenschaft aufgelöst.

Praktische Anwendungsfälle

Verhindern ungültiger negativer Werte aus Custom Properties

Custom Properties können vorzeichenbehaftete Werte enthalten, die bestimmte CSS-Eigenschaften bei negativen Werten ungültig machen.

:root {
  --offset: -30px; /* kann positiv oder negativ sein */
}

/* ❌ Vorher: padding-top: -30px ist ungültig */
.card { padding-top: var(--offset); }

/* ✅ Nachher: löst sich immer zu 30px auf */
.card { padding-top: abs(var(--offset)); }

Dieses Muster ist besonders nützlich in Design-Systemen, wo Tokens programmatisch gesetzt werden können.

Stabilisierung von animation-delay in symmetrischen Animationen

Bei der Berechnung der Entfernung von einem Zentrumsindex kann die Subtraktion für Elemente vor dem Zentrum negativ werden. Ein negatives animation-delay verzögert nicht den Start – es bewirkt, dass die Animation mitten im Zyklus beginnt, was das symmetrische Wellen-Timing zerstört:

.bar {
  --distance: abs(var(--my-idx) - var(--center-idx));
  animation-delay: calc(var(--distance) * 0.1s);
}

Ohne abs() würden Balken links vom Zentrum ein negatives Delay erhalten und in der Animation vorspringen, anstatt auf ihren Einsatz zu warten.

Responsive Spacing-Berechnungen

.section {
  gap: abs(10vw - 4rem); /* immer ein positiver gap, unabhängig vom Viewport */
}

abs() vs. andere CSS-Mathematikfunktionen

FunktionWas sie machtBeispiel
abs()Gibt den nicht-negativen Wert zurückabs(-10px)10px
max()Gibt den größten von N Werten zurückmax(0px, var(--val))
clamp()Beschränkt auf einen Bereichclamp(1rem, 2vw, 3rem)
calc()Beliebige arithmetische Operationencalc(100% - 2rem)

Der max()-Workaround für absolute Werte – max(var(--x), calc(-1 * var(--x))) – funktioniert, ist aber umständlich. Verwenden Sie ihn nur, wenn Sie ältere Browser ohne abs()-Unterstützung ansprechen müssen.

Browser-Unterstützung und Fallbacks

abs() wird in modernen Browsern unterstützt, einschließlich aktueller Versionen von Chrome, Edge, Firefox und Safari. Die Unterstützung ist in aktuellen Browser-Releases solide, aber ältere Versionen unterstützen die Funktion möglicherweise nicht. Prüfen Sie Can I Use — abs() für aktuelle Kompatibilitätsdaten.

Für Progressive Enhancement:

@supports not (width: abs(-10px)) {
  .element {
    padding: max(var(--val), calc(-1 * var(--val)));
  }
}

Häufige Fallstricke

abs() funktioniert nicht mit CSS-Schlüsselwörtern:

width: abs(auto);     /* ❌ ungültig — auto ist kein numerischer Ausdruck */

calc() innerhalb von abs() zu verschachteln ist redundant:

width: abs(calc(50% - 100px)); /* ⚠️ funktioniert, aber unnötig */
width: abs(50% - 100px);       /* ✅ sauberer */

abs() ist nicht dasselbe wie die eingebaute abs()-Funktion von Sass – Sass löst sie zur Compile-Zeit mit einheitenlosen Zahlen auf, während CSS-abs() im Browser während des Layouts läuft und Dimensionen korrekt verarbeitet. Wenn Sie beides verwenden, beachten Sie, dass Sass den Aufruf abfangen kann. Um ihn an CSS weiterzugeben, können Sie abs(#{...}) schreiben oder explizit die Namensraum-Form math.abs() für die Sass-Version verwenden.

Fazit

abs() füllt eine echte Lücke in der CSS-Mathematik: Sie können sicher mit vorzeichenbehafteten Werten arbeiten, ohne JavaScript oder umständliche Workarounds. Wenn Sie Komponenten entwickeln, die Custom Properties für Spacing, Timing oder Layout-Berechnungen verwenden, lohnt es sich, die Funktion jetzt in Ihr Toolkit aufzunehmen, da die Browser-Unterstützung in modernen Engines solide ist.

FAQs

Ja. Wenn Ihre Custom Property eine einheitenlose Zahl enthält, gibt abs() deren nicht-negatives Äquivalent als einheitenlose Zahl zurück. Sie können das Ergebnis dann innerhalb von calc() mit einer Einheit multiplizieren, zum Beispiel calc(abs(var(--value)) * 1px), um eine Längenangabe zu erzeugen.

abs(0) gibt 0 zurück. Das ist vollkommen gültig und verursacht keine Probleme. Die Funktion bestätigt einfach, dass der Wert nicht-negativ ist, und null erfüllt diese Bedingung bereits.

Ja. CSS-Mathematikfunktionen einschließlich abs() können in modernen Media Queries und Container Queries verwendet werden, solange sich der Ausdruck zu einem gültigen Wert auflöst. Zum Beispiel ist @media (min-width: abs(600px)) gültiges CSS in aktuellen Browsern.

Sass hat eine eigene abs()-Funktion, die zur Compile-Zeit mit einheitenlosen Zahlen arbeitet. Um sicherzustellen, dass der Aufruf an natives CSS weitergegeben wird, umschließen Sie das Argument mit Interpolationssyntax wie abs(#{50% - 100px}), oder verwenden Sie die Namensraum-Variante math.abs() für Sass-spezifische Aufrufe, sodass das einfache abs() für den Browser übrig bleibt.

Complete picture for complete understanding

Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.

Check our GitHub repo and join the thousands of developers in our community.

OpenReplay