Using ::slotted in CSS

css pseudo elements slotted guide
10 November 2024

Hello dear friends! Today we're going to discuss a special feature in CSS called the ::slotted selector. This feature comes into play when using Web Components and Shadow DOM. The ::slotted selector actually allows us to apply specific styles to elements that are inside a slot, based on their unique attributes.

You may be wondering what practical applications this feature has. Let's assume you've defined a Custom Element and want to add different content as a default. By using ::slotted, you can easily style the content that goes inside the slot effortlessly.

In fact, ::slotted allows you to structure and style the inner elements of a component in a way that makes them easier to access and control, without needing to rely on the complete Shadow DOM structure.

Essentially, this feature acts as a bridge between the inner Shadow DOM and the external HTML scope, and it enables you to apply styles from outer elements to inner elements selectively.

Next, I’ll provide a simple example to help you become more familiar with the usage of ::slotted.

<template id="my-template">
<style>
::slotted(span) {
color: blue;
font-weight: bold;
}
</style>
<slot></slot>
</template>

<my-element>
<span>Hello, World!</span>
</my-element>

Now let’s break down this line-by-line code explanation:

<template id="my-template"> – This line defines an HTML template that will be used within the shadow DOM.
<style> – Here we define specific styles.
::slotted(span) – This line indicates that every span placed inside the slot should take on these styles.
color: blue; – This changes the text color to blue.
font-weight: bold; – This makes the text bold.
<slot></slot> – The slot for inserting external content.
<my-element></my-element> – This is the element that will contain the desired content inside.
<span>Hello, World!</span> – This content will be inserted and have its styles taken from ::slotted.

FAQ

?

How can I use ::slotted in my projects?

?

Can ::slotted style multiple elements?