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

  1. Ubicación del template: Colócalo en el <head> o al final del <body>.

  2. IDs descriptivos: Usa nombres claros para identificadores (ej: modal-error).

  3. Reutilización: Define templates genéricos que acepten datos variables.

  4. 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!