Web Components er et sett med native browser-API-er for å bygge gjenbrukbare, innkapslet custom HTML-elementer — rammeverkagnostisk og standardsbasert. Tre teknologier kombineres:
Web Components er et sett med native browser-API-er for å bygge gjenbrukbare, innkapslet custom HTML-elementer — rammeverkagnostisk og standardsbasert. Tre teknologier kombineres:
<template>, <slot>) — inert, gjenbrukbar markup.class UserCard extends HTMLElement {
connectedCallback() { // lifecycle: runs when added to the page
const shadow = this.attachShadow({ mode: "open" }); // create shadow DOM
shadow.innerHTML = `
<style> h2 { color: blue; } </style>
<h2>${this.getAttribute("name")}</h2>
<slot></slot>
`;
}
}
customElements.define("user-card", UserCard); // name MUST contain a hyphen
<user-card name="Ann">Extra content goes in the slot</user-card>
Stilene inni shadow root er scoped — siden sin CSS kan ikke komme inn, og komponentens CSS kan ikke lekke ut. Dette løser det globale CSS-problemet naturlig:
/* page CSS */ h2 { color: red; } /* does NOT affect the <h2> inside user-card */
connectedCallback() // added to DOM
disconnectedCallback() // removed from DOM (cleanup)
attributeChangedCallback(name, old, val) // an observed attribute changed
static get observedAttributes() { return ["name"]; }
Web Components lar deg bygge gjenbrukbare widgeter som fungerer i hvilken som helst rammeverk (eller ingen) med ekte stil/DOM-innkapsling — ideelt for designsystemer og mikro-frontends som deles på tvers av team som bruker ulike stack.
Dette er hvordan biblioteker som Shoelace leverer rammeverksagnostiske komponenter.
Avveiningene (verbose API, SSR/styling-kompleksitet) betyr at apputviklere ofte fremdeles foretrekker React/Vue, men plattformprimitiven er kraftig og standardsbasert.