--- title: Web Components slug: Web/Web_Components tags: - Componentes - Componentes Web - Landing - TopicStub - Web Components translation_of: Web/Web_Components ---
{{DefaultAPISidebar("Web Components")}}

Los Componentes Web son un paquete de diferentes tecnologías que te permiten crear elementos personalizados reutilizables — con su funcionalidad encapsulada apartada del resto del código — y utilizarlos en las aplicaciones web.

Conceptos y uso

Como desarrolladores, sabemos que reutilizar código tanto como sea posible es una buena idea. Esto tradicionalmente no es sencillo para estructuras de marcado personalizadas — piense en el complejo HTML (y sus estilos y scripts asociados) que en ocasiones se han tenido que escribir para renderizar controles de interfaz (UI) personalizados, y ahora usarlos múltiples veces puede crear un caos en la página si no se es cuidadoso.

Los Componentes Web apuntan a resolver dichos problemas — consiste en tres tecnologías principalmente, las que se pueden usar juntas para crear elementos personalizables versátiles que encapsulan la funcionalidad y pueda ser reutilizada donde sea sin miedo a colisiones de código.

La aproximación básica para implementar un componente web, generalmente es la siguiente:

  1. Crear una clase o función en la cual especificar la funcionalidad del componente web. Si se usa una clase, usar la sintaxis de ES2015 (ver Clases para más información).
  2. Registrar el nuevo elemento personalizado utilizando el método {{domxref("CustomElementRegistry.define()")}}, pasándole el nombre del elemento a ser definido, la clase o función en la cuál su funcionalidad esta especificada, y opcionalmente, de que elemento hereda.
  3. Si se requiere, adjuntar un shadow DOM al elemento personalizado usando el método {{domxref("Element.attachShadow()")}}. Añadir elementos hijos, oyentes de eventos, etc., al shadow DOM utilizando métodos normales del DOM.
  4. Si se requiere, definir una plantilla HTML utilizando {{htmlelement("template")}} y {{htmlelement("slot")}}. Nuevamente usar métodos regulares del DOM para clonar la plantilla y acoplarla al shadow DOM.
  5. Utilizar los componentes personalizados en la página web cuando se desee, como se utilizaría cualquier otro elemento HTML.

Tutoriales

Utilizando elementos personalizados (Using custom elements)
Guía que muestra como usar las características de los elementos personalizados para crear componentes web sencillos, así como revisar las llamadas del ciclo de vida y algunas características más avanzadas.
Utilizando el shadow DOM
Guía que trata los fundamentos del shadow DOM, mostrando como adjuntar un shadow DOM a un elemento, añadir el árbol del shadow DOM, añadirle estilos y más.
Usando templates y slots
Guía que muestra como definir una estructura HTML reutilizable utilizando elementos {{htmlelement("template")}} y {{htmlelement("slot")}} elements, y entonces usar esa estructura debto del componente web.

Referencia

Elementos personalizados

{{domxref("CustomElementRegistry")}}
Contiene funcionalidad relacionada a los elementos personalizados, más notablemente el método {{domxref("CustomElementRegistry.define()")}} utilizado para registrar nuevos elementos personalizados para que se puedan usar en el documento
{{domxref("Window.customElements")}}
Retorna una referencia al objeto CustomElementRegistry.
Llamadas del ciclo de vida (Life cycle callbacks)
Llamadas de funciones especiales declaradas dentro de la clase de definición de los componentes personalizados, los que afectan su comportamiento:
Extensiones para crear elementos incorporados personalizados
Pseudo-clases CSS
Pseudo-clases relacionadas específicamente a elementos personalizados:
Pseudo-elementos CSS
Pseudo-elementos relacionados especificamente a elementos personalizados:

Shadow DOM

{{domxref("ShadowRoot")}}
Representa el nodo raíz de un subárbol de un shadow DOM.
{{domxref("DocumentOrShadowRoot")}}
Un mixin definiendo características que son disponibles a través de documentos y shadow roots.
Extensiones a {{domxref("Element")}}
Extensiones a la interfaz Element relacionada al shadow DOM:
Adiciones relevantes a {{domxref("Node")}}
Adiciones a la interfaz Node relevantes al shadow DOM:
Extensiones a {{domxref("Event")}}
Extensiones a la interfaz Event relacionada al shadow DOM:

Plantillas HTML

{{htmlelement("template")}}
Contiene un fragmento de HTML que no es renderizado cuando se carga inicialmente un documento que lo contiene, pero puede ser desplegado en tiempo de ejecución usando JavaScript, principalmente usado como la base de la estructura de los elementos personalizados. La interfaz DOM asociada es {{domxref("HTMLTemplateElement")}}.
{{htmlelement("slot")}}
Un espacio termporal dentro de un componente web que se puede llenar con una plantilla de marcado propia, lo que permite crear árboles DOM separados y presentarlos juntos. La interfaz DOM asociada es {{domxref("HTMLSlotElement")}}.
El atributo global HTML slot
Asigna un slot en un shadow tree de un shadow DOM shadow tree a un elemento.
{{domxref("Slotable")}}
Un mixin implementado tanto por los nodos {{domxref("Element")}} y {{domxref("Text")}}, definiendo características que les permiten convertirse en el contenido de un elemento {{htmlelement("slot")}}. El mixin define un atributo, {{domxref("Slotable.assignedSlot")}}, el cual retorna una referencia al nodo del slot donde esta insertado.
Extensiones a {{domxref("Element")}}
Extensiones a la interfaz Element relacionadas a slots:
Pseudo-elementos de CSS
Pseudo-elementos especificamente relacionados a slots:
El evento {{event("slotchange")}}
Disparado en una instancia {{domxref("HTMLSlotElement")}} (elemento {{htmlelement("slot")}}) cuando el o los nodos contenidos es ese slot cambia.

Ejemplos

Se están construyendo varios ejemplos en nuestro repositorio de GitHub web-components-examples. Se añadirán más con el tiempo.

Especificaciones

Especificación Estado Comentario
{{SpecName("HTML WHATWG","scripting.html#the-template-element","<template> element")}} {{Spec2("HTML WHATWG")}} La definición de {{HTMLElement("template")}}.
{{SpecName("HTML WHATWG","custom-elements.html#custom-elements","custom elements")}} {{Spec2("HTML WHATWG")}} La definición de elementos personalizados HTML (HTML Custom Elements).
{{SpecName("DOM WHATWG","#shadow-trees","shadow trees")}} {{Spec2("DOM WHATWG")}} La definición de Shadow DOM.
{{SpecName("HTML Imports", "", "")}} {{Spec2("HTML Imports")}} Definición inicial de HTML Imports.
{{SpecName("Shadow DOM", "", "")}} {{Spec2("Shadow DOM")}} Definición inicial de Shadow DOM.

Compatibilidad de los navegadores

Soporte de Componentes Web

(Imagen tomada de webcomponents.org)

Para revisar detalladamente el soporte para ciertas características (sobre todo en versiones anteriores o navegadores antiguos), se puede consultar las páginas de referencia listadas anteriormente

Ver también