Web-Standarder Møte Brukeren-Land: ved Hjelp av CSS-i-JS å Style Tilpassede Elementer

0
17

Populariteten av CSS-i-JS har for det meste kommet fra Reagerer samfunnet, og faktisk mange CSS-i-JS bibliotek er Reagere-spesifikke. Imidlertid, Følelser, den mest populære bibliotek i form av npm nedlastinger, er framework agnostisk.

Ved hjelp av skyggen DOM er vanlig når du oppretter tilpassede elementer, men det er ikke noe krav om å gjøre det. Ikke alle bruker tilfeller kreve at nivået av innkapsling. Mens det er også mulig å style tilpassede elementer med CSS i en vanlig stilark, vi kommer til å se på ved hjelp av Følelser.

Vi starter med en installert:

npm jeg følelser

Følelser tilbyr css-funksjonen:

import {css} fra ‘følelser’;

css er et kodet mal bokstavelig. Det aksepterer standard CSS-syntaks, men legger til støtte for Sass-stil hekkende.

const buttonStyles = css”
color: white;
font-size: 16px;
background-color: blue;

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

Når noen stiler har blitt definert, de trenger å bli brukt. Arbeide med tilpassede elementer kan være litt tungvint. Biblioteker som Sjablong og LitElement — kompilere til web-komponenter, men tilbyr en vennligere API enn hva vi ville få rett ut av boksen.

Så kommer vi til å definere stiler med Følelser og dra nytte av både Sjablong og LitElement å gjøre jobber med web components litt enklere.

Søker stiler for Sjablong

Sjablong gjør bruk av bleeding-edge JavaScript dekoratører funksjonen. En @Komponent dekoratør brukes til å gi metadata om komponenten. Som standard, Sjablong vil ikke bruke skygge DOM, men jeg liker å være eksplisitt ved å sette skygge: false inni @Component dekoratør:

@Komponent({
tag: ‘fancy- – knapp’,
skygge: false
})

Sjablong bruker JSX, så stiler er brukt med en krøllete brakett ({}) syntaks:

eksport klasse-Knappen {
render() {
retur <div – >< – knappen class={buttonStyles}><slot/></button></div>
}
}

Her er hvordan et enkelt eksempel komponent ville se i Sjablong:

import { css, injectGlobal } fra ‘følelser’;
import {Komponent} fra ‘@sjablong/core’;

const buttonStyles = css”
color: white;
font-size: 16px;
background-color: blue;
og:hover {
background-color: purple;
}
`
@Komponent({
tag: ‘fancy- – knapp’,
skygge: false
})
eksport klasse-Knappen {
render() {
retur <div – >< – knappen class={buttonStyles}><slot/></button></div>
}
}

Søker stiler for LitElement

LitElement, på den annen side,