Problem with long drop down menus? Well, try this simple solution with the use of javascript and jQuery.
A Pen by Larry Geams Parangan on CodePen.
<!--Made with Love by Larry Geams--> | |
<h1>Solution for Long Drop Down Items</h1> | |
<nav> | |
<ul class="dropdown"> | |
<li class="drop"><a href="#">Really Tall Menu</a> | |
<ul class="sub_menu"> | |
<li><a href="#">Lorem</a></li> | |
<li><a href="#">Ipsum</a></li> | |
<li><a href="#">Dolor</a></li> | |
<li><a href="#">Lipsum</a></li> | |
<li><a href="#">Consectetur </a></li> | |
<li><a href="#">Duis</a></li> | |
<li><a href="#">Sed</a></li> | |
<li><a href="#">Natus</a></li> | |
<li><a href="#">Excepteur</a></li> | |
<li><a href="#">Voluptas</a></li> | |
<li><a href="#">Voluptate</a></li> | |
<li><a href="#">Malorum</a></li> | |
<li><a href="#">Bonorum</a></li> | |
<li><a href="#">Nemo</a></li> | |
<li><a href="#">Quisquam</a></li> | |
<li><a href="#">Adipisci </a></li> | |
<li><a href="#">Excepteur</a></li> | |
<li><a href="#">Consectetur </a></li> | |
<li><a href="#">Duis</a></li> | |
<li><a href="#">Voluptate</a></li> | |
<li><a href="#">Ipsum</a></li> | |
<li><a href="#">Dolor</a></li> | |
<li><a href="#">Lipsum</a></li> | |
</ul> | |
</li> | |
<li class="drop"><a href="#">Kinda Tall Menu</a> | |
<ul class="sub_menu"> | |
<li><a href="#">Lorem</a></li> | |
<li><a href="#">Ipsum</a></li> | |
<li><a href="#">Dolor</a></li> | |
<li><a href="#">Lipsum</a></li> | |
<li><a href="#">Consectetur </a></li> | |
<li><a href="#">Duis</a></li> | |
<li><a href="#">Sed</a></li> | |
<li><a href="#">Natus</a></li> | |
<li><a href="#">Excepteur</a></li> | |
<li><a href="#">Voluptas</a></li> | |
<li><a href="#">Voluptate</a></li> | |
<li><a href="#">Malorum</a></li> | |
<li><a href="#">Bonorum</a></li> | |
<li><a href="#">Nemo</a></li> | |
<li><a href="#">Quisquam</a></li> | |
</ul> | |
</li> | |
<li class="drop"><a href="#">Average Menu</a> | |
<ul class="sub_menu"> | |
<li><a href="#">Lorem</a></li> | |
<li><a href="#">Ipsum</a></li> | |
<li><a href="#">Dolor</a></li> | |
<li><a href="#">Lipsum</a></li> | |
<li><a href="#">Consectetur </a></li> | |
</ul> | |
</li> | |
<li><a href="#">No Menu</a> | |
</li> | |
</ul> | |
</nav> |
var maxHeight = 400; | |
$(function(){ | |
$(".dropdown > li").hover(function() { | |
var $container = $(this), | |
$list = $container.find("ul"), | |
$anchor = $container.find("a"), | |
height = $list.height() * 1.1, // make sure there is enough room at the bottom | |
multiplier = height / maxHeight; // needs to move faster if list is taller | |
// need to save height here so it can revert on mouseout | |
$container.data("origHeight", $container.height()); | |
// so it can retain it's rollover color all the while the dropdown is open | |
$anchor.addClass("hover"); | |
// make sure dropdown appears directly below parent list item | |
$list | |
.show() | |
.css({ | |
paddingTop: $container.data("origHeight") | |
}); | |
// don't do any animation if list shorter than max | |
if (multiplier > 1) { | |
$container | |
.css({ | |
height: maxHeight, | |
overflow: "hidden" | |
}) | |
.mousemove(function(e) { | |
var offset = $container.offset(); | |
var relativeY = ((e.pageY - offset.top) * multiplier) - ($container.data("origHeight") * multiplier); | |
if (relativeY > $container.data("origHeight")) { | |
$list.css("top", -relativeY + $container.data("origHeight")); | |
}; | |
}); | |
} | |
}, function() { | |
var $el = $(this); | |
// put things back to normal | |
$el | |
.height($(this).data("origHeight")) | |
.find("ul") | |
.css({ top: 0 }) | |
.hide() | |
.end() | |
.find("a") | |
.removeClass("hover"); | |
}); | |
}); | |
Problem with long drop down menus? Well, try this simple solution with the use of javascript and jQuery.
A Pen by Larry Geams Parangan on CodePen.
body{ | |
margin: 0px; | |
padding: 0px; | |
background: #e74c3c; | |
font-family: 'Lato', sans-serif; | |
} | |
h1{ | |
margin: 2em 0px; | |
padding: 0px; | |
color: #fff; | |
text-align: center; | |
font-weight: 100; | |
font-size: 50px; | |
} | |
nav{ | |
width: 750px; | |
margin: 1em auto; | |
} | |
ul{ | |
margin: 0px; | |
padding: 0px; | |
list-style: none; | |
} | |
ul.dropdown{ | |
position: relative; | |
width: 100%; | |
} | |
ul.dropdown li{ | |
font-weight: bold; | |
float: left; | |
width: 180px; | |
position: relative; | |
background: #ecf0f1; | |
} | |
ul.dropdown a:hover{ | |
color: #000; | |
} | |
ul.dropdown li a { | |
display: block; | |
padding: 20px 8px; | |
color: #34495e; | |
position: relative; | |
z-index: 2000; | |
text-align: center; | |
text-decoration: none; | |
font-weight: 300; | |
} | |
ul.dropdown li a:hover, | |
ul.dropdown li a.hover{ | |
background: #3498db; | |
position: relative; | |
color: #fff; | |
} | |
ul.dropdown ul{ | |
display: none; | |
position: absolute; | |
top: 0; | |
left: 0; | |
width: 180px; | |
z-index: 1000; | |
} | |
ul.dropdown ul li { | |
font-weight: normal; | |
background: #f6f6f6; | |
color: #000; | |
border-bottom: 1px solid #ccc; | |
} | |
ul.dropdown ul li a{ | |
display: block; | |
color: #34495e !important; | |
background: #eee !important; | |
} | |
ul.dropdown ul li a:hover{ | |
display: block; | |
background: #3498db !important; | |
color: #fff !important; | |
} | |
.drop > a{ | |
position: relative; | |
} | |
.drop > a:after{ | |
content:""; | |
position: absolute; | |
right: 10px; | |
top: 40%; | |
border-left: 5px solid transparent; | |
border-top: 5px solid #333; | |
border-right: 5px solid transparent; | |
z-index: 999; | |
} | |
.drop > a:hover:after{ | |
content:""; | |
border-left: 5px solid transparent; | |
border-top: 5px solid #fff; | |
border-right: 5px solid transparent; | |
} | |