Signatur
Beschreibung
CSSScale gehört zur CSS Typed Object Model API (Houdini) und steht für eine einzelne Skalierungsfunktion innerhalb eines transform-Werts. Die Schnittstelle erbt von CSSTransformComponent und ist meist ein Element eines CSSTransformValue, also der typisierten Liste aller Transformationsfunktionen eines Elements.
Ein CSSScale-Objekt hat die Eigenschaften x, y und z. Sie enthalten die Skalierungsfaktoren als CSSNumericValue (typischerweise CSSUnitValue mit der Einheit number). Über die geerbte Eigenschaft is2D sieht man, ob das Objekt als scale() (2D) oder als scale3d() (3D) ausgegeben wird. Die geerbten Methoden toMatrix() und toString() liefern die zugehörige DOMMatrix bzw. die CSS-Schreibweise.
Gebraucht wird CSSScale vor allem dann, wenn Transformationen per JavaScript ohne String-Verkettung gebaut oder ausgewertet werden sollen, etwa bei Animationen, Zoom-Reglern oder Editoren. Statt el.style.transform = `scale(${f})` zu schreiben, setzt man ein typisiertes Objekt über element.attributeStyleMap.set(). Das vermeidet Fehler beim Parsen und macht Werte direkt veränderbar.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $x Pflicht | number | CSSNumericValue | Skalierungsfaktor entlang der X-Achse. Muss eine einheitenlose Zahl sein, z. B. 2 oder CSS.number(2). |
|
| $y Pflicht | number | CSSNumericValue | Skalierungsfaktor entlang der Y-Achse, ebenfalls einheitenlos. | |
| $z | number | CSSNumericValue | 1 (dann ist is2D = true) | Optionaler Skalierungsfaktor entlang der Z-Achse. Wird er angegeben, ist das Objekt eine scale3d()-Funktion und is2D ist false. |
Rückgabewert
new CSSScale(x, y, z) gibt ein neues CSSScale-Objekt mit den Eigenschaften x, y, z und is2D zurück.Beispiele
Objekt erzeugen und serialisieren
// 2D-Skalierung
const s2d = new CSSScale(2, 0.5);
console.log(s2d.toString());
console.log(s2d.is2D);
// 3D-Skalierung mit z-Faktor
const s3d = new CSSScale(1.5, 1.5, 2);
console.log(s3d.toString());
console.log(s3d.is2D);
console.log(s3d.x.value, s3d.x.unit);
Transformation typisiert auf ein Element setzen
const box = document.querySelector('.box');
const transform = new CSSTransformValue([
new CSSTranslate(CSS.px(20), CSS.px(0)),
new CSSScale(1.2, 1.2)
]);
box.attributeStyleMap.set('transform', transform);
console.log(box.style.transform);
Zoom-Regler: vorhandenen Scale-Wert auslesen und ändern
const img = document.querySelector('#bild');
const slider = document.querySelector('#zoom');
img.attributeStyleMap.set('transform', new CSSTransformValue([new CSSScale(1, 1)]));
slider.addEventListener('input', () => {
const value = img.attributeStyleMap.get('transform');
// Die erste CSSScale-Komponente suchen
const scale = [...value].find((c) => c instanceof CSSScale);
if (scale) {
const factor = Number(slider.value);
scale.x = CSS.number(factor);
scale.y = CSS.number(factor);
img.attributeStyleMap.set('transform', value);
}
});
Matrix aus einer Skalierung berechnen
const scale = new CSSScale(2, 3);
const m = scale.toMatrix();
console.log(m.a, m.d, m.is2D);
// Wichtig · Fallstricke
- Browser-Unterstützung: Die CSS Typed OM wird in Chromium-Browsern (Chrome, Edge, Opera ab Version 66) und in Safari ab 16.4 unterstützt, in Firefox nicht. Prüfen Sie das vorher, z. B. mit
if ('CSSScale' in window), und schreiben Sie sonst den String überelement.style.transform. - Die Faktoren müssen einheitenlos sein.
new CSSScale(CSS.px(2), 1)löst einenTypeErroraus. Prozentwerte wiescale(150%)werden ebenfalls nicht alsCSSUnitValuemit%akzeptiert. CSSScalesteht für die Funktionscale()innerhalb vontransform, nicht für die eigenständige CSS-Eigenschaftscale. Die wird in der Typed OM derzeit oft nur alsCSSStyleValuegeliefert.- Wenn Sie
x,yoderzändern, passiert am Element nichts, solange Sie denCSSTransformValuenicht erneut mitattributeStyleMap.set()zuweisen. - Wenn Sie
is2Dauftruesetzen, wirdzbeim Serialisieren und intoMatrix()ignoriert. Der Wert bleibt aber im Objekt gespeichert.