dropdown jQuery
by Oleh Kotsubko
HTML
<ul class="nav">
<li>
<a href="#">
No dropdown
</a>
</li>
<li class="button-wrapper js-button-wrapper">
<a href="javascript:void(0)" class="dropdown-button js-dropdown-button">
Dropdown 1 <span>▼</span>
</a>
<ul class="dropdown-menu js-dropdown-menu">
<li>
<a href="#">
Drop Item 1
</a>
</li>
<li>
<a href="#">
Drop Item 2
</a>
</li>
<li>
<a href="#">
Drop Item 3
</a>
</li>
</ul>
</li>
<li>
<a href="#">
No dropdown
</a>
</li>
<li class="button-wrapper js-button-wrapper">
<a href="javascript:void(0)" class="dropdown-button js-dropdown-button">
Dropdown 2 <span>▼</span>
</a>
<ul class="dropdown-menu js-dropdown-menu">
<li>
<a href="#">
asdf
</a>
</li>
</ul>
</li>
</ul>
<a href="#">
asdf
</a>
<a href="google.com">
asdf
</a>
<a href="#">
asdf
</a>
<a href="#">
asdf
</a>
CSS
ody {
background-color: #eee;
text-align: center;
padding-top: 50px;
}
.nav {
display: block;
font: 13px Helvetica, Tahoma, serif;
text-transform: uppercase;
margin: 0;
padding: 0;
}
.nav li {
display: inline-block;
list-style: none;
}
.nav .button-wrapper {
position: relative;
}
.nav li a {
display: block;
color: #333;
background-color: #fff;
padding: 10px 20px;
text-decoration: none;
}
.nav li a span {
display: inline-block;
margin-left: 5px;
font-size: 10px;
color: #999;
}
.nav li a:hover, .nav li a.dropdown-button.is-open {
background-color: #289dcc;
color: #fff;
}
a.dropdown-button.js-dropdown-button.is-open + .dropdown-menu {
visibility: visible;
opacity: 1;
}
.nav li a:hover span, .nav li a.dropdown-button.is-open span {
color: #fff;
}
.nav li .dropdown-menu {
visibility: hidden;
opacity: 0;
transition: all 0.3s;
position: absolute;
left: 0;
padding: 0;
margin: 0;
margin-top: 3px;
text-align: left;
}
.nav li .dropdown-menu a {
width: 150px;
}
JavaScript
$(document).ready(function () {
const $dropButton = $(".dropdown-button")
$dropButton.click(function () {
$dropButton.removeClass("is-open");
if ($(this).parents(".js-button-wrapper").children(".js-dropdown-menu").is(":visible")) {
$(this).parents(".js-button-wrapper")
.children(".js-dropdown-menu")
.parents(".js-button-wrapper")
.children(".js-dropdown-button")
.addClass("is-open")
}
});
$(document).on("click", function (e) {
if (!$(e.target).parents().hasClass("js-button-wrapper")) {
$dropButton.removeClass("is-open");
}
});
});