Start · Sprachen · JavaScript · Referenz · CSSMathMin

CSSMathMin

Schnittstelle

Stellt im CSS Typed Object Model die CSS-Funktion <code>min()</code> als Objekt dar, also den kleinsten von mehreren numerischen Werten.

seit JavaScript Chrome/Edge 66+, Safari 16.4+; Firefox: nicht unte Kategorie: webapi

Signatur

interface CSSMathMin extends CSSMathValue

Beschreibung

Die Schnittstelle CSSMathMin gehört zum CSS Typed Object Model (Houdini) und bildet einen CSS-Ausdruck wie min(300px, 50vw) als typisiertes Objekt ab. Sie erbt von CSSMathValue und damit von CSSNumericValue und CSSStyleValue. Die Eigenschaft operator hat bei ihr immer den Wert "min".

Die Argumente der Funktion stehen in der schreibgeschützten Eigenschaft values, einem CSSNumericArray. Darüber kannst du iterieren und jedes Element einzeln auswerten, statt einen CSS-String selbst zu zerlegen. Ausgewertet wird der Ausdruck nicht in JavaScript, sondern erst vom Browser beim Layout, weil Einheiten wie % oder vw nur im jeweiligen Kontext aufgelöst werden können.

Ein CSSMathMin-Objekt erhältst du auf drei Wegen:

  • über den Konstruktor new CSSMathMin(...values),
  • über CSSNumericValue.prototype.min(), wenn sich die Einheiten nicht direkt vergleichen lassen,
  • beim Auslesen einer Eigenschaft mit element.attributeStyleMap.get(), wenn dort eine min()-Funktion steht.

Mit attributeStyleMap.set() kannst du das Objekt direkt als Stilwert setzen. Das erspart dir das fehleranfällige Zusammensetzen von Strings.

Parameter

Name Typ Default Beschreibung
$...values Pflicht CSSNumberish (number | CSSNumericValue) Ein oder mehrere numerische Werte, z. B. CSS.px(100) oder CSS.vw(50). Einfache Zahlen werden als einheitenlose Werte (number) behandelt. Alle Werte müssen zueinander passen, z. B. alle Längen.

Rückgabewert

Typ
CSSMathMin
Beschreibung
Ein neues CSSMathMin-Objekt mit operator === "min" und den übergebenen Argumenten in values (CSSNumericArray).

Beispiele

Instanz erzeugen und untersuchen

const breite = new CSSMathMin(CSS.px(600), CSS.vw(90));

console.log(breite.operator);        // Art der Rechenoperation
console.log(breite.values.length);   // Anzahl der Argumente
console.log(breite.toString());      // Serialisierung als CSS-Text
console.log(breite instanceof CSSMathValue);
min 2 min(600px, 90vw) true

Responsive Breite per attributeStyleMap setzen

const karte = document.querySelector('.karte');

// entspricht: width: min(400px, 100%)
karte.attributeStyleMap.set(
  'width',
  new CSSMathMin(CSS.px(400), CSS.percent(100))
);

console.log(karte.style.width);
min(400px, 100%)

min() über CSSNumericValue.prototype.min() erzeugen

// Gleiche Einheit: wird sofort ausgerechnet
const direkt = CSS.px(10).min(CSS.px(25));
console.log(direkt.toString(), direkt.constructor.name);

// Gemischte Einheiten: Ergebnis ist ein CSSMathMin
const gemischt = CSS.rem(2).min(CSS.vh(5), CSS.px(40));
console.log(gemischt.toString(), gemischt.constructor.name);
10px CSSUnitValue min(2rem, 5vh, 40px) CSSMathMin

Vorhandenen min()-Ausdruck auslesen und auswerten

const box = document.querySelector('.box');
box.style.padding = 'min(2rem, 5vw)';

const wert = box.attributeStyleMap.get('padding-top');

if (wert instanceof CSSMathMin) {
  for (const teil of wert.values) {
    console.log(`${teil.value} ${teil.unit}`);
  }
}
2 rem 5 vw

// Wichtig · Fallstricke

Browser-Unterstützung: Das CSS Typed OM gibt es in Chromium-Browsern (Chrome und Edge ab Version 66) und in Safari ab 16.4. Firefox unterstützt es nicht. Prüfe die Verfügbarkeit mit 'CSSMathMin' in window oder 'attributeStyleMap' in HTMLElement.prototype und setze sonst den CSS-String direkt, z. B. el.style.width = 'min(400px, 100%)'.

  • Fehler im Konstruktor: Ohne Argumente (new CSSMathMin()) wird ein SyntaxError geworfen. Passen die Typen nicht zusammen, z. B. CSS.px(1) mit CSS.s(1) oder eine Länge mit einer einheitenlosen Zahl, gibt es einen TypeError.
  • Keine Auswertung in JavaScript: CSSMathMin liefert kein berechnetes Ergebnis in Pixeln. Den tatsächlich berechneten Wert bekommst du über element.computedStyleMap().get(...) oder getComputedStyle().
  • Mögliche Vereinfachung: CSSNumericValue.prototype.min() gibt bei gleichen Einheiten direkt ein CSSUnitValue zurück, kein CSSMathMin. Prüfe deshalb mit instanceof, welcher Typ vorliegt.
  • values ist schreibgeschützt. Für andere Argumente erzeugst du ein neues Objekt.