JSFiddle - React, Tailwind, and code Playground
HTML
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div class="menu-container">
<div class="menu">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Product</a>
<ul>
<li><a href="#">Product</a>
<ul>
<li><a href="#">ほにゃらら</a></li>
<li><a href="#">ほげほげ</a></li>
<li><a href="#">ほにゃらら</a></li>
<li><a href="#">ほげほげ</a></li>
</ul>
</li>
<li><a href="#">Product</a>
<ul>
<li><a href="#">ほにゃらら</a></li>
<li><a href="#">ほげほげ</a></li>
<li><a href="#">ほにゃらら</a></li>
<li><a href="#">ほげほげ</a></li>
</ul>
</li>
<li><a href="#">Product</a>
<ul>
<li><a href="#">ほにゃらら</a></li>
<li><a href="#">ほげほげ</a></li>
<li><a href="#">ほにゃらら</a></li>
<li><a href="#">ほげほげ</a></li>
</ul>
</li>
<li><a href="#">Product</a>
<ul>
<li><a href="#">ほにゃらら</a></li>
<li><a href="#">ほげほげ</a></li>
<li><a href="#">ほにゃらら</a></li>
<li><a href="#">ほげほげ</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Blog</a> </li>
<li><a href="#">Contact</a></li>
</ul>
</div>
</div>
CSS
* {
box-sizing: border-box;
font-family: '游ゴシック Medium', 'Yu Gothic Medium', '游ゴシック体', YuGothic, 'ヒラギノ角ゴ Pro', 'Hiragino Kaku Gothic Pro', 'Noto Sans Japanese', 'メイリオ', 'Meiryo', Osaka, 'MS Pゴシック', 'MS PGothic', sans-serif;
}
a {
color: #333;
}
.menu-container {
width: 100%;
margin: 0 auto;
background: #fff;
}
.menu-mobile {
display: none;
padding: 20px;
}
.menu-mobile:after {
content: "\f103";
font-family: "FontAwesome";
font-size: 2.5rem;
padding: 0;
float: right;
position: relative;
top: 50%;
transform: translateY(-25%);
}
.menu-dropdown-icon:before {
content: "\f103";
font-family: "FontAwesome";
display: none;
cursor: pointer;
float: right;
padding: 1.5em 2em;
background: #fff;
color: #333;
}
.menu > ul {
margin: 0 auto;
width: 100%;
list-style: none;
padding: 0;
position: relative;
text-align: center;
/* IF .menu position=relative -> ul = container width, ELSE ul = 100% width */
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.menu > ul:before,
.menu > ul:after {
content: "";
display: table;
}
.menu > ul:after {
clear: both;
}
.menu > ul > li {
display: inline-block;
background: #fff;
padding: 0;
margin: 0;
}
.menu > ul > li a {
text-decoration: none;
padding: .5em 3em;
display: block;
}
.menu > ul > li:hover {
background: #f0f0f0;
color: #red;
}
.menu > ul > li > ul {
display: none;
width: 100%;
background: #fff;
padding: 20px;
position: absolute;
z-index: 99;
left: 0;
margin: 0;
list-style: none;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.menu > ul > li > ul:before,
.menu > ul> li > ul:after {
content: "";
display: table;
}
.menu > ul > li > ul:after {
clear: both;
}
.menu > ul > li > ul > li {
margin: 0;
padding-bottom: 0;
list-style: none;
width: 25%;
background: none;
float: left;
}
.menu > ul > li > ul > li a {
color:...
JavaScript
$(document).ready(function() {
"use strict";
$('.menu > ul > li:has( > ul)').addClass('menu-dropdown-icon');
$('.menu > ul > li > ul:not(:has(ul))').addClass('normal-sub');
$(".menu > ul").before("<a href=\"#\" class=\"menu-mobile\">menu</a>");
$(".menu > ul > li").hover(function(e) {
if ($(window).width() > 943) {
$(this).children("ul").stop(true, false).fadeToggle(150);
e.preventDefault();
}
});
$(".menu > ul > li").click(function() {
if ($(window).width() <= 943) {
$(this).children("ul").fadeToggle(150);
}
});
$(".menu-mobile").click(function(e) {
$(".menu > ul").toggleClass('show-on-mobile');
e.preventDefault();
});
});