W3docs

Etiqueta HTML <details>

La etiqueta <details> muestra información adicional que el usuario puede abrir y ver. Atributos y ejemplos de la etiqueta.

La etiqueta <details> es uno de los elementos HTML5. Crea un widget de revelación: un control interactivo que el usuario puede abrir para ver contenido adicional y cerrar para ocultarlo. Por defecto el contenido permanece oculto, y el navegador muestra un pequeño triángulo (el marcador de revelación) que rota para indicar el estado abierto o cerrado.

El primer hijo de <details> debe ser un elemento <summary>, que establece la etiqueta visible que el usuario hace clic para alternar el widget. El <summary> es el control real — el resto del contenido dentro de <details> es lo que se muestra u oculta. Si omites <summary>, el navegador proporciona una etiqueta predeterminada como "Details".

Por qué usar <details>

La gran ventaja de <details> es que ofrece un widget de mostrar/ocultar completamente funcional sin nada de JavaScript. El navegador gestiona el comportamiento de abrir/cerrar, el soporte de teclado y la accesibilidad por ti.

Casos de uso habituales:

  • Listas de preguntas frecuentes (FAQ) — cada pregunta es un <summary> y la respuesta se revela al hacer clic.
  • Revelación progresiva — oculta configuraciones avanzadas, textos legales extensos o secciones de "leer más" para que la página permanezca escaneable.
  • Acordeón sin JavaScript como alternativa — como funciona sin scripting, <details> es una base sólida para acordeones. Incluso si tu JavaScript no carga, el contenido sigue siendo accesible.

Comparado con un acordeón JavaScript construido a mano, <details> requiere menos código, es accesible automáticamente con teclado y lectores de pantalla, y se degrada con elegancia. Recurre a un widget JS personalizado solo cuando necesites comportamientos que el elemento nativo no puede ofrecerte (por ejemplo, transiciones de altura animadas en todo el contenido).

Sintaxis

La etiqueta <details> viene en pares. El contenido se escribe entre las etiquetas de apertura (<details>) y cierre (</details>).

Ejemplo de la etiqueta HTML <details>:

Etiqueta HTML <details>

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <details>
      <summary>Click to see details</summary>
      <p>Detailed information is here.</p>
    </details>
  </body>
</html>

Resultado

ejemplo de details

El atributo open

Añade el atributo boolean open para que el widget esté expandido al cargar la página:

<details open>
  <summary>What is HTML?</summary>
  <p>HTML is the standard markup language for documents designed to be displayed in a web browser.</p>
</details>

El atributo open refleja el estado actual en tiempo real. Cuando el usuario alterna el widget, el navegador añade o elimina open en el elemento automáticamente — no tienes que gestionarlo. También puedes alternarlo tú mismo desde un script:

const details = document.querySelector('details');
details.open = true;   // expand
details.open = false;  // collapse

Leer details.open te indica si el widget está actualmente abierto.

Ejemplo de la etiqueta HTML <details> dentro de una etiqueta <form>:

Etiqueta HTML <details>

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <form action="action_form.php" method="get">
      <details>
        <summary>Departure airport:</summary>
        <input type="text" list="airports" name="airports" />
        <datalist id="airports">
          <option value="Birmingham">
          <option value="Cambridge">
          <option value="Oxford">
          <option value="Bangor">
        </datalist>
        <input type="submit" value="confirm" />
      </details>
    </form>
  </body>
</html>

Atributos

AtributoValorDescripción
openopenIndica que la información de la etiqueta debe mostrarse inicialmente en forma expandida.

La etiqueta <details> también admite los Atributos Globales y los Atributos de Evento.

Cómo dar estilo a una etiqueta HTML <details>

details {
  border: 1px solid #ccc;
  border-radius: 4px;
  padding: 0.5em;
}
summary {
  font-weight: bold;
  cursor: pointer;
}

Dar estilo al marcador de revelación

La mayoría de los navegadores renderizan el triángulo de abrir/cerrar mediante el pseudoelemento ::marker en el <summary>. Para cambiarlo o eliminarlo, establece list-style en el summary:

/* Remove the default triangle */
summary {
  list-style: none;
}

/* Replace it with your own characters */
summary::marker {
  content: "▶ ";
}
details[open] summary::marker {
  content: "▼ ";
}

Los navegadores más antiguos basados en WebKit (Safari/Chrome antiguos) usaban un pseudoelemento no estándar summary::-webkit-details-marker en su lugar. Para cubrirlos, ocúltalo también:

summary::-webkit-details-marker {
  display: none;
}

El evento toggle

El elemento <details> dispara un evento toggle cada vez que se abre o cierra. Este es el gancho adecuado para carga diferida de contenido, envío de analíticas o sincronización del estado de la interfaz:

const details = document.querySelector('details');

details.addEventListener('toggle', () => {
  if (details.open) {
    console.log('Opened');
  } else {
    console.log('Closed');
  }
});

El evento se ejecuta después de que el estado ya ha cambiado, por lo que details.open refleja el nuevo valor dentro del manejador.

Accesibilidad

La combinación nativa <details>/<summary> incluye accesibilidad integrada. Los navegadores exponen el <summary> con un rol similar al de botón y el <details> como un group, anuncian el estado expandido/contraído a los lectores de pantalla, y hacen que el summary sea enfocable y operable con Enter y Space. Esta es una razón clave para preferir el elemento nativo sobre un acordeón basado en script — obtienes semántica correcta y soporte de teclado de forma gratuita, sin necesidad de gestionar aria-expanded tú mismo.

Agrupación con el atributo name

Los navegadores modernos (Chrome 120+ y otros motores recientes) admiten un atributo name en <details>. Cuando varios elementos <details> comparten el mismo name, se comportan como un grupo exclusivo, como un acordeón: abrir uno cierra automáticamente los demás.

<details name="faq" open>
  <summary>Question one</summary>
  <p>Answer one.</p>
</details>
<details name="faq">
  <summary>Question two</summary>
  <p>Answer two.</p>
</details>

Al ser una característica más reciente, los navegadores que no admiten name simplemente lo ignoran y permiten que cada widget se abra de forma independiente — una mejora progresiva segura.

Etiquetas relacionadas

  • <summary> — la etiqueta visible y el control de un widget <details>.
  • <dialog> — un cuadro de diálogo modal o no modal nativo, útil cuando necesitas una superposición en lugar de una revelación en línea.

Práctica

Práctica
¿Qué es cierto sobre la etiqueta HTML <details>?
¿Qué es cierto sobre la etiqueta HTML <details>?
Was this page helpful?