Web Standaarden te Voldoen aan de Gebruiker-Land: met Behulp van CSS-JS Stijl Aangepaste Elementen

0
15

De populariteit van CSS-JS heeft meestal afkomstig zijn uit het Reageren gemeenschap, en inderdaad veel CSS-JS-bibliotheken zijn te Reageren. Echter, de Emotie, de meest populaire bibliotheek in termen van npm downloads, is agnostisch framework.

Met behulp van de schaduw van de DOM is gebruikelijk bij het maken van aangepaste elementen, maar er is geen verplichting om dit te doen. Niet alle use cases vereisen dat het niveau van de inkapseling. Hoewel het ook mogelijk om de stijl van custom-elementen met CSS in een gewone stylesheet, gaan we kijken naar het gebruik van Emotie.

We beginnen met installeren:

npm ik emotie

Emotion biedt de css-functie:

importeren {css} van ’emotie’;

css is een gelabelde sjabloon letterlijk. Het accepteert standaard-CSS-syntaxis, maar voegt ondersteuning toe voor de Sass-stijl-van-genten.

const buttonStyles = css`
kleur: wit;
font-size: 16px;
background-color: blue;

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

Zodra een aantal stijlen gedefinieerd zijn, moeten ze worden toegepast. Het werken met aangepaste elementen kunnen worden een beetje omslachtig. Bibliotheken — als Stencil en LitElement — compileren om het web components, maar bieden een vriendelijker API dan wat we zouden krijgen recht uit de doos.

Dus we gaan het definiëren van stijlen met Emotie en profiteren van zowel Stencil en LitElement om het werken met web components een beetje makkelijker.

Het toepassen van stijlen voor het Stencil

Stencil maakt gebruik van de bleeding-edge JavaScript decorateurs functie. @Onderdeel decorateur wordt gebruikt om metadata over het onderdeel. Standaard, Stencil zal geen gebruik maken van schaduw DOM, maar ik hou wel van een expliciete door het instellen van de schaduw: false binnen de @Onderdeel decorateur:

@Component({
tag: ‘fancy-knop’,
schaduw: false
})

Stencil gebruikt JSX, dus de stijlen zijn toegepast met een accolade ({}) – syntaxis:

exporteren Knop klasse {
render() {
terug <div><button class={buttonStyles}><sleuf/></button></div>
}
}

Hier is hoe een eenvoudig voorbeeld component zou er in Stencil:

importeren { css, injectGlobal } van ’emotie’;
importeren {Component} ‘@stencil/core’;

const buttonStyles = css`
kleur: wit;
font-size: 16px;
background-color: blue;
en:hover {
background-color: purple;
}
`
@Component({
tag: ‘fancy-knop’,
schaduw: false
})
exporteren Knop klasse {
render() {
terug <div><button class={buttonStyles}><sleuf/></button></div>
}
}

Het toepassen van stijlen voor LitElement

LitElement, aan de andere kant,