pushy.scss 3.83 KB
/*! Pushy - v1.0.0 - 2016-3-1
* Pushy is a responsive off-canvas navigation menu using CSS transforms & transitions.
* https://github.com/christophery/pushy/
* by Christopher Yee */

$menu_width: 300px !default;

/* Menu Appearance */

.pushy{
    position: fixed;
    width: $menu_width;
    height: 100%;
    top: 0;
    z-index: 11;
    background: $primary-color;
    overflow: auto;
    visibility: hidden;
    -webkit-overflow-scrolling: touch; /* enables momentum scrolling in iOS overflow elements */

    a{
        display: block;
        color: rgba(256,256,256,0.8);
        padding: 15px 30px;
        text-decoration: none;
        outline: 0;
        font-size: 18px;
        text-transform: uppercase;
    }

    a:hover{
        color: #FFF;
    }

    ul:first-child{
        margin-top: 70px;
    }

    &.pushy-left{
        left: 0;
    }

    &.pushy-right{
        right: 0;
    }
}

/* Menu Movement */

.pushy-left{
    -webkit-transform: translate3d( unquote('-' + $menu_width) ,0,0);
    -ms-transform: translate3d( unquote('-' + $menu_width) ,0,0);
    transform: translate3d( unquote('-' + $menu_width) ,0,0);
}

.pushy-open-left{
    #container,
    .push{
        -webkit-transform: translate3d( $menu_width ,0,0);
        -ms-transform: translate3d( $menu_width ,0,0);
        transform: translate3d( $menu_width ,0,0);
    }
}

.pushy-right{
    -webkit-transform: translate3d( $menu_width ,0,0);
    -ms-transform: translate3d( $menu_width ,0,0);
    transform: translate3d( $menu_width ,0,0);
}

.pushy-open-right{
    #container,
    .push{
        -webkit-transform: translate3d( unquote('-' + $menu_width) ,0,0);
        -ms-transform: translate3d( unquote('-' + $menu_width) ,0,0);
        transform: translate3d( unquote('-' + $menu_width) ,0,0);
    }
}

.pushy-open-left,
.pushy-open-right{
    .pushy{
        -webkit-transform: translate3d(0,0,0);
        -ms-transform: translate3d(0,0,0);
        transform: translate3d(0,0,0);
    }
}

/* Menu Transitions */

#container,
.pushy,
.push{
    transition: transform .2s cubic-bezier(.16, .68, .43, .99);
}

/* Site Overlay */

.site-overlay{
    display: none;
}

.pushy-open-left,
.pushy-open-right{
    .site-overlay{
        display: block;
        position: fixed;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        z-index: 10;
        background-color: rgba(0,0,0,0.5);
        -webkit-animation: fade 500ms; 
        animation: fade 500ms;
    }
}

@keyframes fade{
    0%   { opacity: 0; }
    100% { opacity: 1; }
}

@-webkit-keyframes fade{
    0%   { opacity: 0; }
    100% { opacity: 1; }
}

/* Submenu Appearance */

.pushy-submenu{
    ul{
        padding-left: 15px;
        transition: max-height 0.2s ease-in-out;

        .pushy-link{
            transition: opacity 0.2s ease-in-out;
        }
    }

    /* Submenu Icon */

    > a {
        position: relative;
    }

    > a::after {
        content: '';
        display: block;
        height: 11px;
        width: 8px;
        position: absolute;
        top: 50%;
        right: 15px;
        background: url("../img/arrow.svg") no-repeat;
        -webkit-transform: translateY(-50%);
        -ms-transform: translateY(-50%);
        transform: translateY(-50%);
        transition: transform 0.2s;
    }
}

/* Submenu Movement */

.pushy-submenu-closed{
    ul{
        max-height: 0;
        overflow: hidden;
    }

    .pushy-link{
        opacity: 0;
    }
}

.pushy-submenu-open{
    ul{
        max-height: 1000px;
    }

    .pushy-link{
        opacity: 1;
    }
    
    /* Submenu Icon */

    a::after {
        -webkit-transform: translateY(-50%) rotate(90deg);
        -ms-transform: translateY(-50%) rotate(90deg);
        transform: translateY(-50%) rotate(90deg);
    }
}

.no-csstransforms3d{
    .pushy-submenu-closed{
        ul{
            max-height: none;
            display: none;
        }
    }
}