Signatur
Beschreibung
Die Eigenschaft x gehört zur Schnittstelle CSSTranslate aus dem CSS Typed Object Model (Houdini). Ein CSSTranslate-Objekt steht für die CSS-Funktionen translate(), translateX() oder translate3d() innerhalb eines transform-Werts. x gibt an, wie weit das Element horizontal verschoben wird.
Der Wert ist kein String wie "10px", sondern ein typisiertes CSSNumericValue-Objekt, z. B. ein CSSUnitValue (CSS.px(10)) oder ein CSSMathValue (calc()-Ausdruck). Deshalb kann man mit dem Wert rechnen, ohne Strings zu zerlegen. Das lohnt sich vor allem bei Animationen und interaktiven Oberflächen, in denen Transformationen oft neu berechnet werden.
Der zugewiesene Wert muss den CSS-Typ <length-percentage> haben, also eine Länge (px, em, rem …) oder eine Prozentangabe. Nach einer Änderung von x muss das umgebende CSSTransformValue erneut per attributeStyleMap.set() auf das Element geschrieben werden. Erst dann ändert sich die Darstellung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $wert (beim Setzen) Pflicht | CSSNumericValue | Neue x-Verschiebung. Der Wert muss vom Typ <length-percentage> sein, z. B. CSS.px(40), CSS.percent(50) oder CSS.px(10).add(CSS.percent(5)). |
Rückgabewert
CSSUnitValue mit value und unit oder bei calc() ein CSSMathValue.Beispiele
CSSTranslate erzeugen und x lesen/ändern
const verschiebung = new CSSTranslate(CSS.px(10), CSS.px(20));
console.log(verschiebung.x.value, verschiebung.x.unit);
// x auf 50 % setzen
verschiebung.x = CSS.percent(50);
console.log(verschiebung.toString());
Element per Typed OM horizontal verschieben
const box = document.querySelector('.box');
const translate = new CSSTranslate(CSS.px(0), CSS.px(0));
const transform = new CSSTransformValue([translate]);
box.addEventListener('click', () => {
// x um 25px erhöhen, ohne Strings zu parsen
translate.x = CSS.px(translate.x.value + 25);
box.attributeStyleMap.set('transform', transform);
console.log(box.attributeStyleMap.get('transform').toString());
});
Vorhandene Transformation auslesen
const el = document.querySelector('#slider');
el.style.transform = 'translate(120px, 0) rotate(10deg)';
const transform = el.attributeStyleMap.get('transform');
const teil = [...transform].find((t) => t instanceof CSSTranslate);
if (teil) {
console.log(`Horizontal: ${teil.x}`);
}
Ungültiger Typ löst TypeError aus
const t = new CSSTranslate(CSS.px(0), CSS.px(0));
try {
t.x = CSS.deg(45); // Winkel statt Länge
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- Typprüfung: Werte, die keine <length-percentage> sind (z. B.
CSS.deg()oderCSS.number()), lösen beim Setzen einenTypeErroraus. Ein einfacher String wie"10px"wird ebenfalls nicht angenommen. - Keine automatische Übernahme: Wenn du
xänderst, ändert sich nur das JavaScript-Objekt. Damit das Element neu dargestellt wird, musst du denCSSTransformValuewieder mitelement.attributeStyleMap.set('transform', …)setzen. - Prozentangaben beziehen sich bei
translateauf die Breite der eigenen Rahmenbox (border box) des Elements, nicht auf die des Elternelements. - Berechnete Werte:
computedStyleMap()kann Transformationen je nach Browser anders aufgelöst liefern. Wenn du Werte bearbeiten willst, lies sie besser ausattributeStyleMap. - Kompatibilität: Das CSS Typed OM wird von Chromium-Browsern (Chrome, Edge, Opera) und Safari ab 16.4 unterstützt, von Firefox bisher nicht. Vorher mit
if ('CSSTranslate' in window)prüfen und sonst aufelement.style.transformmit Strings ausweichen.