<div class="c-dropdown c-dropdown--centered-list">
    <button class="c-dropdown__button" aria-expanded="false" aria-controls="sample-id">
        <span class="c-dropdown__button-text">All case studies</span>
        <span class="c-dropdown__button-icon"><svg class="u-elevation-level-600 c-icon c-icon--20" aria-hidden="true" focusable="false">
                <use xlink:href="#icn-arrow-bottom-24px"></use>
            </svg></span>
    </button>
    <ul class="c-dropdown__list" id="sample-id">
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#foo">Foo</a>
        </li>
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#bar">Bar</a>
        </li>
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#lorem">Lorem</a>
        </li>
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#ipsum">Ipsum</a>
        </li>
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#foo">Foo</a>
        </li>
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#bar">Bar</a>
        </li>
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#lorem">Lorem</a>
        </li>
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#ipsum">Ipsum</a>
        </li>
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#foo">Foo</a>
        </li>
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#bar">Bar</a>
        </li>
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#lorem">Lorem</a>
        </li>
        <li class="c-dropdown__list-item">

            <a class="c-dropdown__link" href="#ipsum">Ipsum</a>
        </li>
    </ul>
</div>
{% import "@macros" as macroNav %}

<div class="c-dropdown{% if modifier is defined %} {{ modifier }}{% endif %}">
  <button class="c-dropdown__button" aria-expanded="false" aria-controls="{{ id }}">
    <span class="c-dropdown__button-text">{{- buttonText|t|raw-}}</span>
    <span class="c-dropdown__button-icon">
      {%- include "@icon" with { modifier: "c-icon--20", symbol: "icn-arrow-bottom-24px" } -%}
    </span>
  </button>
  <ul class="c-dropdown__list" id="{{ id }}">
    {% for item in items %}
    <li class="c-dropdown__list-item">
      {# <a class="c-dropdown__link {{ macroNav.is_active_dropdown(item.url) }}" href="{{ item.url }}">{{ item.title|t }}</a> #}
      <a class="c-dropdown__link" href="{{ siteUrl }}{{ item.url }}">{{ item.title|t }}</a>
    </li>
    {% endfor %}
  </ul>
</div>
{
  "buttonText": "All case studies",
  "id": "sample-id",
  "items": [
    {
      "title": "Foo",
      "url": "#foo"
    },
    {
      "title": "Bar",
      "url": "#bar"
    },
    {
      "title": "Lorem",
      "url": "#lorem"
    },
    {
      "title": "Ipsum",
      "url": "#ipsum"
    },
    {
      "title": "Foo",
      "url": "#foo"
    },
    {
      "title": "Bar",
      "url": "#bar"
    },
    {
      "title": "Lorem",
      "url": "#lorem"
    },
    {
      "title": "Ipsum",
      "url": "#ipsum"
    },
    {
      "title": "Foo",
      "url": "#foo"
    },
    {
      "title": "Bar",
      "url": "#bar"
    },
    {
      "title": "Lorem",
      "url": "#lorem"
    },
    {
      "title": "Ipsum",
      "url": "#ipsum"
    }
  ],
  "modifier": "c-dropdown--centered-list"
}
  • Content:
    $dropdown-raw-gap: spacing(space-16); // gap used to separate button to dropdown list
    
    .c-dropdown {
      position: relative;
      max-width: remify(340px);
      display: inline-block;
    }
    
    .c-dropdown__label {
      @include font-scale(level-3, $font-secondary, regular);
    }
    
    .c-dropdown__button {
      @include font-scale(level-3, $font-secondary, regular);
      display: inline-flex;
      align-items: center;
      justify-content: space-between;
      background-color: useHSL(--base-100);
      width: 100%;
      border: 0;
      box-sizing: border-box;
      padding: spacing(space-16) spacing(space-24);
      overflow: hidden;
      color: useHSL(--primary-100);
      cursor: pointer;
      box-shadow: inset 0px 0 0px remify(1px) useHSL(--primary-100);
    }
    
    .c-dropdown__button:focus,
    .c-dropdown__button:focus-within, 
    .c-dropdown__button:active {
      outline: 0px solid transparent;
      box-shadow: inset 0px 0 0px remify(1px) useHSL(--highlight-100);
    
      .c-dropdown__list {
        opacity: 1;
        visibility: visible;
      }
    
    }
    
    .c-dropdown__button-icon {
      margin-left: spacing(space-8);
    }
    
    .c-dropdown__button:hover {
      
      .c-dropdown__button-icon {
        color: useHSL(--accent-100);
      }
    
    }
    
    .c-dropdown__list {
      position: absolute;
      top: 100%;
      left: 0;
      background-color: useHSL(--base-100);
      width: remify(340px);
      @include shadow(level-500);
      text-align: left;
      display: none;
      list-style: none;
      // max-height: remify(230px);
      overflow-y: scroll;
      z-index: $zIndex-dropdown-list;
      
      // Styles when dropdown opens in off-canvas nav
      .c-nav--off-canvas & {
        position: relative;
        top: 0;
        left: 0;
        width: 100vw;
        box-shadow: none;
        text-align: left;
        max-height: initial;
        overflow-y: initial;
        margin-left: -#{spacing(space-16)};
      }
    
    }
    
    .c-dropdown.is-open {
    
      .c-dropdown__list {
        display: block;
      }
    
      .c-dropdown__button-icon {
        transform: rotate(180deg);
        color: useHSL(--accent-100);
      }
    
    }
    
    .c-dropdown__list-item {
      z-index: 1;
      position: relative;
      color: useHSL(--primary-100);
    }
    
    .c-dropdown__link {
      display: block;
      padding: spacing(space-16) spacing(space-24);
      color: inherit;
      text-decoration: none;
      background-color: useHSL(--base-100);
      @include font-scale(level-3, $font-secondary, regular);
    
      // Styles when dropdown opens in off-canvas nav
      .c-nav--off-canvas & {
        background-color: useHSL(--grey);
        padding: spacing(space-16);
      }
    
    }
    
    .c-dropdown__link:hover {
      background-color: useHSL(--geyser-blue);
    }
    
    .c-dropdown__link:focus,
    .c-dropdown__link.is-active {
      background-color: useHSL(--primary-100);
      color: useHSL(--base-100);
    
      // Styles when dropdown opens in off-canvas nav
      .c-nav--off-canvas & {
        background-color: useHSL(--accent-100);
      }
    
    }
    
    /*------------------------------------*
      Raw modifier
    *------------------------------------*/
    .c-dropdown--raw {
     
      .c-dropdown__button {
        justify-content: initial;
        background-color: transparent;
        box-shadow: none;
        padding: 0;
        font-family: inherit;
      }
    
      .c-dropdown__button:focus,
      .c-dropdown__button:focus-within, 
      .c-dropdown__button:active {
        @include outline;
      }
    
      .c-dropdown__list {
        margin-top: $dropdown-raw-gap;
      }
      
    }
    
    /*------------------------------------*
      Centered-list modifier
    *------------------------------------*/
    .c-dropdown--centered-list {
     
      .c-dropdown__list {
        left: 50%;
        transform: translateX(-50%);
        
        // Styles when dropdown opens in off-canvas nav
      .c-nav--off-canvas & {
        left: 0;
        transform: initial;
      }
    
      }
      
    }
    
    /*------------------------------------*
      Nav modifier
    *------------------------------------*/
    .c-dropdown--nav {
    
      .c-dropdown__button {
        @extend .c-nav__link;
      }
    
    }
    
    /*------------------------------------*
      No-js version for progressive enhancement
    *------------------------------------*/
    .no-js {
    
      .c-dropdown:hover .c-dropdown__list,
      .c-dropdown__button:focus ~ .c-dropdown__list,
      .c-dropdown__button:active ~ .c-dropdown__list {
        display: block;
      }
    
      .c-dropdown--raw {
        .c-dropdown__button::after {
          content: '';
          display: block;
          width: 100%;
          height: calc(100% + $dropdown-raw-gap);
          background-color: transparent;
          position: absolute;
          top: 0;
          left: 0;
        }
      }
    
    }
  • URL: /components/raw/dropdown/_dropdown.scss
  • Filesystem Path: src/pattern-library/02-components/dropdown/_dropdown.scss
  • Size: 4.2 KB

No notes defined.