Webb-Standarder Uppfylla Användare-Land: med Hjälp av CSS-i-JS Stil Anpassade Element

0
17

Populariteten av CSS-i-JS har främst kommit från de Reagerar gemenskapen, och faktiskt många CSS-i-JS-bibliotek är att Reagera-specifika. Men, Känslor, den mest populära bibliotek i form av npm nedladdningar, är ramen agnostiker.

Med hjälp av skuggan DOM är vanliga när man skapar egna element, men det är inget krav att göra så. Inte använder alla fall kräva att nivån av inkapsling. Samtidigt är det också möjligt att stil anpassade element med CSS i en vanlig stilmall, vi kommer att se på med Känslor.

Vi börjar med att installera:

npm jag känslor

Känslor erbjuder css-funktion:

import {css} ‘känslor’;

css är ett märkta mall bokstavlig. Det accepterar standard-CSS-syntax, men lägger till stöd för Sass-stil häckning.

const buttonStyles = css”
färg: vit.
font-size: 16px;
background-color: blue;

&:hover {
background-color: lila,
}
`

När vissa stilar har definierats, de måste tillämpas. Att arbeta med egna element kan vara något besvärligt. Bibliotek — som Stencil och LitElement sammanställa till webb-komponenter, men erbjuder en vänligare API än vad vi skulle få rätt ur lådan.

Så, vi kommer att definiera stilar med Känslor och dra nytta av både Stencil och LitElement att få arbeta med web components lite lättare.

Tillämpning av stilar för Stencil

Stencil använder sig av den allra senaste JavaScript inredare har. @Komponent dekoratör som används för att tillhandahålla metadata om komponenten. Som standard, Stencil inte kommer att använda skugga DOM, men jag gillar att vara explicit genom att ställa skugga: false inuti @Komponent dekoratör:

@Komponent({
tag: ‘fancy-knapp’,
skugga: falskt
})

Stencil använder JSX, så de stilar som appliceras med en curly bracket ({}) syntax:

export klass-Knappen {
render() {
återgå <div><knappen class={buttonStyles}><slot/></button></div>
}
}

Här är hur en enkelt exempel komponent skulle se ut i Stencil:

import { css, injectGlobal } ‘känslor’;
import {Komponent} ‘@stencil/core’;

const buttonStyles = css”
färg: vit.
font-size: 16px;
background-color: blue;
&:hover {
background-color: lila,
}
`
@Komponent({
tag: ‘fancy-knapp’,
skugga: falskt
})
export klass-Knappen {
render() {
återgå <div><knappen class={buttonStyles}><slot/></button></div>
}
}

Tillämpning av stilar för LitElement

LitElement, å andra sidan,