Web-Standards Genügen User-Land: die Verwendung von CSS-JS-Stil Benutzerdefinierte Elemente

0
32

Die Popularität von CSS-JS hat, kommen vor allem aus den Reagieren Gemeinschaft, und in der Tat viele CSS-JS-Bibliotheken sind, Reagieren. Jedoch die Emotion, die beliebteste Bibliothek in Bezug auf die npm-downloads, Rahmen Agnostiker.

Mit dem shadow DOM ist üblich, wenn das erstellen von benutzerdefinierten Elemente, aber es gibt keine Verpflichtung, dies zu tun. Nicht alle Anwendungsfälle erfordern, dass die Ebene der Kapselung. Es ist zwar auch möglich, Stil benutzerdefinierte Elemente mit CSS in einem regulären stylesheet, die wir jetzt betrachten werden, mit Emotion.

Beginnen wir mit einer Installation aus:

npm i emotion

Emotion bietet die css-Funktion:

import {css} aus ’emotion’;

css ist eine Tag-template-literal. Es akzeptiert standard-CSS-syntax, sondern fügt Unterstützung für Sass-Stil verschachteln.

const buttonStyles = css`
Farbe: weiß;
font-size: 16px;
background-color: blue;

&:hover {
background-color: purple;
}
`

Nachdem einige Formatvorlagen definiert wurden, können Sie angewendet werden müssen. Arbeiten mit benutzerdefinierten Elementen etwas mühselig. Bibliotheken — wie Schablone und LitElement — kompilieren, um web-Komponenten, bieten aber einen freundlicheren API als das, was wir bekommen würde, direkt aus der box.

Also, wir gehen, um Stile zu definieren, die mit Emotionen und nutzen Sie beide Schablonen und LitElement, dass das arbeiten mit web-Komponenten ein wenig leichter.

Anwenden von Stilen für Schablone

Schablone macht Gebrauch von der bleeding-edge JavaScript-Dekorateure-Funktion. Eine @Komponente Dekorator wird verwendet, um Metadaten über die Komponente. Standardmäßig Schablone nicht verwenden, shadow DOM, aber ich mag explizit sein, indem Sie Einstellung, shadow: false in der @Component decorator:

@Komponente({
Tags: ‘fancy-Knopf’,
shadow: false
})

Schablone verwendet JSX, so dass die Stile angewendet werden, die mit einer geschweiften Klammer ({}) syntax:

export class Button {
render() {
return <div><button class={buttonStyles}><slot></button></div>
}
}

Hier ist, wie eine einfache Beispiel-component Aussehen würde, in der Schablone:

import { css, injectGlobal } aus ’emotion’;
importieren Sie {Component} ‘@Schablone/Kern’;

const buttonStyles = css`
Farbe: weiß;
font-size: 16px;
background-color: blue;
&:hover {
background-color: purple;
}
`
@Komponente({
Tags: ‘fancy-Knopf’,
shadow: false
})
export class Button {
render() {
return <div><button class={buttonStyles}><slot></button></div>
}
}

Anwenden von Stilen für LitElement

LitElement, auf der anderen Seite,