Brand

Responsive Horizontal-to-Scrollable Menu

This example shows how you can build upon Pure menu classes such as pure-menu-horizontal and pure-menu-scrollable. At wide window-widths we display a horizontal menu. At smaller window-widths, we switch to a scrollable horizontal menu with a toggle control. Older IE clients won't get all the bells and whistles, but it should still be usable. Remember that the JavaScript provided is plain vanilla JS so it won't work in some browsers; you'll need to polyfill or adapt the code to your library of choice.

Code reproduced below:

<style>
      .custom-menu-wrapper {
          background-color: #808080;
          margin-bottom: 2.5em;
          white-space: nowrap;
          position: relative;
      }

      .custom-menu {
          display: inline-block;
          width: auto;
          vertical-align: middle;
          -webkit-font-smoothing: antialiased;
      }

      .custom-menu .pure-menu-link,
      .custom-menu .pure-menu-heading {
          color: white;
      }

      .custom-menu .pure-menu-link:hover,
      .custom-menu .pure-menu-heading:hover {
          background-color: transparent;
      }

      .custom-menu-top {
          position: relative;
          padding-top: .5em;
          padding-bottom: .5em;
      }

      .custom-menu-brand {
          display: block;
          text-align: center;
          position: relative;
      }

      .custom-menu-toggle {
          width: 44px;
          height: 44px;
          display: block;
          position: absolute;
          top: 3px;
          right: 0;
          display: none;
      }

      .custom-menu-toggle .bar {
          background-color: white;
          display: block;
          width: 20px;
          height: 2px;
          border-radius: 100px;
          position: absolute;
          top: 22px;
          right: 12px;
          -webkit-transition: all 0.5s;
          -moz-transition: all 0.5s;
          -ms-transition: all 0.5s;
          transition: all 0.5s;
      }

      .custom-menu-toggle .bar:first-child {
          -webkit-transform: translateY(-6px);
          -moz-transform: translateY(-6px);
          -ms-transform: translateY(-6px);
          transform: translateY(-6px);
      }

      .custom-menu-toggle.x .bar {
          -webkit-transform: rotate(45deg);
          -moz-transform: rotate(45deg);
          -ms-transform: rotate(45deg);
          transform: rotate(45deg);
      }

      .custom-menu-toggle.x .bar:first-child {
          -webkit-transform: rotate(-45deg);
          -moz-transform: rotate(-45deg);
          -ms-transform: rotate(-45deg);
          transform: rotate(-45deg);
      }

      .custom-menu-screen {
          background-color: rgba(0, 0, 0, 0.5);
          -webkit-transition: all 0.5s;
          -moz-transition: all 0.5s;
          -ms-transition: all 0.5s;
          transition: all 0.5s;
          height: 3em;
          width: 70em;
          position: absolute;
          top: 0;
          z-index: -1;
      }

      .custom-menu-tucked .custom-menu-screen {
          -webkit-transform: translateY(-44px);
          -moz-transform: translateY(-44px);
          -ms-transform: translateY(-44px);
          transform: translateY(-44px);
      }

      @media (max-width: 62em) {

          .custom-menu {
              display: block;
          }

          .custom-menu-toggle {
              display: block;
              display: none\9;
          }

          .custom-menu-bottom {
              position: absolute;
              width: 100%;
              border-top: 1px solid #eee;
              background-color: #808080\9;
              z-index: 100;
          }

          .custom-menu-bottom .pure-menu-link {
              opacity: 1;
              -webkit-transform: translateX(0);
              -moz-transform: translateX(0);
              -ms-transform: translateX(0);
              transform: translateX(0);
              -webkit-transition: all 0.5s;
              -moz-transition: all 0.5s;
              -ms-transition: all 0.5s;
              transition: all 0.5s;
          }

          .custom-menu-bottom.custom-menu-tucked .pure-menu-link {
              -webkit-transform: translateX(-140px);
              -moz-transform: translateX(-140px);
              -ms-transform: translateX(-140px);
              transform: translateX(-140px);
              opacity: 0;
              opacity: 1\9;
          }

          .pure-menu-horizontal.custom-menu-tucked {
              z-index: -1;
              top: 45px;
              position: absolute;
              overflow: hidden;
          }

      }
      </style>
      <div class="custom-menu-wrapper">
          <div class="pure-menu custom-menu custom-menu-top">
              <a href="#" class="pure-menu-heading custom-menu-brand">Brand</a>
              <a href="#" class="custom-menu-toggle" id="toggle"><s class="bar"></s><s class="bar"></s></a>
          </div>
          <div class="pure-menu pure-menu-horizontal pure-menu-scrollable custom-menu custom-menu-bottom custom-menu-tucked" id="tuckedMenu">
              <div class="custom-menu-screen"></div>
              <ul class="pure-menu-list">
                  <li class="pure-menu-item"><a href="#" class="pure-menu-link">Home</a></li>
                  <li class="pure-menu-item"><a href="#" class="pure-menu-link">About</a></li>
                  <li class="pure-menu-item"><a href="#" class="pure-menu-link">Contact</a></li>
                  <li class="pure-menu-item"><a href="#" class="pure-menu-link">Blog</a></li>
                  <li class="pure-menu-item"><a href="#" class="pure-menu-link">GitHub</a></li>
                  <li class="pure-menu-item"><a href="#" class="pure-menu-link">Twitter</a></li>
                  <li class="pure-menu-item"><a href="#" class="pure-menu-link">Apple</a></li>
                  <li class="pure-menu-item"><a href="#" class="pure-menu-link">Google</a></li>
                  <li class="pure-menu-item"><a href="#" class="pure-menu-link">Wang</a></li>
                  <li class="pure-menu-item"><a href="#" class="pure-menu-link">Yahoo</a></li>
                  <li class="pure-menu-item"><a href="#" class="pure-menu-link">W3C</a></li>
              </ul>
          </div>
      </div>
      <script>
      (function (window, document) {
      document.getElementById('toggle').addEventListener('click', function (e) {
          document.getElementById('tuckedMenu').classList.toggle('custom-menu-tucked');
          document.getElementById('toggle').classList.toggle('x');
      });
      })(this, this.document);
      </script>