La Etiqueta DETAILS

Permite crear secciones plegables que los usuarios pueden expandir o contraer para mostrar u ocultar contenido adicional.
La etiqueta <details>
permite crear secciones plegables (disclosure widgets) que los usuarios pueden expandir o contraer para mostrar u ocultar contenido adicional. Es ideal para organizar información sin sobrecargar la interfaz, como FAQs, menús desplegables o contenido opcional.
Sintaxis básica
<details> <summary>Título del elemento</summary> Contenido oculto/mostrable. </details>
<summary>
: Define el título clickeable (obligatorio).- Atributo
open
: Muestra el contenido por defecto.
<details open> <summary>Ver más</summary> <p>Contenido visible inicialmente.</p> </details>
Casos de uso comunes
Preguntas frecuentes (FAQ)
<details> <summary>¿Cómo restablezco mi contraseña?</summary> <p>Visita la página de configuración y sigue los pasos indicados.</p> </details>
Código o ejemplos colapsables
<details> <summary>Mostrar código HTML</summary> <pre><code><h1>Hola Mundo</h1></code></pre> </details>
Menús desplegables avanzados
<details> <summary>Opciones avanzadas</summary> <form> <label><input type="checkbox"> Opción 1</label> <label><input type="checkbox"> Opción 2</label> </form> </details>
Atributos clave
Atributo | Descripción |
---|---|
open |
Muestra el contenido al cargar la página |
id |
Identificador único para estilos o JavaScript |
class |
Clases CSS personalizadas |
Accesibilidad
-
Teclado: Se puede navegar con
Tab
y activar conEnter
. -
Lectores de pantalla: Anuncian el estado (abierto/cerrado).
-
Buenas prácticas:
-
Usar
<summary>
descriptivo. -
Evitar contenido crítico dentro de
<details>
.
-
Estilización con CSS
Personaliza el diseño del widget:
details { border: 1px solid #ddd; border-radius: 4px; padding: 0.5rem; margin: 1rem 0; } summary { cursor: pointer; font-weight: bold; padding: 0.5rem; list-style: none; /* Oculta el marcador predeterminado */ } summary::-webkit-details-marker { display: none; /* Oculta el marcador en Chrome */ } details[open] { background: #f8f9fa; }
Icono personalizado:
summary::before { content: "▶"; margin-right: 0.5rem; } details[open] summary::before { content: "▼"; }
Errores comunes
Olvidar <summary>
<!-- Incorrecto --> <details> <p>Contenido sin título</p> </details>
Anidación compleja
<!-- Evitar estructuras confusas --> <details> <summary>Menú</summary> <details> <summary>Submenú</summary> <!-- ... --> </details> </details>
Usar para contenido esencial
<!-- Incorrecto --> <details> <summary>Términos y condiciones</summary> <p>Información legal importante...</p> </details>
Ejemplos avanzados
Acordeón interactivo
<div class="acordeon"> <details> <summary>Sección 1</summary> <p>Contenido de la sección 1.</p> </details> <details> <summary>Sección 2</summary> <p>Contenido de la sección 2.</p> </details> </div>
Animación de despliegue
details[open] p { animation: fadeIn 0.3s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } }
Buenas prácticas
Mantener el contenido breve: Evitar párrafos largos dentro de <details>
.
Usar JavaScript para interacciones complejas:
document.querySelector('details').addEventListener('toggle', function(e) { if (this.open) { console.log('El elemento se abrió'); } });
Probar en múltiples navegadores: Aunque es compatible en navegadores modernos, verificar en entornos antiguos.
Compatibilidad
Navegador | Soporte |
---|---|
Chrome | Sí (v12+) |
Firefox | Sí (v49+) |
Safari | Sí (v6+) |
Edge | Sí (v79+) |
Conclusión:
La etiqueta <details>
es perfecta para:
- Reducir la sobrecarga visual en páginas con mucho contenido.
- Crear interfaces interactivas sin JavaScript.
- Mejorar la experiencia del usuario en FAQs o menús.
¡Úsala para hacer tu contenido más limpio y accesible! ????