Getting started
Step 1: Setup your HTML
<body>
<div id="mobile-header">
<div class="container">
<button type="button" id="mobile-menu-button">Toggle menu</button>
</div>
</div>
<div id="wrap">
<nav id="frankenmenu"> ... </nav>
// The rest of your document goes inside this wrap
</div>
</body>
Step 2: Build the navigation
<nav id="frankenmenu">
<div class="container">
<ul id="frankenmenu-list">
<li class="menu-item menu-item-depth1"><a href="#">Home</a></li>
<li class="menu-item menu-item-depth1 menu-item-has-children">
<a href="#">About us</a>
<ul class="sub-menu sub-menu-depth1">
<li class="menu-item menu-item-depth2"><a href="#">Your mum</a></li>
<li class="menu-item menu-item-depth2"><a href="#">My mum</a></li>
<li class="menu-item menu-item-depth2"><a href="#">Your mum's mum</a></li>
</ul>
</li>
<li class="menu-item menu-item-depth1 menu-item-has-children">
<a href="#">Products</a>
<ul class="sub-menu sub-menu-depth1">
<li class="menu-item menu-item-depth2"><a href="#">Sandwiches</a></li>
<li class="menu-item menu-item-depth2"><a href="#">Hotdogs</a></li>
</ul>
</li>
<li class="menu-item menu-item-depth1"><a href="#">Services</a></li>
<li class="menu-item menu-item-depth1"><a href="#">Contact us</a></li>
</ul>
</div>
</nav>
Step 3: Include files
Download FrankenMenu and include the files in your document. Don't forget to include a copy of jQuery 1.9.1+.
<link rel="stylesheet" href="frankenmenu.css"> <script src="frankenmenu.js">
Step 4: Initialise
Initialise FrankenMenu on document ready
$(document).ready(function() {
$("#frankenmenu").frankenMenu();
});
Options
You can customise FrankenMenu by using options. For example:
$("#frankenmenu").frankenMenu({
menuBreakpoint: 450,
megaMenu: true,
mobileMenuText: true,
mobileMenuPosition: "left",
});
| Option | Description | Type | Default | Values |
|---|---|---|---|---|
| menuBreakpoint | The max-width in px that the mobile menu will be active | Number | 600 | Any number |
| devMode | Enables developer mode. With a submenu or megamenu open, you can press the "h" key to hold it's active state. The "r" key releases it again. Useful for inspecting or debugging | Boolean | false | true/false |
| Desktop menu options | ||||
| megaMenu | Activate megamenu functionality | Boolean | false | true/false |
| desktopHoverDelay | The delay in ms before a submenu or megamenu dropdown will close after focus leaves a menu item | Number | 800 | Any number |
| desktopAnimationIn | An object equivalent to first parameter of jQuery’s .animate() method. Used to animate in submenu or megamenu dropdowns | Object | {opacity:'show'} | jQuery animation object |
| desktopAnimationOut | An object equivalent to first parameter of jQuery’s .animate() method. Used to animate out submenu or megamenu dropdowns | Object | {opacity:'hide'} | jQuery animation object |
| desktopTransitionSpeedIn | The transition speed in ms that a submenu or megamenu dropdown will transition in | Number | 300 | Any number |
| desktopTransitionSpeedOut | The transition speed in ms that a submenu or megamenu dropdown will transition out | Number | 200 | Any number |
| Mobile menu options | ||||
| mobileMenuText | Show a "Menu" label next to the mobile menu toggle button | Boolean | false | true/false |
| mobileMenuPosition | Position the mobile menu on the left or right of the screen | String | "right" | "left" or "right" |
| mobileTransitionSpeedIn | The transition speed in ms that mobile submenus will slide down | Number | 300 | Any number |
| mobileTransitionSpeedIn | The transition speed in ms that mobile submenus will slide up | Number | 300 | Any number |
Sub-navigation
On desktop menus, you can display top-level menu items in a separate sub-navigation list by adding the class menu-item-subnav.
For example:
<li class="menu-item menu-item-depth1 menu-item-subnav"> ... </li>
On desktop, these menu items will be cloned into an element with an id of frankenmenu-subnav in the same order they appear in the menu. Semantically this element should be a <nav> unless you are placing the sub-navigation inside the current <nav>. You need to place this element in the DOM yourself if you would like to use this feature.
For example:
<nav id="frankenmenu-subnav"></nav> // or <div id="frankenmenu-subnav"></div>
You can place this container element anywhere you want the sub-navigation to appear.
On mobile menu, these menu items will not be affected.
Submenu and megamenu dropdowns on these items are not supported so it's best to not give sub-navigation items any children.
Mobile menu bar
You can add your own elements into the mobile menu bar if they are mobile-specific.
Another option would be to clone existing elements inside of it by adding the class frankenmove.
A good use-case for this could be a logo. For example:
<div id="logo" class="frankenmove">
<a href="/"><img src="images/your-logo.svg" alt="A logo"></a>
</div>
The logo will be cloned into the mobile-header div, with the class frankenmoved.
Elements with the class frankenmove are hidden on mobile menu view, and elements with the added class frankenmoved are hidden on desktop menu view.