Accordion

Expandable content sections built on native <details> and <summary>. The --exclusive modifier uses the name attribute for mutual exclusivity with no JavaScript.

Default

index.htmlhtml
<div class="ln-accordion">
  <details class="ln-accordion__item" open>
    <summary class="ln-accordion__summary">
      <span class="ln-accordion__title">What is vertical rhythm?</span>
      <i class="fa-solid fa-chevron-down ln-accordion__icon" aria-hidden="true"></i>
    </summary>
    <div class="ln-accordion__content">
      <p>Vertical rhythm is a design principle where all vertical
         spacing and line-heights are multiples of a base unit.</p>
    </div>
  </details>
  <details class="ln-accordion__item">
    <summary class="ln-accordion__summary">
      <span class="ln-accordion__title">What grid does ln use?</span>
      <i class="fa-solid fa-chevron-down ln-accordion__icon" aria-hidden="true"></i>
    </summary>
    <div class="ln-accordion__content">
      <p>An 8px base grid for all boxes, and a 24px line grid for
         running text and headings.</p>
    </div>
  </details>
  <details class="ln-accordion__item">
    <summary class="ln-accordion__summary">
      <span class="ln-accordion__title">Do borders break the grid?</span>
      <i class="fa-solid fa-chevron-down ln-accordion__icon" aria-hidden="true"></i>
    </summary>
    <div class="ln-accordion__content">
      <p>No. All visible borders use inset box-shadows, which take no
         space in the box model.</p>
    </div>
  </details>
</div>
What is vertical rhythm?

Vertical rhythm is a design principle where all vertical spacing and line-heights are multiples of a base unit.

What grid does ln use?

An 8px base grid for all boxes, and a 24px line grid for running text and headings.

Do borders break the grid?

No. All visible borders use inset box-shadows, which take no space in the box model.

Flush accordion

index.htmlhtml
<div class="ln-accordion ln-accordion--flush">
  <details class="ln-accordion__item" open>
    <summary class="ln-accordion__summary">
      <span class="ln-accordion__title">No borders between items</span>
      <i class="fa-solid fa-chevron-down ln-accordion__icon" aria-hidden="true"></i>
    </summary>
    <div class="ln-accordion__content">
      <p>The flush modifier removes all divider lines.</p>
    </div>
  </details>
  <details class="ln-accordion__item">
    <summary class="ln-accordion__summary">
      <span class="ln-accordion__title">Useful inside cards</span>
      <i class="fa-solid fa-chevron-down ln-accordion__icon" aria-hidden="true"></i>
    </summary>
    <div class="ln-accordion__content">
      <p>When embedded in a card body, flush avoids doubled borders.</p>
    </div>
  </details>
</div>
No borders between items

The flush modifier removes all divider lines.

Useful inside cards

When embedded in a card body, flush avoids doubled borders.

Reference

ClassDescriptionResponsive
.ln-accordionAccordion containerNo
.ln-accordion__itemIndividual expandable item (uses <details>)No
.ln-accordion__summaryClickable header row (uses <summary>)No
.ln-accordion__titleTitle text within the summaryNo
.ln-accordion__iconChevron icon that rotates on openNo
.ln-accordion__contentExpandable body contentNo
.ln-accordion--flushRemove item bordersNo
.ln-accordion--smCompact size with smaller textNo