Definición destacada
¿Como funciona el comando en HTML5: 'slot'?
Última modificación: 2024-06-18
El <slot> es un elemento de HTML5 utilizado en combinación con la API de Web Components, específicamente dentro de los Shadow DOM. Su propósito principal es crear puntos de distribución donde pueden insertarse nodos del Light DOM dentro del Shadow DOM, permitiendo así la creación de componentes web más flexibles y reutilizables.
Atributos del elemento <slot>
-
name: Este atributo opcional permite dar un nombre específico al
<slot>, lo que es útil para que diferentes partes del contenido puedan ser insertadas en ubicaciones específicas dentro del Shadow DOM. Si no se establece un nombre, el<slot>se considera "anónimo" y contendrá contenido por defecto no especificado con el atributoslot. -
global attributes: Al igual que la mayoría de los elementos HTML,
<slot>puede admitir atributos globales comoclass,id,style,tabindex,title, etc. Estos atributos pueden ser útiles para aplicar estilos o funcionalidad específica a los slots.
Ejemplo del elemento <slot> con su atributo name:
<slot name="header"></slot>
Uso de <slot> en HTML5: Ejemplos
Ejemplo básico de uso de <slot>
Supongamos que estás creando un componente my-element que tiene un Shadow DOM con un slot por defecto.
Componente HTML (my-element)
<template id="my-element-template">
<style>
/* Estilos específicos para el Shadow DOM */
p { color: blue; }
</style>
<p>Static content inside the shadow DOM.</p>
<slot></slot>
</template>
<script>
class MyElement extends HTMLElement {
constructor() {
super();
const template = document.getElementById('my-element-template').content;
const shadowDom = this.attachShadow({ mode: 'open' });
shadowDom.appendChild(template.cloneNode(true));
}
}
customElements.define('my-element', MyElement);
</script>
Uso del componente en el DOM principal
<my-element>
<p>Light DOM content that gets slotted in.</p>
</my-element>
En este ejemplo, el contenido <p>Light DOM content that gets slotted in.</p> se inserta dentro del slot por defecto del Shadow DOM de my-element.
Uso de <slot> con nombres
Para casos más complejos, se pueden utilizar múltiples slots con nombres:
Componente HTML (named-element)
<template id="named-element-template">
<style>
/* Estilos específicos para el Shadow DOM */
.header { color: red; }
.content { color: green; }
</style>
<div class="header">
<slot name="header"></slot>
</div>
<div class="content">
<slot name="content"></slot>
</div>
</template>
<script>
class NamedElement extends HTMLElement {
constructor() {
super();
const template = document.getElementById('named-element-template').content;
const shadowDom = this.attachShadow({ mode: 'open' });
shadowDom.appendChild(template.cloneNode(true));
}
}
customElements.define('named-element', NamedElement);
</script>
Uso del componente en el DOM principal
<named-element>
<p slot="header">This is the header content.</p>
<p slot="content">This is the main content.</p>
</named-element>
En este ejemplo, el contenido se distribuye en diferentes partes del Shadow DOM de named-element según el valor del atributo slot en los elementos del Light DOM.
En resumen, el elemento <slot> facilita la composición y reutilización de componentes web al permitir que el contenido dinámico del Light DOM se inserte en lugares específicos del Shadow DOM, impulsando prácticas de diseño modular en el desarrollo web.