Eunomia v1.1.0
AllAngularReactNext.jsJavaScriptVue
EunomiaSalmonForestVioletOceanGoldFireCustom…
🇬🇧 English🇫🇷 Français

Description list

Description list shows label and value pairs describing a single object, such as the specifications of a product or the details of an order.

Overview API Examples Accessibility
Name
Single lever basin mixer
Reference
GRO-MC-001-CHR
Finishes
Chrome, brushed nickel
Supplier
Grohe

When to use

Reach for a description list to show the properties of one object, where each value is read with its label: a product's specifications, an order's details, a profile's contact information. To compare several objects across the same properties, use a table instead.

Install & usage

Pick a framework in the toolbar above and these snippets adapt.

npm install @eunomia/elements
import "@eunomia/elements/description-list.js";
<eun-description-list>
  <dl>
    <dt>Name</dt>
    <dd>Single lever basin mixer</dd>
    <dt>Reference</dt>
    <dd>GRO-MC-001-CHR</dd>
  </dl>
</eun-description-list>

Importing the file registers <eun-description-list> as a custom element, with no further setup needed. It works with any framework, or none, since it's a standard web component.

Server rendering

eun-description-list has no shadow root: one stylesheet holds its whole style. Link description-list-ssr.css to have a server-rendered list look final before the component loads.

<link
  rel="stylesheet"
  href="node_modules/@eunomia/elements/dist/ssr/description-list-ssr.css"
/>
import "@eunomia/elements/description-list-ssr.css";

Responsive behavior

Below 600px, the label moves above its value, since a narrow screen leaves too little room for both on one line, and the pairs fill a single column whatever columns is set to.

Alternatives

You want… Prefers
Several objects compared across the same properties eun-table

Guidance

  • Write a short label in each <dt> and put everything that belongs to it in the <dd>, links and tags included
  • Give a label with several values one <dd> per value, rather than joining them with commas
  • Wrap each pair in a <div> when you need columns, or a hook to style one pair
  • Place a heading right above the list when the page holds several
  • Using a description list to compare several objects: each would repeat every label, where a table names them once in its header
  • Leaving a <dd> without its <dt>, or placing anything other than <dt>, <dd> or a wrapping <div> directly in the <dl>
  • Adding a role to the <dl>, its terms or its values: it would override the native semantics

Live testing

Properties

Description list <eun-description-list>

Attributes

NameTypeDefaultDescription
layoutEunomiaDescriptionListLayout'inline'Places each label beside its value (`inline`), or above it (`stacked`)
alignEunomiaDescriptionListAlign'start'Aligns the text of the labels and values to the start, the center, or the end ; `space-between` keeps each label at the start and pushes its value to the end, when beside it
columnsnumber1Lays the pairs out in up to 4 columns, from the `mobile` breakpoint up ; each pair must be wrapped in a `<div>`
dividedbooleanfalseDraws a divider between two pairs, never above the first row

Import the exact TypeScript type behind any property above, see Types.

Slots

NameDescription
(default)A native `<dl>`, holding `<dt>`/`<dd>` pairs, each optionally wrapped in a `<div>`

CSS custom properties

NameDescription
--description-list-font-sizeSets the font size of the list
--description-list-label-colorSets the color of the labels
--description-list-label-font-weightSets the font weight of the labels
--description-list-value-colorSets the color of the values
--description-list-label-widthSets the width of the label column when the label sits beside its value ; sized to the longest label, up to 40%, by default
--description-list-row-gapSets the space between two pairs
--description-list-column-gapSets the space between a label and the value beside it, and between two columns
--description-list-label-gapSets the space between a label and the value below it
--description-list-divider-colorSets the color of the dividers drawn by `divided`

Markup conventions

Place a native <dl> directly inside <eun-description-list>. Each pair is a <dt> holding the label, followed by one or more <dd> holding its values. HTML also allows wrapping each pair in a <div>, which columns requires.

<eun-description-list>
  <dl>
    <dt>Label</dt>
    <dd>Value</dd>
  </dl>
</eun-description-list>

Layout

Inline

The default layout. Each label sits beside its value, in a column sized to the longest label, up to 40% of the list's width.

Name
Single lever basin mixer
Reference
GRO-MC-001-CHR
Last updated
October 9, 2026
<eun-description-list>
  <dl>
    <dt>Name</dt>
    <dd>Single lever basin mixer</dd>
    <dt>Reference</dt>
    <dd>GRO-MC-001-CHR</dd>
    <dt>Last updated</dt>
    <dd>October 9, 2026</dd>
  </dl>
</eun-description-list>

Stacked

layout="stacked" places each label above its value, which suits long values or a narrow container.

