Responsive Horizontal Tab Menu Slider with left and right arrow key navigation. Built with Stylus and jQuery.
Show case your content with this easy to implement presentation.
| <nav class="nav nav--active"> | |
| <ul class="nav__list"> | |
| <li class="nav__item"> | |
| <a href="" class="nav__link"> | |
| <div class="nav__thumb color1" data-letter="a"></div> | |
| <p class="nav__label">Awareness</p> | |
| </a> | |
| </li> | |
| <li class="nav__item"> | |
| <a href="" class="nav__link"> | |
| <div class="nav__thumb color2" data-letter="e"></div> | |
| <p class="nav__label">Engagement</p> | |
| </a> | |
| </li> | |
| <li class="nav__item"> | |
| <a href="" class="nav__link"> | |
| <div class="nav__thumb color3" data-letter="c"></div> | |
| <p class="nav__label">Consideration</p> | |
| </a> | |
| </li> | |
| <li class="nav__item"> | |
| <a href="" class="nav__link"> | |
| <div class="nav__thumb color4" data-letter="a"></div> | |
| <p class="nav__label">Acquisition</p> | |
| </a> | |
| </li> | |
| <li class="nav__item"> | |
| <a href="" class="nav__link"> | |
| <div class="nav__thumb color5" data-letter="r"></div> | |
| <p class="nav__label">Retention</p> | |
| </a> | |
| </li> | |
| <li class="nav__item"> | |
| <a href="" class="nav__link"> | |
| <div class="nav__thumb color6" data-letter="g"></div> | |
| <p class="nav__label">Growth</p> | |
| </a> | |
| </li> | |
| </ul> | |
| <a href="http://ettrics.com/" class="logo" target="_blank"> | |
| <img class="logo" src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/45226/ettrics-logo.svg" alt="" /> | |
| </a> | |
| </nav> | |
| <div class="page"> | |
| <section class="section section--active color1" data-letter="a"> | |
| <article class="section__wrapper"> | |
| <h1 class="section__title">Awareness</h1> | |
| <p>Use your 'left' and 'right' arrow keys to navigate.</p> | |
| </article> | |
| </section> | |
| <section class="section color2" data-letter="p"> | |
| <article class="section__wrapper"> | |
| <h1 class="section__title">Engagement</h1> | |
| <p>Use your 'left' and 'right' arrow keys to navigate.</p> | |
| </article> | |
| </section> | |
| <section class="section color3" data-letter="q"> | |
| <article class="section__wrapper"> | |
| <h1 class="section__title">Consideration</h1> | |
| <p>Use your 'left' and 'right' arrow keys to navigate.</p> | |
| </article> | |
| </section> | |
| <section class="section color4" data-letter="e"> | |
| <article class="section__wrapper"> | |
| <h1 class="section__title">Acquisition</h1> | |
| <p>Use your 'left' and 'right' arrow keys to navigate.</p> | |
| </article> | |
| </section> | |
| <section class="section color5" data-letter="s"> | |
| <article class="section__wrapper"> | |
| <h1 class="section__title">Retention</h1> | |
| <p>Use your 'left' and 'right' arrow keys to navigate.</p> | |
| </article> | |
| </section> | |
| <section class="section color6"> | |
| <article class="section__wrapper"> | |
| <h1 class="section__title">Growth</h1> | |
| <p>Use your 'left' and 'right' arrow keys to navigate.</p> | |
| </article> | |
| </section> | |
| </div> |
| var Nav = (function() { | |
| var | |
| nav = $('.nav'), | |
| section = $('.section'), | |
| link = nav.find('.nav__link'), | |
| navH = nav.innerHeight(), | |
| isOpen = true, | |
| hasT = false; | |
| var toggleNav = function() { | |
| nav.toggleClass('nav--active'); | |
| shiftPage(); | |
| }; | |
| var switchPage = function(e) { | |
| var self = $(this); | |
| var i = self.parents('.nav__item').index(); | |
| var s = section.eq(i); | |
| var a = $('section.section--active'); | |
| var t = $(e.target); | |
| if (!hasT) { | |
| if (i == a.index()) { | |
| return false; | |
| } | |
| a | |
| .addClass('section--hidden') | |
| .removeClass('section--active'); | |
| s.addClass('section--active'); | |
| hasT = true; | |
| a.on('transitionend webkitTransitionend', function() { | |
| $(this).removeClass('section--hidden'); | |
| hasT = false; | |
| a.off('transitionend webkitTransitionend'); | |
| }); | |
| } | |
| return false; | |
| }; | |
| var keyNav = function(e) { | |
| var a = $('section.section--active'); | |
| var aNext = a.next(); | |
| var aPrev = a.prev(); | |
| var i = a.index(); | |
| if (!hasT) { | |
| if (e.keyCode === 37) { | |
| if (aPrev.length === 0) { | |
| aPrev = section.last(); | |
| } | |
| hasT = true; | |
| aPrev.addClass('section--active'); | |
| a | |
| .addClass('section--hidden') | |
| .removeClass('section--active'); | |
| a.on('transitionend webkitTransitionend', function() { | |
| a.removeClass('section--hidden'); | |
| hasT = false; | |
| a.off('transitionend webkitTransitionend'); | |
| }); | |
| } else if (e.keyCode === 39) { | |
| if (aNext.length === 0) { | |
| aNext = section.eq(0) | |
| } | |
| aNext.addClass('section--active'); | |
| a | |
| .addClass('section--hidden') | |
| .removeClass('section--active'); | |
| hasT = true; | |
| aNext.on('transitionend webkitTransitionend', function() { | |
| a.removeClass('section--hidden'); | |
| hasT = false; | |
| aNext.off('transitionend webkitTransitionend'); | |
| }); | |
| } else { | |
| return | |
| } | |
| } | |
| }; | |
| var bindActions = function() { | |
| link.on('click', switchPage); | |
| $(document).on('ready', function() { | |
| page.css({ | |
| 'transform': 'translateY(' + navH + 'px)', | |
| '-webkit-transform': 'translateY(' + navH + 'px)' | |
| }); | |
| }); | |
| $('body').on('keydown', keyNav); | |
| }; | |
| var init = function() { | |
| bindActions(); | |
| }; | |
| return { | |
| init: init | |
| }; | |
| }()); | |
| Nav.init(); |
| <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> |
| easeout(s=.45s) | |
| transition all s cubic-bezier(0.23, 1, 0.32, 1) | |
| align() | |
| display flex | |
| align-items center | |
| justify-content center | |
| color1 = #1B1F25; | |
| color2 = #e74c3c; | |
| color3 = #3498db; | |
| color4 = #9b59b6; | |
| color5 = #1BC885; | |
| color6 = #DFB816; | |
| * | |
| box-sizing border-box | |
| -webkit-tap-highlight-color: rgba(white, 0); // remove tap highlight on android chrome | |
| body | |
| line-height 1.5 | |
| font-family "futura-pt", 'Century Gothic','Arial', sans-serif | |
| -webkit-font-smoothing antialiased | |
| text-rendering optimizeLegibility | |
| color lighten(white, 10) | |
| background lighten(black, 10) | |
| a | |
| text-decoration none | |
| color inherit | |
| ul | |
| list-style-type none | |
| margin 0 | |
| padding 0 | |
| .nav | |
| will-change: transform | |
| position fixed | |
| top 0 | |
| left 0 | |
| width 100% | |
| z-index 1 | |
| background lighten(black, 10) | |
| transform translateY(-100%) | |
| easeout() | |
| &--active | |
| transform translateY(0) | |
| &__list | |
| display flex | |
| &__item | |
| flex 1 | |
| position relative | |
| easeout() | |
| &:hover | |
| opacity 0.75 | |
| &__thumb | |
| display block | |
| height 80px | |
| background crimson | |
| easeout() | |
| &:before | |
| content attr(data-letter) | |
| position absolute | |
| top 50% | |
| left 50% | |
| transform translate(-50%, -50%) | |
| font-size 70px | |
| text-transform uppercase | |
| opacity 0 | |
| &__label | |
| position absolute | |
| top 50% | |
| left 50% | |
| transform translate(-50%, -50%) | |
| text-transform uppercase | |
| letter-spacing 2px | |
| color darken(white, 10) | |
| margin 0 | |
| @media (max-width 850px) | |
| &__label | |
| font-size 14px | |
| @media (max-width 720px) | |
| &__label | |
| display none | |
| &__thumb | |
| height 60px | |
| &:before | |
| font-size 24px | |
| opacity 0.7 | |
| .page | |
| height 100vh | |
| will-change transform | |
| perspective 400px | |
| overflow hidden | |
| easeout() | |
| .section | |
| will-change transform | |
| position absolute | |
| width 100% | |
| top 0 | |
| left 0 | |
| height 100vh | |
| overflow hidden | |
| align() | |
| text-align center | |
| background white | |
| transform translateX(100%) | |
| easeout(.7s) | |
| &--hidden | |
| transform translateX(-100%); | |
| &--active | |
| transform translateX(0) rotateY(0) | |
| z-index 2 | |
| &__wrapper | |
| width 100% | |
| max-width 800px | |
| padding 0 8vw | |
| position relative | |
| &__title | |
| margin 0 0 25px 0 | |
| font-size 48px | |
| font-weight normal | |
| text-transform uppercase | |
| letter-spacing 5px | |
| &:before | |
| content '' | |
| position absolute | |
| top 5rem | |
| left 45% | |
| margin: auto | |
| width: 10% | |
| height: 2px | |
| background: #ffffff | |
| @media (max-width 720px) | |
| font-size 28px | |
| &:before | |
| top 3.25rem | |
| p | |
| margin 0 0 25px 0 | |
| font-family 'Georgia' | |
| font-size 18px | |
| color white | |
| opacity 0.55 | |
| @media (max-width 720px) | |
| font-size 16px | |
| &:last-child | |
| margin-bottom 0 | |
| .color1 | |
| background color1 | |
| .color2 | |
| background color2 | |
| .color3 | |
| background color3 | |
| .color4 | |
| background color4 | |
| .color5 | |
| background color5 | |
| .color6 | |
| background color6 | |
| .logo | |
| position: fixed | |
| top: 100px | |
| right: 20px | |
| z-index: 2 | |
| @media (max-width 720px) | |
| top 110px | |
| right: 50% | |
| margin-right -20px | |
| img | |
| width: 45px | |
| transform: rotate(0) | |
| easeout() | |
| &:hover | |
| transform: rotate(180deg) scale(1.1) |