- `` es un elemento HTML que representa semánticamente una lista de pares nombre–valor, adecuado para patrones de UI como amenidades, cargos desglosados o glosarios técnicos
- Una lista de descripciones se estructura colocando
nombres** y ** valores dentro de un ``, y un mismo nombre puede tener varios valores asociados
- Cuando hace falta agrupar
dt y dd relacionados para aplicar estilos, según la especificación solo un wrapper `` puede envolver el grupo
- Si se usan solo
anidados, a las tecnologías de asistencia les cuesta más reconocer el patrón de lista, mientras que aporta ventajas de navegación como cantidad de ítems, posición actual y omitir la lista
- Incluso datos de distintas formas, como los bloques de estadísticas de Dungeons & Dragons, pueden dividirse en listas de descripciones, lo que deja clara su versatilidad
El patrón que representa ``
- `` es un elemento HTML que representa una lista de pares nombre–valor y aporta significado semántico a un patrón que aparece repetidamente en las interfaces web
- Estructuras donde nombre y valor van emparejados, como amenidades de un alojamiento, cargos individuales del alquiler mensual o glosarios técnicos, son candidatas típicas
no es un elemento aislado, sino una combinación de tres elementos:, y para formar grupos de nombre–valor
- Antes de HTML5, `` se conocía como definition list y originalmente era un elemento para representar glosarios de términos y definiciones
Estructura básica de una lista de descripciones
-
, , ``
- **
** envuelve toda la lista de descripciones, de forma parecida a cómo o `` envuelven una lista completa
** es el término de descripción (description term) y representa el nombre, mientras que ** es el detalle de descripción (description detail) y representa el valor
y antes también se conocían respectivamente como definition term y definition detail
- La estructura básica consiste en poner un
seguido de un
Title
Designing with Web Standards
-
Varios pares nombre–valor
- Para agregar otros pares nombre–valor dentro de la misma lista, se colocan nuevos
y a continuación
Title
Designing with Web Standards
Publisher
New Riders Pub; 3rd edition (October 19, 2009)
-
Varios valores para un mismo nombre
- Un solo
** puede tener varios **valores
- Permite expresar directamente estructuras donde un mismo nombre tiene varios valores asociados, como cuando un libro tiene varios autores
Title
Designing with Web Standards
Author
Jeffrey Zeldman
Ethan Marcotte
Publisher
New Riders Pub; 3rd edition (October 19, 2009)
-
Wrapper para estilos
- Cuando hace falta agrupar
dt y dd relacionados con fines de estilo, se puede usar un wrapper ``
- Según la especificación, el único elemento wrapper que puede envolver un grupo
dt/dd es ``
- Para ver con más detalle la estructura permitida y las restricciones, se puede consultar la documentación de `` en MDN o la especificación HTML
Title
Designing with Web Standards
Author
Jeffrey Zeldman
Ethan Marcotte
Por qué hace falta semántica
- Los grupos nombre–valor pueden construirse visualmente solo con `` anidados, pero para el navegador o las tecnologías de asistencia es más difícil reconocerlos como un patrón de lista
- La elección de elementos semánticos puede decidirse según si, al reconocer ese patrón, la computadora puede ofrecer beneficios reales al usuario
- Si se usa ``, quienes usan lectores de pantalla pueden navegar con más facilidad una lista de grupos nombre–valor
- Pueden saber la cantidad de grupos nombre–valor dentro de la lista
- Pueden identificar en qué posición se encuentran dentro de la lista actual
- Si no les interesa, pueden omitir toda la lista como si fuera un solo bloque
- En una estructura de
anidados, cada nombre y valor se procesa como un nodo de texto independiente, pero aporta significado estructural a la misma información
- Estas ventajas realmente se ofrecen al usar `` en la mayoría de las combinaciones de navegador/lector de pantalla
- Aun así, como el soporte de
todavía no es totalmente generalizado, si la experiencia de fallback como nodos de texto independientes no es suficiente, también se podría optar por otro elemento como hasta que el soporte mejore
Ejemplo de bloque de estadísticas de Dungeons & Dragons
- El bloque de estadísticas de Dungeons & Dragons es un ejemplo con muchos pares nombre–valor, y dentro de un mismo bloque pueden encontrarse varios candidatos para listas de descripciones
- Se pueden separar en listas de descripciones los valores básicos como Armor Class, Hit Points y Speed; las puntuaciones de habilidad como STR y DEX; la información de competencia como Senses, Languages y Challenge; y también Traits y Actions
- Incluso listas visualmente distintas, como una lista de habilidades y otra de ataques, pueden representarse ambas con el patrón de lista de descripciones
- Para distinguir varias listas de descripciones o vincularlas con un título, se pueden usar
aria-label y aria-labelledby
- Este marcado es solo una de las formas posibles y muestra lo versátil que es el patrón ``, al poder aplicarse a conjuntos de datos de formas diferentes
2 comentarios
Opiniones de Lobste.rs
Aunque es cierto que la mayoría de las implementaciones no lo soportan. En cambio, Typst, que es un sistema de composición tipográfica/lenguaje de marcado, ofrece las listas de descripción como sintaxis de primera clase, como
/ term: description, así que creo que combina bien también con las listas con viñetas-y las listas numeradas automáticas+<details>, sin duda está entre los mejores. Ojalá hubiera más elementos interactivos como este<dt>en una sola entrada. Puede servir para expresar cosas como sinónimos en una lista tipo diccionarioAl darle estilo con CSS, conviene familiarizarse con el selector de hermanos adyacentes
Referencia: https://developer.mozilla.org/en-US/docs/…
Comentarios de Hacker News
Esto está mal:
no tiene un rol implícito correspondiente, pero sí se le pueden asignar los roles `group`, `list`, `none`, `presentation` `aria-label` solo puede definirse en elementos que tengan un rol compatible, ya sea implícito o explícito, y aunque `aria-label` está permitido en la mayoría de los roles, aquí `presentation` y `none` quedan fuera, así que solo quedan `group` y `list` `group` se siente raro y `list` es aceptable, así que la conclusión es **quitar `aria-label`** o agregar `role="list"`. Entonces los hijos también necesitarían `role="listitem"` Lo que el artículo pasó por alto es que no solo puede haber un, sino varias seguidas. El ejemplo de la especificación es bueno: https://html.spec.whatwg.org/multipage/grouping-content.html... Esto no es un par nombre-valor, sino un grupo de nombre-valorrole="listitem"al elementoque envuelvey? `role="listitem"` parece estar permitido en, pero cuando se agrupan variosjuntos no parece del todo correcto, y tampoco tengo claro si eso rompería la forma en quese interpreta originalmente como términoEsto no será popular aquí, pero mi vida mejoró cuando dejé de intentar usar HTML semántico. El diseño simplemente no es muy bueno Cada vez que intenté usar
, terminé arrepintiéndome. Porque hacía falta varios niveles de wrappers, o separadores entre secciones, o íconos, o un encabezado que abarcara varios pares clave-valor Tiene cierta flexibilidad, pero está muy lejos de poder manejar de verdad la idea generalizada que dice representar. Claro, sigo usando elementos equivalentes como, `` cuando aportan beneficios observables, pero si no encaja exactamente con el modelo de datos y además hay que sobrescribirlo todo, no es una opción práctica Si el 99% de los usos evita la API, probablemente no sea tan polémico decir que el problema es la APIdocument.speakText. Lo que en realidad tienen es una API extraña que lee el texto de la página cuando cambia. Hay que conectar esas dos cosas, y aunque se implemente bien, sigue siendo difícil y medio hacky. Pero bueno, al menos el enfoque de live region será HTML semánticamente purodisplay:contentspermite eliminar wrappers, también debería introducirse una forma de agrupar elementos como si compartieran un ancestro común:wrap(dt, dt+dd) {border: solid 1px}402 Payment Required,407 Proxy Authentication Required,508 Loop Detectedparecen intentos de meter funciones específicas de cierta app o cierto tipo de despliegue en la base misma de la web No entiendo por qué las necesidades concretas de quienes escribieron los RFC se implementan en la base de la web, mientras que yo tengo que encontrar alguna coincidencia medio accidental y meter todos los elementos específicos de mi app dentro de400 Bad Requesto500 Internal Server Error. Cada vez que veo una web app usando de verdad más que el mínimo indispensable de códigos de estado HTTP, no puedo evitar poner los ojos en blanco. Eso debería ir en la capa de aplicación. Este protocolo no fue hecho para ti, sino para apps del stack LAMP que en su mayoría servían recursos estáticosClase de historia de listas. Si ves el manual de DCF/GML para mainframe IBM de 1985 más abajo, DL-DT-DD ya existía desde antes de la web En un documento de hace más de 40 años aparecen no solo las Definition lists (DL), sino también Glossary lists (GL), Ordered lists (OL), Unordered lists (UL) y Simple lists (SL) ibm :: 370 :: DCF :: SH35-0050-2 Document Composition Facility Generalized Markup Language Implementation Guide Rel 3 Mar85 https://archive.org/details/bitsavers_ibm370DCFSpositionFaci...
:p., y en vez de `era:li.`. Por la época en que TBL desarrollaba HTML y HTTP, entre 1990 y 1991, también hubo un intento llamado HyTime, una aplicación SGML enfocada en hipermedia. HTML la desplazó bastante rápido Para Charles Goldfarb, que impulsó GML/SGML, ver https://en.wikipedia.org/wiki/Charles_Goldfarb, y para SGML ver https://en.wikipedia.org/wiki/Standard_Generalized_Markup_La...El primer sitio web del mundo usa mucho `` https://info.cern.ch/hypertext/WWW/TheProject.html https://info.cern.ch/ es una especie de landing page que da contexto y dirección sobre el verdadero primer sitio web
Los toolkits GUI nativos están todos muertos, y ahora la gente puede escribir ensayos larguísimos sobre un solo elemento HTML. No sé si eso cuenta como progreso
Antes de HTML5 esto se llamaba definition list, y recién ahora me entero de que originalmente `` solo pretendía representar glosarios con términos y definiciones. Llevo 10 años llamándolo mal
bsignifica “bring attention to”. Qué cosaBuen artículo. Como observación muy menor, el elemento
smallno debería usarse para subtítulos; para eso debería usarse el elementohgroupEl elementosmallrepresenta comentarios secundarios, como texto pequeño. El texto pequeño suele incluir descargos, advertencias, restricciones legales y copyright. A veces también se usa para cumplir requisitos de atribución o licencia (https://html.spec.whatwg.org/multipage/text-level-semantics....)Hay una nota útil sobre qué tan bien los lectores de pantalla soportan ``: https://adrianroselli.com/2025/01/updated-brief-note-on-desc...
Viendo el último ejemplo de la hoja de atributos de DnD, me pregunto si también es legal anidar `` Por ejemplo, ¿se puede hacer algo como
Actions ...?Me gusta
. Al menos antes, parecía que las tablas se usaban mal más seguido como, y la incomodidad del marcado de tablas es peor que tener variosdivfirstsecondwhateverMe parece más simple y limpio que cualquier sintaxis de tablas de Markdown