Skip to content

ExpressiveCSS

Browse documentation

Organization chart

A reporting line drawn top down, with each person as a card under their manager.

View as Markdown

A <ul class="org-chart"> draws a reporting line top down, with each person as a card under their manager.

Write each person as an <li>. A person with reports holds a <details open>. Its <summary class="org-chart-node"> is the card and its nested <ul> holds the reports, so selecting a card folds the team away. A person without reports holds a <div class="org-chart-node">.

A card stacks an optional .org-chart-role band first, then an .avatar and an .org-chart-name. The stylesheet draws the lines between cards. A chart wider than its container scrolls sideways inside the list. The org chart is CSS only.

  • CIOMarisol Okafor
    • ManagerTobias Lindqvist
      • SEPriya Raman
    • DirectorDesmond Achebe
      • PMLena Kowalczyk
        • OperationsRafael Montoya
        • DevelopmentHana Sato
    • ManagerOliver Brennan
      • SAAmara Nwosu
      • SPFelix Duarte
    • R&DIngrid Halvorsen
<ul class="org-chart" aria-label="Company staff">
  <li>
    <details open>
      <summary class="org-chart-node">
        <span class="org-chart-role">CIO</span>
        <img class="avatar large" src="marisol.jpg" alt="">
        <span class="org-chart-name">Marisol Okafor</span>
      </summary>
      <ul>
        <li>
          <div class="org-chart-node">
            <span class="org-chart-role">R&amp;D</span>
            <span class="avatar large" aria-hidden="true">IH</span>
            <span class="org-chart-name">Ingrid Halvorsen</span>
          </div>
        </li>
      </ul>
    </details>
  </li>
</ul>

Accessibility

Name the root list with aria-label. The nested lists carry the hierarchy, so a screen reader announces each list's size and level. The drawn lines stay silent. When the name follows the avatar, give an avatar image an empty alt and an initials avatar aria-hidden="true". Otherwise the screen reader reads the name twice.

Each manager is a Tab stop, and Enter or Space opens or closes the team. The chart takes no role="tree", for the same reason as the tree. That role promises arrow-key navigation that native disclosures do not provide.

Tokens

Override these on the .org-chart.

Token Default
--md-comp-org-chart-line-color--md-sys-color-outline-variant
--md-comp-org-chart-line-length24px
--md-comp-org-chart-gap16px
--md-comp-org-chart-node-container-color--md-sys-color-surface-container-high
--md-comp-org-chart-node-shape12px
--md-comp-org-chart-role-container-color--md-sys-color-primary-container
--md-comp-org-chart-role-color--md-sys-color-on-primary-container

No matching pages

  • Source color

    The seed every generated ramp derives from. Pick one and browse the docs — the whole theme follows. Error does not: it is a fixed hue.

    Default source: Mist Iris.

    ExpressiveCSS presets: Lagoon, Harbor, Breeze, Cobalt, Iris.

    Bold

    Soft

    Mist

    Glow