PF-Accordion-Menu
ready

Introduction

CSS-only sidebar navigation

In the following example, Disbursements, Assignment notices, Search, and Banking details can expand sub-trees.

Disbursements, and Banking details have no separate link, so will expand when clicked upon.

Assignment notices, and Search have their own links, so the user will need to click on the accordion buttons to expand.

Read here for more information around using SVG sprites.

Examples

Menu

<nav>
  <ul class="pf-accordion-menu">
    <li>
      <!-- Top level link with no submenu -->
      <a href="#">
        <svg class="icon-svg">
          <use xlink:href="/v2.7/assets/images/icons/sprite.svg#dashboard" />
        </svg>
        Dashboard
      </a>
    </li>
    <li>
      <!-- Top level menu item with submenu -->
      <!-- order of elements is very significant! -->
      <!-- input, then label/link, then another label for toggle button, then ul for nested menu -->
      <input id="menu1a" type="checkbox">
      <!-- if a top level link is not required, use a label with "for" to hook it into checkbox -->
      <label for="menu1a">
        <svg class="icon-svg">
          <use xlink:href="/v2.7/assets/images/icons/sprite.svg#disbursement" />
        </svg>
        Disbursements
      </label>
      <!-- if a submenu is needed, include this label, hooked into the previous checkbox -->
      <label for="menu1a" class="pf-accordion-menu__fakecheck">
        <svg class="icon-svg">
          <use xlink:href="/v2.7/assets/images/icons/sprite.svg#chevron-down" />
        </svg>
      </label>
      <!-- submenu list -->
      <ul>
        <li><a href="#">Active disbursements</a></li>
        <li><a href="#">Adjustment tracker</a></li>
        <li><a href="#">Funds breakdown</a></li>
        <li><a href="#">Internal</a></li>
        <li><a href="#">Payments</a></li>
        <li><a href="#">Audit trail</a></li>
        <li><a href="#">Files</a></li>
      </ul>
    </li>
    <li>
      <!-- Top level menu item with link and submenu, `checked` renders it already open -->
      <input id="menu2a" type="checkbox" checked>
      <a href="#">
        <svg class="icon-svg">
          <use xlink:href="/v2.7/assets/images/icons/sprite.svg#envelope" />
        </svg>
        Assignment notices
      </a>
      <label for="menu2a" class="pf-accordion-menu__fakecheck">
        <svg class="icon-svg">
          <use xlink:href="/v2.7/assets/images/icons/sprite.svg#chevron-down" />
        </svg>
      </label>
      <ul>
        <!-- active link class -->
        <li><a href="#" class="pf-accordion-menu--active">Link #1</a></li>
        <li><a href="#">Link #2</a></li>
        <li><a href="#">Link #3</a></li>
      </ul>
    </li>
    <li>
      <input id="menu3a" type="checkbox">
      <a href="#">
        <svg class="icon-svg">
          <use xlink:href="/v2.7/assets/images/icons/sprite.svg#search" />
        </svg>
        Search
      </a>
      <label for="menu3a" class="pf-accordion-menu__fakecheck">
        <svg class="icon-svg">
          <use xlink:href="/v2.7/assets/images/icons/sprite.svg#chevron-down" />
        </svg>
      </label>
      <ul>
        <li><a href="#">Link #1</a></li>
      </ul>
    </li>
    <li>
      <input id="menu4a" type="checkbox">
      <label for="menu4a">
        <svg class="icon-svg">
          <use xlink:href="/v2.7/assets/images/icons/sprite.svg#banking" />
        </svg>
        Banking details
      </label>
      <label for="menu4a" class="pf-accordion-menu__fakecheck">
        <svg class="icon-svg">
          <use xlink:href="/v2.7/assets/images/icons/sprite.svg#chevron-down" />
        </svg>
      </label>
      <ul>
        <li><a href="#">Link #1</a></li>
      </ul>
    </li>
  </ul>
</nav>

Dependencies

  • src/styles/components/blocks/_pf-accordion-menu.scss

Usage

Class/JavaScript Hook Description Required?
pf-accordion-menu root class added to top level ul element required
pf-accordion-menu__fakecheck styles the blue expand/collapse chevrons - added to labels that link to the checkboxes required
ul > li > (input[type='checkbox'] + label.pf-accordion-menu__fakecheck + ul) structure of html needed to allow expanding submenus required
pf-accordion-menu--active class added to active links optional