hamburger-menu
Version:
☰ A responsive CSS solution for a hamburger menu ☰
101 lines (99 loc) • 2.53 kB
CSS
/*
Structure for HamburgerMenu:
nav.hamburger-menu
a.hamburger
aside
ul
li a|span
li a|span
li a|span
*/
/* HamburgerMenu style and behavior (override these settings with caution) */
body {
padding-top: 0px;
padding-bottom: 0px;
margin: 0px;
}
nav.hamburger-menu a.hamburger {
display: none;
color: inherit;
background-color: inherit;
}
nav.hamburger-menu aside {
position: fixed;
top: 0px;
bottom: 0px;
left: 0px;
float: none;
background-color: inherit;
padding: 0px;
margin: 0px;
overflow-y: scroll;
z-index: 5000;
}
nav.hamburger-menu aside ul {
list-style: none;
padding: 0px;
margin: 0px;
}
nav.hamburger-menu aside ul li a, /* menu item contents */
nav.hamburger-menu aside ul li span {
display: block;
font-size: 1.1rem;
font-weight: bold;
text-align: left;
text-decoration: none;
color: inherit;
border-top: 1px solid transparent;
border-bottom: 1px solid transparent;
padding: 10px 0px 10px 15px;
transition: all 0.4s;
cursor: pointer;
}
nav.hamburger-menu aside ul li.current >a, /* highlighted menu item */
nav.hamburger-menu aside ul li.current >span {
border-color: inherit;
cursor: default;
}
nav.hamburger-menu aside ul ul li a, /* nested menu item */
nav.hamburger-menu aside ul ul li span {
font-size: 0.8rem;
padding: 4px 0px 4px 30px;
}
@media (max-width: 667px) { /* selects iPhone 6/6s/7/8 landscape and anything narrower */
html body {
padding: 35px 10px 0px 10px;
cursor: pointer; /* enables closing menu */
}
nav.hamburger-menu {
cursor: auto;
}
nav.hamburger-menu a.hamburger {
display: block;
position: absolute;
top: 0px;
left: 0px;
font-size: 1.4rem;
font-weight: bold;
text-decoration: none;
padding: 6px 10px 8px 8px;
}
nav.hamburger-menu a.hamburger:not(:hover) {
transition: opacity 0.5s 0.8s; /* delay to allow menu time to hide */
}
nav.hamburger-menu a.hamburger:hover {
opacity: 0;
}
nav.hamburger-menu aside {
max-width: 0px;
overflow: hidden;
transition: max-width 1.0s;
}
nav.hamburger-menu aside ul li {
white-space: nowrap;
}
nav.hamburger-menu:not(.collapse-menu):hover .hamburger + aside {
max-width: 400px; /* used for animation -- must be greater than actual displayed width */
overflow-y: scroll;
}
}