Тег <slot>
Тег <slot> (укр. — “слот”, “місце вставки”) в HTML використовується всередині Web Components (кастомних елементів) для визначення місця, куди може бути вставлений динамічний вміст ззовні. Це основний механізм реалізації content projection (проекції вмісту) у специфікації Shadow DOM.
При створенні кастомних компонентів через Shadow DOM, <slot> дозволяє передавати зовнішній контент у визначені зони компоненту.

Атрибути
Специфічні атрибути
- name — ідентифікатор слоту. Якщо не вказано — слот вважається default slot (основний слот для контенту без імені). Наприклад:
<slot name="header"></slot> Глобальні атрибути
Тег <slot> підтримує всі глобальні атрибути HTML:
- id — унікальний ідентифікатор. Наприклад:
<slot id="main-slot"></slot> - class — для CSS-стилізації (застосовується до слота як DOM-елемента). Наприклад:
<slot class="content-slot"></slot> - style — для інлайн-стилів (працює тільки в межах Shadow DOM). Наприклад:
<slot style="border: 1px dashed #ccc;"></slot> - title — підказка при наведенні (практично не використовується). Наприклад:
<slot title="Динамічний контент"></slot> - lang — вказує мову вмісту (зазвичай не використовується). Наприклад:
<slot lang="uk"></slot> Приклад використання
<!DOCTYPE html>
<html lang="uk">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Приклад використання slot</title>
</head>
<body>
<custom-card>
<h2 slot="title">Заголовок картки</h2>
<p>Основний текст картки.</p>
<footer slot="footer">Підвал картки</footer>
</custom-card>
<script>
class CustomCard extends HTMLElement {
constructor() {
super();
const shadow = this.attachShadow({ mode: 'open' });
shadow.innerHTML = `
<style>
.card { border: 1px solid #ccc; padding: 20px; border-radius: 10px; }
::slotted(h2) { color: darkblue; }
</style>
<div class="card">
<header><slot name="title"></slot></header>
<section><slot></slot></section>
<footer><slot name="footer"></slot></footer>
</div>
`;
}
}
customElements.define('custom-card', CustomCard);
</script>
</body>
</html> Додаткові моменти
<slot>працює виключно всередині Shadow DOM.- Якщо для
<slot>не вказаноname— це default slot. - Можна визначати скільки завгодно іменованих слотів.
- Вміст, який передається у
<slot>, повинен мати атрибутslotз відповідним іменем. - Контент, що передається у слот, визначається через атрибут
slotу зовнішньому коді. - Якщо слот порожній і немає переданого вмісту — можна визначити fallback-контент безпосередньо всередині тега
<slot>:
<slot name="header">Заголовок за замовчуванням</slot> - Підтримується всіма сучасними браузерами, які реалізують стандарт Web Components (Chrome, Edge, Firefox, Safari).