JSFiddle - React, Tailwind, and code Playground
by BeNdErR
HTML
<nav role='navigation' class="menu">
<label for="menu">Menu <i class="fa fa-bars"></i></label>
<input type="checkbox" id="menu">
<ul>
<li><a href="#">Tutti</a></li>
<li class="menu-hasdropdown">
<a href="#">About
<label title="toggle menu" for="about">
<i class="fa fa-caret-down"></i>
</label>
</a>
<input type="checkbox" id="about">
<ul class="menu-dropdown">
<li><a href="">History</a></li>
<li><a href="">Mission</a></li>
<li class="menu-hasdropdown menu-hasflyout">
<a href="">Services
<label title="toggle menu" for="services">
<i class="fa fa-caret-down menu-downicon"></i>
<i class="fa fa-caret-right menu-righticon"></i>
</label>
</a>
<input type="checkbox" id="services">
<ul class="menu-dropdown">
<li><a href="">Service 1</a></li>
<li><a href="">Service 2</a></li>
<li><a href="">Service 3</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Clients</a></li>
<li><a href="#">Contact Us</a></li>
</ul>
</nav>
SCSS
$menu_background: #035e8d;
$menu_color: #e2e2e2;
$menu_breakpoint : 1024px;
$menu_toggle_background: black;
$menu_padding: 15px 20px;
$menu_border: 1px solid rgba(255, 255, 255, 0.1);
$menu_padding: 15px 20px;
$menu_icon_padding: 5px 10px;
@mixin show () {
display: block;
animation: grow .5s ease-in-out; // optional animation
}
@mixin hide () {
display: none;
}
.menu {
background: $menu_background;
font-family: 'Roboto'sans-serif;
line-height: 1.5;
ul {
margin: 0;
padding: 0;
list-style: none;
}
&,
&.menu a {
color: $menu_color;
text-decoration: none;
}
& a {
display: block;
white-space: nowrap;
}
& label:hover {
cursor: pointer;
}
.menu-dropdown a {
padding: $menu_padding;
border-bottom: $menu_border;
}
}
.menu-dropdown,
.menu input[type="checkbox"] {
@include hide;
}
@media screen and (min-width: $menu_breakpoint + 1px) {
.menu>label,
input[type="checkbox"] {
@include hide;
}
.menu a {
padding: $menu_padding;
}
.menu>ul>li {
display: inline-block;
}
.menu-hasdropdown {
position: relative;
&:hover {
>ul {
@include show;
}
}
}
.menu-hasdropdown>ul {
position: absolute;
top: 100%;
left: 0;
background: $menu_background;
}
.menu-hasflyout>ul {
left: 100%;
top: 0;
}
.menu-hasflyout .menu-downicon {
@include hide;
}
.menu {
max-width: 1024px;
margin: 0 auto;
}
}
@media screen and (max-width: $menu_breakpoint) {
.menu > ul,
.menu-righticon {
@include hide;
}
input[type="checkbox"]:checked + ul {
@include show;
}
.menu > label {
background: $menu_toggle_background;
display: block;
padding: $menu_padding;
text-align: right;
}
.menu a {
padding: $menu_padding;
}
.menu > ul i {
float: right;
padding: $menu_icon_padding;
background: darken($menu_background,15%);
}
.menu-dropdown a {
...