From 1691a393f0297dcd9c51059d0eaaeab2dc1c1582 Mon Sep 17 00:00:00 2001 From: Chris Caldwell Date: Thu, 30 Jun 2016 16:46:14 -0600 Subject: [PATCH] Support nested menus (nested uls) gh-4 --- app/css/okayNav-base.css | 32 +++++++-------------- app/js/jquery.okayNav.js | 14 +++++----- app/less/okayNav-base.less | 52 +++++++++++++++++++++-------------- dist/css/common.min.css | 2 +- dist/css/okayNav.min.css | 2 +- dist/js/jquery.okayNav-min.js | 2 +- 6 files changed, 51 insertions(+), 53 deletions(-) diff --git a/app/css/okayNav-base.css b/app/css/okayNav-base.css index aa877b9..42df484 100644 --- a/app/css/okayNav-base.css +++ b/app/css/okayNav-base.css @@ -8,18 +8,15 @@ body.okayNav-loaded { .okayNav-header { position: fixed; top: 0; - display: -webkit-flex; display: -ms-flexbox; display: flex; flex-direction: row; width: 100%; padding: 0 15px; - -webkit-align-items: center; -ms-flex-align: center; align-items: center; -webkit-flex-direction: row; -ms-flex-direction: row; - -webkit-justify-content: space-between; -ms-flex-pack: justify; justify-content: space-between; } @@ -30,11 +27,11 @@ body.okayNav-loaded { -ms-user-select: none; user-select: none; } -.okayNav ul { +.okayNav > ul { /* We want two navigations - one hidden and one visible */ float: left; } -.okayNav a { +.okayNav > ul > li > a { position: relative; z-index: 1; } @@ -42,10 +39,10 @@ body.okayNav-loaded { overflow: hidden; white-space: nowrap; } -.okayNav__nav--visible li { +.okayNav__nav--visible > li { display: inline-block; } -.okayNav__nav--visible a { +.okayNav__nav--visible > li > a { /* Link styling for the visible part of the nav */ display: block; padding: 15px 15px; @@ -62,7 +59,7 @@ body.okayNav-loaded { overflow-y: scroll; -webkit-overflow-scrolling: touch; } -.okayNav__nav--invisible a { +.okayNav__nav--invisible > li > a { display: block; width: 240px; padding: 15px; @@ -70,22 +67,17 @@ body.okayNav-loaded { } .okayNav__nav--invisible.nav-left { left: 0; - -webkit-transform: translateX(-100%); - transform: translateX(-100%); + transform: translateX(-100%); } .okayNav__nav--invisible.nav-right { right: 0; - -webkit-transform: translateX(100%); - transform: translateX(100%); + transform: translateX(100%); } .okayNav__nav--invisible.transition-enabled { - transition: -webkit-transform 400ms cubic-bezier(0.55, 0, 0.1, 1); transition: transform 400ms cubic-bezier(0.55, 0, 0.1, 1); - transition: transform 400ms cubic-bezier(0.55, 0, 0.1, 1), -webkit-transform 400ms cubic-bezier(0.55, 0, 0.1, 1); } .okayNav__nav--invisible.nav-open { - -webkit-transform: translateX(0); - transform: translateX(0); + transform: translateX(0); } /* Kebab icon */ .okayNav__menu-toggle { @@ -96,9 +88,7 @@ body.okayNav-loaded { width: 40px; height: 20px; cursor: pointer; - transition: -webkit-transform 400ms cubic-bezier(0.55, 0, 0.1, 1); transition: transform 400ms cubic-bezier(0.55, 0, 0.1, 1); - transition: transform 400ms cubic-bezier(0.55, 0, 0.1, 1), -webkit-transform 400ms cubic-bezier(0.55, 0, 0.1, 1); } .okayNav__menu-toggle.okay-invisible { position: absolute; @@ -125,14 +115,12 @@ body.okayNav-loaded { } .okayNav__menu-toggle span:nth-child(2) { top: 50%; - -webkit-transform: translateY(-50%); - transform: translateY(-50%); + transform: translateY(-50%); } .okayNav__menu-toggle span:nth-child(3) { bottom: 0; } .okayNav__menu-toggle.icon--active { /* Kebab icon when off-screen nav is open */ - -webkit-transform: rotate(90deg); - transform: rotate(90deg); + transform: rotate(90deg); } diff --git a/app/js/jquery.okayNav.js b/app/js/jquery.okayNav.js index 2781ee1..94d1193 100644 --- a/app/js/jquery.okayNav.js +++ b/app/js/jquery.okayNav.js @@ -347,10 +347,10 @@ }, getVisibleItemCount: function() { - return $('li', self.nav_visible).length; + return $('> li', self.nav_visible).length; }, getHiddenItemCount: function() { - return $('li', self.nav_invisible).length; + return $('> li', self.nav_invisible).length; }, recalcNav: function() { @@ -386,7 +386,7 @@ }, _collapseNavItem: function() { - var $last_child = $('li:last-child', self.nav_visible); + var $last_child = $('> li:last-child', self.nav_visible); self.last_visible_child_width = $last_child.outerWidth(true); self.document.trigger('okayNav:collapseItem', $last_child); $last_child.detach().prependTo(self.nav_invisible); @@ -398,24 +398,24 @@ }, _expandNavItem: function() { - var $first = $('li:first-child', self.nav_invisible); + var $first = $('> li:first-child', self.nav_invisible); self.document.trigger('okayNav:expandItem', $first); $first.detach().appendTo(self.nav_visible); self.options.itemDisplayed.call(); }, _expandAllItems: function() { - $('li', self.nav_invisible).detach().appendTo(self.nav_visible); + $('> li', self.nav_invisible).detach().appendTo(self.nav_visible); self.options.itemDisplayed.call(); }, _collapseAllItems: function() { - $('li', self.nav_visible).detach().appendTo(self.nav_invisible); + $('> li', self.nav_visible).detach().appendTo(self.nav_invisible); self.options.itemHidden.call(); }, destroy: function() { - $('li', self.nav_invisible).appendTo(self.nav_visible); + $('> li', self.nav_invisible).appendTo(self.nav_visible); self.nav_invisible.remove(); self.nav_visible.removeClass('okayNav__nav--visible'); self.toggle_icon.remove(); diff --git a/app/less/okayNav-base.less b/app/less/okayNav-base.less index 861ac5a..06d9057 100644 --- a/app/less/okayNav-base.less +++ b/app/less/okayNav-base.less @@ -37,15 +37,21 @@ body.okayNav-loaded {overflow-x: hidden} user-select: none; } - ul { - /* We want two navigations - one hidden and one visible */ - float: left - } + >ul { + /* We want two navigations - one hidden and one visible */ + float: left; + + >li { + + >a { + position: relative; + z-index: 1; + } + + } + + } - a { - position: relative; - z-index: 1; - } } .okayNav__nav--visible { @@ -53,16 +59,18 @@ body.okayNav-loaded {overflow-x: hidden} white-space: nowrap; - li {display: inline-block;} + >li { + display: inline-block; - a { - /* Link styling for the visible part of the nav */ - display: block; + >a { + /* Link styling for the visible part of the nav */ + display: block; - padding: @oknav-links-padding-y @oknav-links-padding-x; + padding: @oknav-links-padding-y @oknav-links-padding-x; - transition: color @oknav-transition-speed @oknav-transition-curve; - } + transition: color @oknav-transition-speed @oknav-transition-curve; + } + } &:empty { & ~ .okayNav__menu-toggle {top: 0} @@ -78,14 +86,16 @@ body.okayNav-loaded {overflow-x: hidden} overflow-y: scroll; -webkit-overflow-scrolling: touch; - a { - display: block; + >li { + >a { + display: block; - width: 240px; - padding: 15px; + width: 240px; + padding: 15px; - background: #fff; - } + background: #fff; + } + } &.nav-left { left: 0; diff --git a/dist/css/common.min.css b/dist/css/common.min.css index f0bf885..09b7c81 100644 --- a/dist/css/common.min.css +++ b/dist/css/common.min.css @@ -1 +1 @@ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:inherit}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-family:@font-family-base}body{font-family:Roboto,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:1.4rem;line-height:1.42857143;color:#555;background-color:#f7f7f7}a{text-decoration:none}ul{margin:0;padding:0;list-style:none}main{margin-top:10rem;text-align:center} \ No newline at end of file +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}:after,:before{box-sizing:inherit}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0);font-family:@font-family-base}body{font-family:Roboto,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:1.4rem;line-height:1.42857143;color:#555;background-color:#f7f7f7}a{text-decoration:none}ul{margin:0;padding:0;list-style:none}main{margin-top:10rem;text-align:center} \ No newline at end of file diff --git a/dist/css/okayNav.min.css b/dist/css/okayNav.min.css index b9460e6..e3c85e8 100644 --- a/dist/css/okayNav.min.css +++ b/dist/css/okayNav.min.css @@ -1 +1 @@ -header{-webkit-align-items:center;-ms-flex-align:center;align-items:center;background-color:#fff;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;height:7rem;padding:0 15px;position:fixed;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;top:0;width:100%}.site-logo{transition:color .2s cubic-bezier(.55,0,.1,1);color:#30acff;font-size:3rem}.ok-header__logo:hover{color:#546edb}body.okayNav-loaded{overflow-x:hidden}.okayNav-header{position:fixed;top:0;display:-webkit-flex;display:-ms-flexbox;display:flex;flex-direction:row;width:100%;padding:0 15px;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.okayNav:not(.loaded){visibility:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.okayNav ul{float:left}.okayNav a{position:relative;z-index:1}.okayNav__nav--visible{overflow:hidden;white-space:nowrap}.okayNav__nav--visible li{display:inline-block}.okayNav__nav--visible a{display:block;padding:15px;transition:color .2s cubic-bezier(.55,0,.1,1)}.okayNav__nav--visible:empty~.okayNav__menu-toggle{top:0}.okayNav__nav--invisible{position:fixed;top:7rem;bottom:0;overflow-y:scroll;-webkit-overflow-scrolling:touch}.okayNav__nav--invisible a{display:block;width:240px;padding:15px;background:#fff}.okayNav__nav--invisible.nav-left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.okayNav__nav--invisible.nav-right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.okayNav__nav--invisible.transition-enabled{transition:-webkit-transform .4s cubic-bezier(.55,0,.1,1);transition:transform .4s cubic-bezier(.55,0,.1,1);transition:transform .4s cubic-bezier(.55,0,.1,1),-webkit-transform .4s cubic-bezier(.55,0,.1,1)}.okayNav__nav--invisible.nav-open{-webkit-transform:translateX(0);transform:translateX(0)}.okayNav__menu-toggle{position:relative;z-index:1;top:15px;float:left;width:40px;height:20px;cursor:pointer;transition:-webkit-transform .4s cubic-bezier(.55,0,.1,1);transition:transform .4s cubic-bezier(.55,0,.1,1);transition:transform .4s cubic-bezier(.55,0,.1,1),-webkit-transform .4s cubic-bezier(.55,0,.1,1)}.okayNav__menu-toggle.okay-invisible{position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;opacity:0}.okayNav__menu-toggle span{position:absolute;right:0;left:0;display:block;width:4px;height:4px;margin:auto;pointer-events:none;border-radius:50%}.okayNav__menu-toggle span:nth-child(1){top:0}.okayNav__menu-toggle span:nth-child(2){top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.okayNav__menu-toggle span:nth-child(3){bottom:0}.okayNav__menu-toggle.icon--active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.okayNav-header{height:7rem;background-color:#fff}.okayNav a{color:#2e2e33;font-size:1.4rem;font-weight:700}.okayNav__nav--visible a:hover,.okayNav a:hover{color:#546edb}.okayNav__nav--invisible{background:#fff}.okayNav__menu-toggle span{background:#2e2e33}.okayNav__menu-toggle.icon--active span{background:#546edb} \ No newline at end of file +header{-webkit-align-items:center;-ms-flex-align:center;align-items:center;background-color:#fff;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;height:7rem;padding:0 15px;position:fixed;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;top:0;width:100%}.site-logo{transition:color .2s cubic-bezier(.55,0,.1,1);color:#30acff;font-size:3rem}.ok-header__logo:hover{color:#546edb}body.okayNav-loaded{overflow-x:hidden}.okayNav-header{position:fixed;top:0;display:-ms-flexbox;display:flex;flex-direction:row;width:100%;padding:0 15px;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;-ms-flex-pack:justify;justify-content:space-between}.okayNav:not(.loaded){visibility:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.okayNav>ul{float:left}.okayNav>ul>li>a{position:relative;z-index:1}.okayNav__nav--visible{overflow:hidden;white-space:nowrap}.okayNav__nav--visible>li{display:inline-block}.okayNav__nav--visible>li>a{display:block;padding:15px;transition:color .2s cubic-bezier(.55,0,.1,1)}.okayNav__nav--visible:empty~.okayNav__menu-toggle{top:0}.okayNav__nav--invisible{position:fixed;top:7rem;bottom:0;overflow-y:scroll;-webkit-overflow-scrolling:touch}.okayNav__nav--invisible>li>a{display:block;width:240px;padding:15px;background:#fff}.okayNav__nav--invisible.nav-left{left:0;transform:translateX(-100%)}.okayNav__nav--invisible.nav-right{right:0;transform:translateX(100%)}.okayNav__nav--invisible.transition-enabled{transition:transform .4s cubic-bezier(.55,0,.1,1)}.okayNav__nav--invisible.nav-open{transform:translateX(0)}.okayNav__menu-toggle{position:relative;z-index:1;top:15px;float:left;width:40px;height:20px;cursor:pointer;transition:transform .4s cubic-bezier(.55,0,.1,1)}.okayNav__menu-toggle.okay-invisible{position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;opacity:0}.okayNav__menu-toggle span{position:absolute;right:0;left:0;display:block;width:4px;height:4px;margin:auto;pointer-events:none;border-radius:50%}.okayNav__menu-toggle span:nth-child(1){top:0}.okayNav__menu-toggle span:nth-child(2){top:50%;transform:translateY(-50%)}.okayNav__menu-toggle span:nth-child(3){bottom:0}.okayNav__menu-toggle.icon--active{transform:rotate(90deg)}.okayNav-header{height:7rem;background-color:#fff}.okayNav a{color:#2e2e33;font-size:1.4rem;font-weight:700}.okayNav__nav--visible a:hover,.okayNav a:hover{color:#546edb}.okayNav__nav--invisible{background:#fff}.okayNav__menu-toggle span{background:#2e2e33}.okayNav__menu-toggle.icon--active span{background:#546edb} \ No newline at end of file diff --git a/dist/js/jquery.okayNav-min.js b/dist/js/jquery.okayNav-min.js index df5ca6a..467a657 100644 --- a/dist/js/jquery.okayNav-min.js +++ b/dist/js/jquery.okayNav-min.js @@ -3,4 +3,4 @@ * Author: Vergil Penkov (http://vergilpenkov.com/) * MIT license: https://opensource.org/licenses/MIT */ -!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=function(n,i){return void 0===i&&(i="undefined"!=typeof window?require("jquery"):require("jquery")(n)),e(i),i}:e(jQuery)}(function(e){function n(n,i){self=this,this.options=e.extend({},s,i),self.options=this.options,self.navigation=e(n),self.document=e(document),self.window=e(window),""==this.options.parent?this.options.parent=self.navigation.parent():"",self.nav_open=!1,self.parent_full_width=0,self.radCoef=180/Math.PI,self.sTouch={x:0,y:0},self.cTouch={x:0,y:0},self.sTime=0,self.nav_position=0,self.percent_open=0,self.nav_moving=!1,self.init()}var i="okayNav",s={parent:"",toggle_icon_class:"okayNav__menu-toggle",toggle_icon_content:"",align_right:!0,swipe_enabled:!0,threshold:50,resize_delay:10,beforeOpen:function(){},afterOpen:function(){},beforeClose:function(){},afterClose:function(){},itemHidden:function(){},itemDisplayed:function(){}};n.prototype={init:function(){e("body").addClass("okayNav-loaded"),self.navigation.addClass("okayNav loaded").children("ul").addClass("okayNav__nav--visible"),self.options.align_right?self.navigation.append('