JSFiddle - React, Tailwind, and code Playground
by Nicolas PUJOL
HTML
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<ul class="drop-menu">
<li> <span id="options" class="glyphicon glyphicon-cog"></span>
<div class="arrow arrow-top"></div>
<ul id="optionsMenu">
<li>Link 1</li>
<li>Link 2</li>
<li>Link 3</li>
</ul>
</li>
</ul>
CSS
body {
background-color:grey
}
.drop-menu > li {
position: relative;
}
.drop-menu li {
list-style-type: none;
}
.glyphicon {
cursor: pointer;
font-size: 21px;
margin: 18px 10px 0;
}
.drop-menu li ul {
padding: 0;
position: absolute;
}
.drop-menu ul {
/*left: -65px;*/
}
.drop-menu ul {
display: none;
background-color:#fff;
}
.drop-menu ul li {
padding: 2px 10px;
width: 100px;
}
.drop-menu ul li:hover {
background-color: lightgrey;
cursor: pointer;
}
/*.drop-menu ul::before {
border: medium solid transparent;
bottom: 100%;
content:" ";
height: 0;
position: absolute;
right: 0;
width: 0;
border-color: rgba(255, 255, 255, 0);
border-bottom-color: #ffffff;
border-width: 5px;
}*/
.drop-menu .arrow {
display:none;
}
.arrow::before {
border: medium solid transparent;
content:" ";
height: 0;
position: absolute;
width: 0;
border-color: rgba(255, 255, 255, 0);
border-bottom-color: #ffffff;
border-width: 5px;
}
.arrow-top::before {
bottom: 100%;
right: 0;
}
.arrow {
position: relative;
width:100px;
}
JavaScript
$("#options").click(function (e) {
if ($("#optionsMenu").is(":visible")) {
$("#optionsMenu").slideUp("slow", function () {
$(".drop-menu .arrow").hide();
});
} else {
$(".drop-menu .arrow").show();
$("#optionsMenu").slideDown("slow");
}
});