La Etiqueta TEMPLATE

Permite almacenar fragmentos de HTML que no se renderizan inicialmente, pero que pueden ser clonados y utilizados dinámicamente mediante JavaScript.
La etiqueta <template>
en HTML permite almacenar fragmentos de HTML que no se renderizan inicialmente, pero que pueden ser clonados y utilizados dinámicamente mediante JavaScript. Es ideal para estructuras reutilizables, como listas, tarjetas, formularios o componentes que se generan múltiples veces. Aquí te explicamos cómo usarla correctamente.
¿Qué es <template>
?
-
Propósito: Almacenar contenido HTML que se activa (clona y muestra) mediante JavaScript.
-
Características:
-
El contenido dentro de
<template>
es inert (scripts no se ejecutan, imágenes no cargan). -
No afecta el renderizado inicial de la página.
-
Compatible con todos los navegadores modernos (no soportado en IE11).
-
Sintaxis básica
Coloca el contenido dentro de <template>
y asígnale un id
para accederlo:
<template id="miTemplate"> <!-- Contenido HTML aquí --> </template>
Ejemplo práctico: Crear elementos dinámicamente
a) HTML: Definir el template
<template id="tarjeta-usuario"> <div class="tarjeta"> <h2 class="nombre"></h2> <p class="email"></p> </div> </template>
b) JavaScript: Clonar y usar el template
// Obtener el template const template = document.getElementById('tarjeta-usuario'); // Clonar su contenido (true = clonar nodos hijos) const contenido = template.content.cloneNode(true); // Modificar datos contenido.querySelector('.nombre').textContent = 'Ana Pérez'; contenido.querySelector('.email').textContent = 'ana@ejemplo.com'; // Agregar al DOM document.body.appendChild(contenido);
Casos de uso comunes
a) Listas generadas dinámicamente
<template id="item-lista"> <li class="item"></li> </template> <ul id="lista"></ul> <script> const datos = ['Manzana', 'Plátano', 'Naranja']; const lista = document.getElementById('lista'); datos.forEach(item => { const template = document.getElementById('item-lista'); const contenido = template.content.cloneNode(true); contenido.querySelector('.item').textContent = item; lista.appendChild(contenido); }); </script>
b) Componentes reutilizables (tarjetas, modales)
<template id="modal-info"> <div class="modal"> <h2>Título</h2> <p>Contenido del modal...</p> <button class="cerrar">Cerrar</button> </div> </template> <script> function mostrarModal(titulo, mensaje) { const template = document.getElementById('modal-info'); const contenido = template.content.cloneNode(true); contenido.querySelector('h2').textContent = titulo; contenido.querySelector('p').textContent = mensaje; const modal = contenido.querySelector('.modal'); modal.querySelector('.cerrar').addEventListener('click', () => { modal.remove(); }); document.body.appendChild(contenido); } mostrarModal('Bienvenido', '¡Hola, mundo!'); </script>
Ventajas de usar <template>
-
Mantenibilidad: Separa el HTML estático del dinámico.
-
Rendimiento: Evita reprocesar cadenas de texto HTML repetidamente.
-
Claridad: Mejora la organización del código.
-
Seguridad: El contenido inert previene ejecución accidental de scripts.
Buenas prácticas
-
Ubicación del template: Colócalo en el
<head>
o al final del<body>
. -
IDs descriptivos: Usa nombres claros para identificadores (ej:
modal-error
). -
Reutilización: Define templates genéricos que acepten datos variables.
-
Accesibilidad: Añade roles ARIA y atributos si el contenido lo requiere.
Diferencias con alternativas
Método | Ventajas |
---|---|
<template> |
Contenido inert, no afecta al DOM inicial, fácil de clonar. |
Strings HTML | Útil para contenido simple, pero ineficiente para estructuras complejas. |
CSS display:none |
El contenido oculto sigue cargando recursos (imágenes, scripts). |
Ejemplo avanzado: Template con estilos y scripts
<template id="alerta-personalizada"> <style> .alerta { padding: 15px; background: #f8d7da; border: 1px solid #f5c6cb; border-radius: 5px; } </style> <div class="alerta"> <p class="mensaje"></p> </div> </template> <script> function crearAlerta(mensaje) { const template = document.getElementById('alerta-personalizada'); const contenido = template.content.cloneNode(true); // Los estilos y scripts dentro del template se activan al clonar contenido.querySelector('.mensaje').textContent = mensaje; document.body.appendChild(contenido); } crearAlerta('¡Este es un mensaje de alerta!'); </script>
Conclusión
La etiqueta <template>
es esencial para:
-
Gestionar contenido dinámico de forma eficiente.
-
Estructurar proyectos con componentes reutilizables.
-
Optimizar el rendimiento al evitar reprocesar HTML.
Recuerda:
-
Usa JavaScript para clonar y activar el contenido.
-
Combínala con buenas prácticas de diseño y accesibilidad.
-
Prioriza su uso en aplicaciones modernas con datos dinámicos.
¡Incorpora <template>
en tus proyectos para crear interfaces más limpias y mantenibles!