This survey closed on October 19, 2023. View Survey Results »

A mechanism for holding HTML that is not to be rendered immediately but may be utilized later via JS.

html
<template id="counter">
	<div class="counter">Clicked {{ times }} times</div>
</template>
Tell us more:
Tell us more:
Tell us more:

Using custom elements, that you or someone else defined.

html
<sl-switch>Switch</sl-switch>
Tell us more:
Tell us more:
Tell us more:

Defining custom elements for use by others.

js
class MyElement extends HTMLElement { … }
customElements.define("my-element", MyElement);
Tell us more:
Tell us more:
Tell us more:

Allow multiple custom element definitions for a single tag name to exist within a page.

js
const registry = new CustomElementRegistry();
registry.define('sub-element', SubElement);
Tell us more:
Tell us more:
Tell us more:

Encapsulate elements not visible from the outside, and style them with CSS not affecting the rest of the page.

js
this.shadowRoot = this.attachShadow({mode: "open"});
Tell us more:
Tell us more:
Tell us more:

Define shadow trees with HTML.

html
<host-element>
    <template shadowrootmode="open">
        <!-- Shadow content -->
    </template>
</host-element>
Tell us more:
Tell us more:
Tell us more:

slot="slot_name" attribute

Tell us more:
Tell us more:
Tell us more:

A way to assign elements to slots manually via JS, so that slot assignment does not have to be managed by the component consumers.

js
this.attachShadow({mode: "open", slotAssignment: "manual" });
this.shadowRoot.querySelector("slot[name=foo]").assign(element);
Tell us more:
Tell us more:
Tell us more:

Assign hidden semantics to custom elements, facilitating accessibility and allowing them to participate fully in forms.

js
this.#internals = this.attachInternals()
this.#internals.ariaChecked = true;
Tell us more:
Tell us more:
Tell us more:

A cacheable representation of a part of the DOM that can be updated performantly.

Tell us more:
Tell us more:
Tell us more:

Import HTML files via JS imports and access their elements and JS exports.

html
<script type="module">
	import { TabList } from "./tablist.html" with { type: 'html' };
	customElements.define("tab-list", TabList);
</script>
Tell us more:
Tell us more:
Tell us more:

Using Web Components that you or others have made. Missing features, browser incompatibilities, etc.

What prevents you from creating the amazing components you envision? Missing features, browser incompatibilities, etc.