HTML таг slot
Пример
Кратък пример как се използва тагът <slot>.
<!-- Дефиниране на Web Component с <slot> -->
<template id="user-card-template">
<style>
.card {
border: 1px solid #ddd;
border-radius: .5rem;
padding: 1rem;
max-width: 260px;
font-family: system-ui, sans-serif;
}
.name {
font-weight: 600;
margin-bottom: .25rem;
}
.role {
color: #6c757d;
font-size: .9rem;
}
</style>
<div class="card">
<div class="name"><slot name="name">Име по подразбиране</slot></div>
<div class="role"><slot name="role">Роля по подразбиране</slot></div>
<div class="extra">
<slot>Допълнителна информация по подразбиране</slot>
</div>
</div>
</template>
<script>
class UserCard extends HTMLElement {
constructor() {
super();
const template = document.getElementById('user-card-template');
const shadowRoot = this.attachShadow({ mode: 'open' });
shadowRoot.appendChild(template.content.cloneNode(true));
}
}
customElements.define('user-card', UserCard);
</script>
<!-- Използване на компонента и запълване на слотовете -->
<user-card>
<span slot="name">Иван Петров</span>
<span slot="role">Frontend разработчик</span>
<p>Работи с HTML, CSS, JavaScript и Web Components.</p>
</user-card>
Опитай в редактора
Дефиниция и употреба
Виж как се ползва тагът <slot>.
<slot> е HTML елемент, използван в контекста на Web Components и Shadow DOM. Той представлява „място за съдържание“ (placeholder) вътре в шаблона на компонент, в което по-късно се вмъква съдържанието, подадено от потребителя на компонента.
Когато създадем custom element и му добавим Shadow DOM, вътрешната структура на компонента е капсулирана и по подразбиране не „вижда“ децата, които поставяме между отварящия и затварящия таг на компонента. Чрез <slot> казваме къде и как това външно съдържание да бъде визуализирано.
Има два основни типа слотове:
- Неименуван (default) слот –
<slot>...fallback...</slot>. Всички елементи, които не са асоциирани с конкретно име (нямат атрибутslot), попадат в този слот. Текстът/елементите вътре в слота служат като „fallback“ съдържание, което се показва, ако потребителят не подаде нищо. - Именуван слот –
<slot name="title">Заглавие</slot>. Съдържанието се насочва към този слот чрез атрибутslot="title"върху елемента, който искаме да вмъкнем. Така можем да имаме няколко различни зони за съдържание в един компонент.
Типичният работен процес е следният:
- Дефинираме шаблон с
<template>, в който използваме един или повече<slot>елемента. - В JavaScript създаваме custom element (клас, наследяващ
HTMLElement), прикачваме Shadow DOM и клонираме съдържанието на шаблона в него. - Когато използваме компонента в HTML, поставяме вътре съдържание и, ако е нужно, задаваме атрибут
slot, за да го насочим към конкретен именуван слот.
Елементът <slot> не се визуализира директно – на негово място браузърът рендерира подаденото от потребителя съдържание или fallback съдържанието, ако такова не е подадено. Това позволява създаване на гъвкави, многократно използваеми компоненти с ясно дефинирани „зони“ за персонализация.
Browser Support
| Browser | Поддръжка |
|---|---|
|
Chrome |
✔️ |
|
Firefox |
✔️ |
|
Edge |
✔️ |
|
Safari |
✔️ |
|
Opera |
✔️ |
Атрибути
Този елемент няма собствени глобално специфични атрибути, освен стандартните HTML атрибути. В контекста на слотовете именуването се извършва чрез атрибута name на самия <slot>, а съдържанието се насочва към него чрез атрибута slot върху елементите, които ще бъдат вмъкнати.