shadow DOM slots
Shadow DOM supports <slot> elements, that are filled by the content from light DOM.
browser ⟩ web components ⟩ implement ⟩ shadow DOM ⟩ slots
if those descendants include a
<slot>
element, then the regular light DOM children of the host element are displayed as if they were children of that<slot>
(they do not actually become part of the shadow DOM), replacing any shadow DOM content in the slot.if shadow DOM does not include a
<slot>
, then any light DOM content of the host is never displayed.if shadow DOM has a
<slot>
, but the shadow host has no light DOM children, then the shadow DOM content of the slot is displayed as a default.
if shadow DOM defines more than one and names those slots with a name
attribute, then children of the shadow host can specify which slot they would like to appear in by specifying a slot="slotname"
attribute.
Fallback Content
if we put something inside
<slot>
(in shadow DOM), it becomes the fallback content, browser shows it if there’s no corresponding element in light DOM. 👉 See tab 2️⃣ below.
Default Slot
The first unnamed
<slot>
in shadow DOM is a “default slot". It gets all nodes from the light DOM that aren’t slotted elsewhere. 👉 See tab 1️⃣ below.
Code Example
Named Slots
for each
<slot name="X">
in shadow DOM, the browser looks for[slot="X"]
in the light DOM and insert it into the slot, the result is called flattened DOM. 👉 See code in "shadow DOM", "flattened DOM" tabs above.if there are multiple elements in light DOM with the same
[slot="X"]
, they are appended into the same<slot name="X">
(in shadow DOM), one after another.
Flattened DOM
the flattened DOM exists only for rendering and event-handling purposes. It’s kind of “virtual”. That’s how things are shown. But the nodes in the document are actually not moved around! 👉 See "flattened DOM" tab above.
The process of rendering slotted elements inside their slots is called “composition”.
Last updated