Start · Sprachen · JavaScript · Referenz · new CSSSkewX()

new CSSSkewX()

Methode

Erzeugt ein <code>CSSSkewX</code>-Objekt, das die CSS-Transformationsfunktion <code>skewX()</code> der Eigenschaft <code>transform</code> im CSS Typed OM darstellt.

seit JavaScript CSS Typed OM Level 1 – Chrome/Edge 66+, Opera 53+, Kategorie: webapi

Signatur

new CSSSkewX(ax)

Beschreibung

Der Konstruktor CSSSkewX() gehört zum CSS Typed Object Model (Houdini). Er erzeugt ein typisiertes Objekt für die Transformationsfunktion skewX(<angle>), die ein Element entlang der X-Achse um einen bestimmten Winkel neigt. So musst du keine Strings wie "skewX(20deg)" zusammenbauen und später wieder auseinandernehmen.

Ein CSSSkewX-Objekt ist eine Unterklasse von CSSTransformComponent. Allein wird es selten genutzt: Normalerweise packst du es zusammen mit anderen Komponenten (z. B. CSSTranslate, CSSRotate) in ein CSSTransformValue und weist dieses über element.attributeStyleMap.set('transform', …) einem Element zu.

Der übergebene Winkel ist später über die Eigenschaft ax les- und schreibbar. Damit lassen sich Animationen oder interaktive Effekte umsetzen, ohne bei jedem Frame CSS-Strings neu zu parsen. Mit toMatrix() bekommst du die zugehörige DOMMatrix, und toString() liefert die CSS-Schreibweise.

Parameter

Name Typ Default Beschreibung
$ax Pflicht CSSNumericValue Der Neigungswinkel entlang der X-Achse. Muss ein CSSNumericValue vom Typ Winkel sein, z. B. CSS.deg(20), CSS.rad(0.5) oder CSS.turn(0.1). Auch ein CSSMathValue wie new CSSMathSum(CSS.deg(10), CSS.deg(5)) ist erlaubt.

Rückgabewert

Typ
CSSSkewX
Beschreibung
Ein neues CSSSkewX-Objekt mit dem Winkel in ax. is2D ist dabei immer true.

Beispiele

Objekt erzeugen und als CSS-String ausgeben

const skew = new CSSSkewX(CSS.deg(20));

console.log(skew.toString());
console.log(skew.ax.value, skew.ax.unit);
console.log(skew.is2D);
skewX(20deg) 20 "deg" true

Transformation typisiert auf ein Element anwenden

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

// Verschieben und neigen, zusammengefasst in einem CSSTransformValue
const transform = new CSSTransformValue([
  new CSSTranslate(CSS.px(10), CSS.px(0)),
  new CSSSkewX(CSS.deg(-12))
]);

card.attributeStyleMap.set('transform', transform);
console.log(card.style.transform);
translate(10px, 0px) skewX(-12deg)

Neigung abhängig von der Mausposition ändern

const box = document.querySelector('.box');
const skew = new CSSSkewX(CSS.deg(0));
const transform = new CSSTransformValue([skew]);

box.addEventListener('pointermove', (event) => {
  const rect = box.getBoundingClientRect();
  // Relative Position von -0.5 bis 0.5 → Winkel von -15° bis 15°
  const ratio = (event.clientX - rect.left) / rect.width - 0.5;
  skew.ax = CSS.deg(Math.round(ratio * 30));
  box.attributeStyleMap.set('transform', transform);
});

Ungültiger Typ und Umrechnung in eine Matrix

try {
  new CSSSkewX(CSS.px(10)); // Länge statt Winkel
} catch (err) {
  console.log(err.name);
}

const matrix = new CSSSkewX(CSS.deg(45)).toMatrix();
console.log(matrix.c.toFixed(3)); // tan(45°)
TypeError 1.000

// Wichtig · Fallstricke

  • Nur Winkel sind erlaubt: Übergibst du etwas anderes als einen Winkel, z. B. CSS.px(10) oder CSS.number(5), wird ein TypeError ausgelöst. Das gilt auch, wenn du später ax neu setzt. Eine einfache Zahl wie 20 wird ebenfalls nicht akzeptiert. Nutze stattdessen CSS.deg(20).
  • is2D ist fest: Eine Neigung ist immer eine 2D-Transformation. Das Setzen von is2D hat bei CSSSkewX keine Wirkung.
  • Änderungen werden nicht automatisch übernommen: Wenn du ax nachträglich änderst, aktualisiert sich das Element nicht von selbst. Du musst den Wert erneut mit attributeStyleMap.set() zuweisen.
  • Browser-Unterstützung: Das CSS Typed OM gibt es in Chromium-Browsern ab Version 66 und in Safari ab 16.4. Firefox unterstützt es bisher nicht. Prüfe die Unterstützung vorher, z. B. mit if ('CSSSkewX' in window), und weiche sonst auf element.style.transform = 'skewX(20deg)' aus.
  • Für eine Neigung auf beiden Achsen gibt es CSSSkew, für die Y-Achse allein CSSSkewY.