JSFiddle - React, Tailwind, and code Playground
Slim Menu
by Jennifer Perrin
HTML
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script>
<ul class="slimmenu">
<li><a href="#">Slim Menu</a>
<ul>
<li><a href="#">Slim Menu</a></li>
<li><a href="#">Slim Menu</a></li>
</ul>
</li>
<li><a href="#">Slim Menu</a></li>
<li><a href="#">Slim Menu</a>
<ul>
<li><a href="#">Slim Menu</a></li>
<li><a href="#">Slim Menu</a></li>
</ul>
</li>
<li><a href="#">Slim Menu</a></li>
</ul>
CSS
body {
font-family:'Lucida Sans Unicode', 'Lucida Console', sans-serif;
padding: 0;
}
a, a:active {
text-decoration: none
}
.menu-collapser {
position: relative;
background-color: #999;
color: #FFF;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);
width: 100%;
height: 48px;
line-height: 48px;
font-size: 16px;
padding: 0 8px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box
}
.collapse-button {
position: absolute;
right: 8px;
top: 50%;
width: 40px;
background-color: #0E0E0E;
background-image: linear-gradient(to bottom, #151515, #040404);
background-repeat: repeat-x;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
border-radius: 4px 4px 4px 4px;
border-style: solid;
border-width: 1px;
color: #FFFFFF;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.075);
padding: 7px 10px;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
cursor: pointer;
font-size: 14px;
text-align: center;
transform: translate(0, -50%);
-o-transform: translate(0, -50%);
-ms-transform: translate(0, -50%);
-moz-transform: translate(0, -50%);
-webkit-transform: translate(0, -50%);
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box
}
.collapse-button:hover, .collapse-button:focus {
background-image: none;
background-color: #040404;
color: #FFF;
}
.collapse-button .icon-bar {
background-color: #F5F5F5;
border-radius: 1px 1px 1px 1px;
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
display: block;
height: 2px;
width: 18px;
margin: 2px 0;
}
ul.slimmenu {
list-style-type: none;
margin: 0;
padding: 0;
width: 100%;
}
ul.slimmenu li {
position: relative;
display: inline-block;
background-color: #AAA;
}
ul.slimmenu > li {
margin-right: -5px;
border-left: 1px solid...
JavaScript
/**
* jquery.slimmenu.js
* http://adnantopal.github.io/slimmenu/
* Author: @adnantopal
* Copyright 2013, Adnan Topal (atopal.com)
* Licensed under the MIT license.
*/;
(function ($, window, document, undefined) {
var pluginName = "slimmenu",
defaults = {
resizeWidth: '768',
collapserTitle: 'Main Menu',
animSpeed: 'medium',
easingEffect: null,
indentChildren: false,
childrenIndenter: ' '
};
function Plugin(element, options) {
this.element = element;
this.$elem = $(this.element);
this.options = $.extend({}, defaults, options);
this.init();
}
Plugin.prototype = {
init: function () {
var $options = this.options,
$menu = this.$elem,
$collapser = '<div class="menu-collapser">' + $options.collapserTitle + '<div class="collapse-button"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></div></div>',
$menu_collapser;
$menu.before($collapser);
$menu_collapser = $menu.prev('.menu-collapser');
$menu.on('click', '.sub-collapser', function (e) {
e.preventDefault();
e.stopPropagation();
var $parent_li = $(this).closest('li');
if ($(this).hasClass('expanded')) {
$(this).removeClass('expanded');
$(this).find('i').html('▼');
$parent_li.find('>ul').slideUp($options.animSpeed, $options.easingEffect);
} else {
$(this).addClass('expanded');
$(this).find('i').html('▲');
$parent_li.find('>ul').slideDown($options.animSpeed, $options.easingEffect);
}
});
$menu_collapser.on('click', '.collapse-button', function (e) {
...