Das Typisierte Objekt-Modell

0
232

Ich schreiben von technischen Dokumentationen und eine Eigenschaft, die ich habe das schreiben über dieses Jahr, das wirklich herausragend ist das Typisierte Objekt-Modell (oder Typ-OM). Wenn Sie noch nicht über ihn kommen, doch Sie würde vergeben werden, wie es ist ziemlich neu. Es fällt unter die CSS-Houdini-suite von API ‘ s und auf der Oberfläche scheint die am wenigsten spannende. Jedoch, es dient als Grundlage für alle von Ihnen und wird schließlich zu ändern, wie wir mit CSS als Sprache.

Es ermöglicht die Eingabe von Werten in CSS. Denken Sie daran die grundlegende syntax von CSS:

Selektor {
– Eigenschaft: Wert;
}

Dieser Wert kann eine Menge Dinge, Farben, Einheiten, Bilder, Worte. Die CSS macht Sinn, aber die uns, wenn wir Zugang zu ihm und versuchen es zu ändern, durch andere Mittel, ist es ein string.

Eingegeben OM erlaubt es, die zurückgegeben werden als Typ statt. Also, wenn wir wurden, um den Zugang, sagen 10px in JavaScript, statt ’10px’ zurückgegeben wird, erhalten wir die Zahl 10 und der Einheit “px’. Die ist einen ganzen Haufen einfacher, mit zu arbeiten.

Sie haben vielleicht schon einige von Ana Tudor ist erstaunlich demos. In Ihrem Beispiel “Hohl”, Sie Register benutzerdefinierte Eigenschaften in JavaScript in Ihrem CSS. Sie ist mit den Eigenschaften & Werte-API und kann somit bestimmen die Art der Eigenschaften. Dies wäre nicht möglich, wenn Eingegeben OM war nicht rund.

Wie wäre es mit einem Beispiel

Auf dem Gesicht, scheint es ein wenig mehr Arbeit als die Art, wie wir verwendet, um den Zugriff und die Einstellung der Stile im moment, aber es gibt eine Menge von Vorteilen. Wenn wir wollen, sagen, bekommen, um die Breite eines Elements, die wir tun würden, so etwas wie dieses:

const elementWidth = getComputedStyle(myElement).Breite;
// gibt ‘300px’

Wir sind nicht nur Zugriff auf eine Schnur hier, aber getComputedStyle Kräfte ein re-layout. Wir möglicherweise nicht bewusst sein, welche Einheiten verwendet werden, und so den Zugriff auf den numerischen Teil des Strings wird schwierig, und wenn wir diese in unserem code eine Anzahl von Zeiten, es könnte Schaden Leistung.

Wenn wir verwenden möchten, Eingegeben OM und return ein Wert eingegeben hätten wir Zugriff auf die Eigenschaften und Werte über computedStyleMap() und get () – Methode:

const elementWidth = myElement.computedStyleMap().get(‘width’);
// gibt CSSUnitValue {Wert: 300, type: ‘px’}

Jetzt können wir auf den Wert und die Einheit getrennt, und der Wert hier zurückgegeben wird, als ein integer.

elementWidth.Wert // 300
elementWidth.Einheit // ‘px’

Wir haben nicht gezwungen ein re-layout, das ist nichts weniger als ein Sieg. Wette, Sie sind jetzt gefragt, und ja, Sie können nicht nur Zugriff auf den CSS-Wert als Typ, aber Sie können erstellen von unit-Werte ziemlich leicht als auch über das Globale CSS-Objekt:

lassen Sie newWidth = CSS.px(320);
// gibt CSSUnitValue {Wert: 320, type: ‘px’}

Das ist ein kleines Beispiel und eines, das ist leicht zu zeigen, wie die Einheiten, die Teil der Spezifikation wurde ausgearbeitet wird etwas deutlich, um einige der anderen Wertetypen. Aber egal es ermöglicht für viel weniger string-matching und Flexibilität.

