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
Taby 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! ????