Signatur
Beschreibung
Die Eigenschaft y gehört zum Interface CSSRotate der CSS Typed OM. Zusammen mit x und z beschreibt sie den Vektor (x, y, z), um den ein Element gedreht wird. Ein CSSRotate entspricht damit der CSS-Funktion rotate3d(x, y, z, angle) bzw. bei einer reinen 2D-Drehung rotate(angle).
Beim Lesen gibt y einen CSSNumericValue zurück, typischerweise einen CSSUnitValue mit der Einheit "number". Beim Setzen akzeptiert die Eigenschaft einen CSSNumberish-Wert, also eine einfache Zahl oder einen einheitenlosen CSSNumericValue wie CSS.number(1).
Brauchbar ist y vor allem, wenn du 3D-Drehungen per Skript anpassen willst, ohne Transform-Strings zusammenzubauen und wieder zu zerlegen. Ein Beispiel wäre das Kippen einer Karte um die y-Achse abhängig von der Mausposition. Der Vektor muss nicht normiert sein. Nur seine Richtung zählt, (0, 2, 0) dreht also genauso wie (0, 1, 0).
Wird ein CSSRotate nur mit einem Winkel erzeugt (new CSSRotate(angle)), haben x und y den Wert 0, z ist 1 und is2D ist true.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value Pflicht | number | CSSNumericValue | Nur beim Setzen: neue y-Komponente des Achsenvektors. Der Wert muss einheitenlos sein (Typ number), sonst wird ein TypeError ausgelöst. |
Rückgabewert
CSSUnitValue mit unit: "number". Eine gesetzte einfache Zahl wird dabei in einen solchen Wert umgewandelt.Beispiele
y-Komponente einer 3D-Rotation auslesen
// Drehung um 45° um die y-Achse
const rotation = new CSSRotate(0, 1, 0, CSS.deg(45));
console.log(rotation.y.value, rotation.y.unit);
console.log(rotation.is2D);
console.log(rotation.toString());
Standardwert bei einer 2D-Rotation
const flat = new CSSRotate(CSS.deg(30));
console.log(flat.x.value, flat.y.value, flat.z.value);
console.log(flat.is2D);
console.log(flat.toString());
Karte je nach Mausposition kippen
const card = document.querySelector('.card');
const rotation = new CSSRotate(0, 1, 0, CSS.deg(20));
card.addEventListener('pointermove', (event) => {
const rect = card.getBoundingClientRect();
// Relative Position: -0.5 bis 0.5
const relX = (event.clientX - rect.left) / rect.width - 0.5;
const relY = (event.clientY - rect.top) / rect.height - 0.5;
// Achsenvektor anpassen (muss nicht normiert sein)
rotation.x = -relY;
rotation.y = relX;
card.attributeStyleMap.set('transform', new CSSTransformValue([rotation]));
});
Ungültige Einheit beim Setzen abfangen
const rotation = new CSSRotate(0, 1, 0, CSS.deg(90));
try {
rotation.y = CSS.px(10); // Längen sind nicht erlaubt
} catch (err) {
console.log(err.name);
}
rotation.y = CSS.number(0.5); // gültig
console.log(rotation.y.toString());
// Wichtig · Fallstricke
- Browser-Unterstützung: Die CSS Typed OM gibt es in Chromium-Browsern (ab Chrome/Edge 66) und in Safari (ab 16.4). Firefox unterstützt sie bisher nicht. Prüfe die Unterstützung vorher, z. B. mit
if ('CSSRotate' in window), und sieh bei Bedarf einen Rückfall überelement.style.transformmit einem String vor. - Nur einheitenlose Werte:
ynimmt ausschließlich Zahlen oderCSSNumericValue-Werte vom Typnumberan. Werte wieCSS.px()oderCSS.deg()lösen einenTypeErroraus. - is2D beachten: Wenn du
yänderst, ändert sichis2Dnicht automatisch. Stehtis2Dauftrue, wird die Drehung weiterhin alsrotate(angle)serialisiert und angewendet, der neue y-Wert hat dann keine Wirkung. Setze in diesem Fallrotation.is2D = false. - Nullvektor: Sind
x,yundzalle0, gibt es keine gültige Achse. Der Browser wendet dann keine Drehung an. - Die Änderung wird erst sichtbar, wenn du das
CSSRotate-Objekt erneut perattributeStyleMap.set()zuweist. Das Objekt ist nicht live mit dem Element verbunden.