Delivery address
12 avenue Jean Jaurès, 30100 Alès
Instructions
Leave the parcel at the store counter if nobody answers.
<eun-description-list layout="stacked">
  <dl>
    <dt>Delivery address</dt>
    <dd>12 avenue Jean Jaurès, 30100 Alès</dd>
    <dt>Instructions</dt>
    <dd>Leave the parcel at the store counter if nobody answers.</dd>
  </dl>
</eun-description-list>

Columns

columns lays the pairs out in up to 4 columns from 600px up, each pair wrapped in a <div>. Below 600px, they fill a single column. With divided, a line runs between two rows, never above the first one.

Storage
150 m²
Items in stock
3,000+
Showroom
Bathroom and sanitary ware
After-sales
Spare parts available
<eun-description-list columns="2" layout="stacked" divided>
  <dl>
    <div>
      <dt>Storage</dt>
      <dd>150 m²</dd>
    </div>
    <div>
      <dt>Items in stock</dt>
      <dd>3,000+</dd>
    </div>
    <div>
      <dt>Showroom</dt>
      <dd>Bathroom and sanitary ware</dd>
    </div>
    <div>
      <dt>After-sales</dt>
      <dd>Spare parts available</dd>
    </div>
  </dl>
</eun-description-list>

Alignment

align aligns the text of the labels and values: start by default, center, or end. align="space-between" keeps each label at the start and pushes its value to the end, when the label sits beside it.

Subtotal
€220.00
Shipping
€28.90
Total
€248.90
<eun-description-list align="space-between" divided>
  <dl>
    <dt>Subtotal</dt>
    <dd>€220.00</dd>
    <dt>Shipping</dt>
    <dd>€28.90</dd>
    <dt>Total</dt>
    <dd>€248.90</dd>
  </dl>
</eun-description-list>

align="center" suits key figures laid out in columns.

Storage
150 m²
Items in stock
3,000+
Founded
1978
<eun-description-list columns="3" layout="stacked" align="center">
  <dl>
    <div>
      <dt>Storage</dt>
      <dd>150 m²</dd>
    </div>
    <div>
      <dt>Items in stock</dt>
      <dd>3,000+</dd>
    </div>
    <div>
      <dt>Founded</dt>
      <dd>1978</dd>
    </div>
  </dl>
</eun-description-list>

Divided

divided draws a line between two pairs.

Order
#20461
Status
Shipped
Total
€248.90
<eun-description-list divided>
  <dl>
    <dt>Order</dt>
    <dd>#20461</dd>
    <dt>Status</dt>
    <dd>Shipped</dd>
    <dt>Total</dt>
    <dd>€248.90</dd>
  </dl>
</eun-description-list>

Several values

A label followed by several <dd> lists each value on its own line. A value holds any content, such as a link or a tag.

Finishes
Chrome
Brushed nickel
Data sheets
Installation guide
Spare parts
<eun-description-list>
  <dl>
    <dt>Finishes</dt>
    <dd><eun-tag size="s">Chrome</eun-tag></dd>
    <dd><eun-tag size="s">Brushed nickel</eun-tag></dd>
    <dt>Data sheets</dt>
    <dd><eun-link href="/guide.pdf">Installation guide</eun-link></dd>
    <dd><eun-link href="/parts.pdf">Spare parts</eun-link></dd>
  </dl>
</eun-description-list>

Custom appearance

Every color, size, and space is a CSS custom property, listed in the API tab.

Diameter
1/2"
Flow
12 L/min at 3 bar
eun-description-list {
  --description-list-label-width: 10rem;
  --description-list-label-font-weight: 600;
  --description-list-label-color: var(--eun-color-primary-500);
  --description-list-row-gap: 0.5rem;
}
Variable Sets
--description-list-label-color Sets the color of the labels
--description-list-value-color Sets the color of the values
--description-list-divider-color Sets the color of the dividers drawn by divided
--description-list-label-font-weight Sets the font weight of the labels

A class on your own <dt> or <dd> overrides the list's rules too, since they stay at a low specificity.

Native semantics

eun-description-list has no shadow root, no item component and no ARIA role of its own: assistive technology meets the native <dl>, its terms and its definitions, exactly as authored. Most screen readers announce it as a list, and read each value right after its label. A <div> wrapping a pair adds nothing to the accessibility tree.

The layout only changes how the pairs look. The reading order stays the order of the markup, a label always before its values, whatever layout or columns is set.

Naming the list

A description list has no accessible name, and an aria-label on the <dl> isn't reliably announced. When a page holds several, place a heading right above each one, which screen reader users can also jump to:

<h2>Specifications</h2>
<eun-description-list>
  <dl>
    <dt>Reference</dt>
    <dd>GRO-MC-001-CHR</dd>
  </dl>
</eun-description-list>

Non-focusable

The list itself isn't focusable. Links and buttons placed in a value stay in the tab order, in the order of the markup.

Reference links

MDN: the <dl> element