Signatur
Beschreibung
Mit div() teilen Sie einen Wert aus dem CSS Typed Object Model durch andere Werte, ohne Zeichenketten zusammensetzen oder parsen zu müssen. Der Ausgangswert bleibt dabei unverändert. Sie erhalten immer ein neues Objekt zurück.
Übergeben Sie reine Zahlen (etwa CSS.px(300).div(2)), vereinfacht der Browser das Ergebnis sofort zu einem CSSUnitValue (hier 150px). Lässt sich die Division nicht direkt ausrechnen, zum Beispiel beim Teilen durch einen Wert mit Einheit (CSS.px(10).div(CSS.px(2))), entsteht ein CSSMathProduct mit einem CSSMathInvert. Dieser Ausdruck wird als calc() ausgegeben.
Typische Einsatzfälle sind Berechnungen in JavaScript-gesteuerten Layouts und Animationen oder in CSS Houdini (Paint Worklets, Layout Worklets). Dort liest man Werte über computedStyleMap() aus, rechnet mit ihnen und schreibt sie typsicher über attributeStyleMap.set() zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $...values Pflicht | number | CSSNumericValue | Ein oder mehrere Teiler. Reine Zahlen werden intern als CSS.number(n) behandelt. Nacheinander wird durch jeden Wert geteilt: a.div(b, c) entspricht a / b / c. |
Rückgabewert
CSSNumericValue. Wenn das Ergebnis direkt ausgerechnet werden kann, ist es ein CSSUnitValue, sonst ein CSSMathProduct.Beispiele
Einfache Division durch eine Zahl
const breite = CSS.px(300);
const haelfte = breite.div(2);
console.log(haelfte.value, haelfte.unit);
console.log(haelfte.toString());
console.log(breite.toString()); // Original bleibt unverändert
Mehrere Teiler nacheinander
const spalte = CSS.vw(90).div(3, 2); // 90 / 3 / 2
console.log(spalte.toString());
Berechnete Breite eines Elements halbieren
const box = document.querySelector('.box');
const breite = box.computedStyleMap().get('width'); // z. B. CSSUnitValue 400px
box.attributeStyleMap.set('width', breite.div(2));
console.log(box.attributeStyleMap.get('width').toString());
Division durch Werte mit Einheit und durch 0
const ergebnis = CSS.px(10).div(CSS.px(2));
console.log(ergebnis instanceof CSSMathProduct);
console.log(ergebnis.toString());
try {
CSS.px(10).div(0);
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- Division durch 0: Ist ein Teiler der Zahlenwert
0(ohne Einheit), wirftdiv()einenRangeError. - Ungültige Argumente: Zeichenketten wie
'2px'werden nicht akzeptiert und lösen einenTypeErroraus. Nutzen Sie stattdessenCSS.px(2)oderCSSNumericValue.parse('2px'). - Ergebnistyp prüfen: Nicht jedes Ergebnis ist ein
CSSUnitValue. Nur dieser Typ hat die Eigenschaften.valueund.unit. Prüfen Sie den Typ vorher mitinstanceof CSSUnitValue. - Keine Umrechnung:
div()rechnet keine Einheiten um. Soll eine bestimmte Einheit herauskommen, nutzen Sie danachto()bzw.toSum(). Das funktioniert nur bei kompatiblen Einheiten. - Browser-Unterstützung: CSS Typed OM gibt es in Chromium-Browsern (ab Version 66) und in Safari ab 16.4, aber nicht in Firefox. Prüfen Sie die Unterstützung vorher, z. B. mit
if ('CSSNumericValue' in window).