Eine andere Reihe von Werten, die ist gut specced sind Werte transformieren: verschieben, drehen, skalieren, etc. Das ist großartig, denn wenn wir wollten, ändern Sie diese Werte auf ein element ohne Eingegeben OM, es kann schwierig sein, vor allem, wenn wir haben mehr als eine.

.myElement {
transform: rotate(10deg) scale(1.2);
}

Sagen wir, wir wollten zur Erhöhung der rotation. Wenn wir auf diese Eigenschaft zugreifen, die mit getComputedStyle() eine matrix zurückgegeben.

const transform = getComputedStyle(myElement).wandeln;
// gibt die matrix(0.984808, 0.173648, -0.173648, 0.984808, 0, 0)

Mit den Transformationen, die wir auf das element, können wir möglicherweise nicht herausziehen Wert aus der matrix. Ich gehe nicht alle Vektoren, Skalare Werte, und dot Produkt hier, aber es genügt zu sagen, können Sie nicht herausziehen Wert, sobald die matrix gebildet worden ist. Es gibt definitiv zu viele Zuordnungen.

Wenn Sie nur eine Transformation oder Waage, das ist möglich, indem die Zeichenkette, in denen der Wert in der matrix. Aber, dass die Informationen für einen anderen Tag.

Wir könnten benutzerdefinierte Eigenschaften verwenden, um den Wert dieser Transformationen und aktualisieren diese:

.myElement {
–drehen: 10deg;
transform: rotate(var(–drehen)) scale(1.2);
}
myElement.Stil.setProperty(‘–drehen’, ’15 Grad’);

Wir müssen allerdings wissen, dass der name der benutzerdefinierten Eigenschaft, und wir sind immer noch die übergabe in einem string.

Geben Sie Eingegeben OM. Lassen Sie uns nehmen einen Blick an, was die Rückkehr aus der computedStyleMap:

myElement.computedStyleMap().get(‘transform’);
/* gibt
CSSTransformValue {
0: CSSRotate {…}
1: CSSScale {…}
} */

Jede Transformation-Wert hat seinen eigenen Typ. Es gibt CSSRotate und CSSScale für den obigen code. Wie auch all die anderen wie skew und übersetzen. Also, statt sich mit der matrix, oder noch, die Arbeit mit Streichern, können wir diese Typen und anwenden CSSTransformValue mit Ihnen.

const newTransform = new CSSTransformValue([
neue CSSRotate(CSS.Grad(15)),
neue CSSScale(CSS.Anzahl(1.2), CSS.Anzahl(1.2))
])
myElement.attributeStyleMap.set(‘transform’, newTransform);

Beachten Sie, wie schaffen wir die Transformation Typen mit der Methode der Klasse, und das neue Schlagwort, sondern als die factory-Methode verwendet, mit der numerischen Werte.

Wir haben viel mehr Kontrolle über jeden einzelnen Wert, etwas sehr notwendig, wenn wir erklären, dass mehrere Werte in CSS.

Ich habe einen Stift mit allen in diesem Beispiel-code hier.

Es ist das Fundament

Als wir beginnen, um mehr vertraut mit anderen API ‘ s innerhalb der Houdini-suite, die die Vorteile all dies wird noch deutlicher werden. Wenn wir deklarieren Sie eine neue benutzerdefinierte Eigenschaft mit den Eigenschaften und Werte API, setzen wir ein Typ und erhalten Sie automatische Fehlerbehandlung, zum Beispiel. Diese Werte werden auch an die worklets der Farbe API-und Layout-API, so können wir die Leistung auch da.

Es gibt mehr Typen, die ich noch nicht erwähnt habe, mehr Arten zu kommen und wirklich viel mehr darüber zu schreiben. Falls nicht schon Eingegeben OM wird derzeit in allen gängigen Browsern zu dieser Zeit. Sicherlich hat mein Interesse geweckt in diesem Jahr, so dass sich im Jahr 2020 herum kommt!