# Element “dl” is missing a required instance of child element “dd”.

> Canonical HTML version: https://rocketvalidator.com/html-validation/element-dl-is-missing-a-required-instance-of-child-element-dd
> Attribution: Rocket Validator (https://rocketvalidator.com)
> License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

The `<dl>` element represents a description list — a collection of name-value groups where `<dt>` elements provide the terms (or names) and `<dd>` elements provide the associated descriptions (or values). According to the HTML specification, the content model for `<dl>` requires that each `<dt>` group be followed by one or more `<dd>` elements. A `<dl>` with only `<dt>` elements and no `<dd>` elements is invalid HTML.

This matters for several reasons. Assistive technologies like screen readers rely on the proper `<dt>`/`<dd>` pairing to convey the relationship between terms and their descriptions. A description list without descriptions is semantically meaningless — it's like having a dictionary with words but no definitions. Browsers may also render the list inconsistently when the expected structure is incomplete.

Common causes of this error include:

- Accidentally using `<dl>` and `<dt>` to create a simple list instead of using `<ul>` or `<ol>`.
- Dynamically generated content where the `<dd>` elements are missing due to empty data.
- Incomplete markup where the developer forgot to add the description elements.

To fix this issue, make sure every `<dt>` element inside a `<dl>` is followed by at least one `<dd>` element. If you don't actually need a description list, consider using a different element like `<ul>` for simple lists.

## Examples

### Invalid: `<dl>` with only `<dt>` and no `<dd>`

```html
<dl>
  <dt>The Meaning of Life</dt>
</dl>
```

This is invalid because the `<dt>` term has no corresponding `<dd>` description.

### Fixed: Adding a `<dd>` element

```html
<dl>
  <dt>The Meaning of Life</dt>
  <dd>A philosophical question about the significance of existence.</dd>
</dl>
```

### Invalid: Multiple terms without any descriptions

```html
<dl>
  <dt>HTML</dt>
  <dt>CSS</dt>
  <dt>JavaScript</dt>
</dl>
```

This triggers the error because none of the terms have associated descriptions.

### Fixed: Each term with a description

```html
<dl>
  <dt>HTML</dt>
  <dd>A markup language for structuring web content.</dd>
  <dt>CSS</dt>
  <dd>A style sheet language for describing presentation.</dd>
  <dt>JavaScript</dt>
  <dd>A programming language for web interactivity.</dd>
</dl>
```

### Valid: Multiple terms sharing a single description

Multiple `<dt>` elements can share a single `<dd>`, which is useful for synonyms or aliases:

```html
<dl>
  <dt>Laptop</dt>
  <dt>Notebook</dt>
  <dd>A portable personal computer with a clamshell form factor.</dd>
</dl>
```

### Valid: A single term with multiple descriptions

A `<dt>` can also be followed by multiple `<dd>` elements:

```html
<dl>
  <dt>Python</dt>
  <dd>A large constricting snake.</dd>
  <dd>A high-level programming language.</dd>
</dl>
```

### Valid: Using `<div>` to wrap name-value groups

The HTML spec allows wrapping each `<dt>`/`<dd>` group in a `<div>` for styling purposes. Each `<div>` must still contain at least one `<dd>`:

```html
<dl>
  <div>
    <dt>Name</dt>
    <dd>Jane Doe</dd>
  </div>
  <div>
    <dt>Email</dt>
    <dd>jane@example.com</dd>
  </div>
</dl>
```

### Alternative: Use `<ul>` when descriptions aren't needed

If you only need a list of items without descriptions, a `<dl>` is the wrong element. Use an unordered list instead:

```html
<ul>
  <li>HTML</li>
  <li>CSS</li>
  <li>JavaScript</li>
</ul>
```
