NoJS Responsive Nav (Hover version)
Responsive navigation for mobile and desktop without using JS. Relies on hover behaviors
HTML
<nav class="radionav">
<div>Menu</div>
<ul>
<li><a href="#">Menu item 0</a></li>
<li>
<div>Menu item 1</div>
<ul>
<li><a href="#">Just a link</a></li>
<li><a href="#">Just a longer link</a></li>
<li><a href="#">Just a link</a></li>
</ul>
</li>
<li><a href="#">Menu item 2</a></li>
<li><a href="#">Menu item 3</a></li>
<li>
<div>Menu item 4</div>
<ul>
<li><a href="#">Just a link</a></li>
<li><a href="#">Just a longer link</a></li>
<li><a href="#fail">Just a link</a></li>
</ul>
</li>
<li><a href="#">Menu item 5</a></li>
</ul>
</nav>
CSS
html,
body {
height: 100%;
width: 100%;
background: #FFF;
}
* {
margin: 0;
padding: 0;
box-sizing:border-box;
}
p {
padding: 1.6em 0 0;
}
.pretendthisisthebody {
padding: 50px 10px 0;
}
#hideholder {
display: none;
}
.radionav {
position: absolute;
top: 0;
left: 0;
background: #f8f8f8;
width: 100%;
}
.radionav>div {
text-align: center;
text-transform: uppercase;
}
.radionav div,
.radionav a {
color: #505050;
display: block;
padding: 10px;
width: 100%;
cursor: pointer;
text-decoration: none;
transition: 0.1s all ease-in-out;
}
.radionav li:hover>div,
.radionav a:hover {
background: #cc0000;
color: #fff;
}
.radionav ul {
list-style-type: none;
background: #f8f8f8;
}
.radionav ul ul a {
padding-left: 30px;
}
.radionav input,
.radionav .closer,
.radionav ul,
.radionav input:checked ~ .opener {
display: none;
}
.radionav:hover>ul,
.radionav li:hover>ul {
display: block;
}
.radionav div::after {
content: " +";
}
@media all and (min-width: 481px) {
.radionav>div {
display: none !important;
}
.radionav>ul
{
display: block !important;
}
.radionav>ul>li {
display: inline-block;
}
.radionav a,
.radionav div {
width: auto;
}
.radionav li {
position: relative;
}
.radionav ul ul {
position: absolute;
top: 100%;
left: 0;
}
.radionav ul ul li {
display: block;
min-width: 100%;
}
.radionav ul ul a {
padding-left: 10px;
white-space: nowrap;
}
.radionav li:hover>ul {
display: block;
}
.radionav div::after {
content: "";
}
}