JSFiddle - React, Tailwind, and code Playground

by Oliver Kelso

HTML

<div>
    <div id="dd" class="wrapper-dropdown-2">More actions
        <ul class="dropdown">
            <li><a href="#">Twitter</a>
            </li>
            <li><a href="#">Github</a>
            </li>
            <li><a href="#">Facebook</a>
            </li>
        </ul>
    </div>
</div>
<br />
<br />
<br />
<br />
<br />
<div>
    <div id="dd" class="wrapper-dropdown-2">More actions
        <ul class="dropdown">
            <li><a href="#">Twitter</a>
            </li>
            <li><a href="#">Github</a>
            </li>
            <li><a href="#">Facebook</a>
            </li>
        </ul>
    </div>
</div>

CSS

.wrapper-dropdown-2 {
    /* Size and position */
    position: relative;
    /* Enable absolute positionning for children and pseudo elements */
    width: 100px;
    padding: 5px 5px 5px 5px;
    /* Styles */
    background: #fff;
    cursor: pointer;
    outline: none;
}
.wrapper-dropdown-2:after {
    content:"";
    width: 0;
    height: 0;
    position: absolute;
    right: 16px;
    top: 50%;
    margin-top: -3px;
    border-width: 6px 6px 0 6px;
    border-style: solid;
    border-color: grey transparent;
}
.wrapper-dropdown-2 .dropdown {
    /* Size & position */
    position: absolute;
    top: 30%;
    padding:3px 3px 3px 3px;
    border: 1px solid #47423F;
    /* Styles */
    background: white;
    -webkit-transition: all 0.3s ease-out;
    -moz-transition: all 0.3s ease-out;
    -ms-transition: all 0.3s ease-out;
    -o-transition: all 0.3s ease-out;
    transition: all 0.3s ease-out;
    list-style: none;
    text-align: left;
    /* Hiding */
    opacity: 0;
    -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, .15);
    -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, .15);
    box-shadow: 0 1px 6px rgba(0, 0, 0, .15);
    z-index: 10000 !important;
    
}
.wrapper-dropdown-2 .dropdown li a {
    display: block;
    text-decoration: none;
    color: #333;
    float:left;
    width:125px;
    border-radius:1px;
    padding: 4px 4px 4px 4px;
    -webkit-transition: all 0.3s ease-out;
    -moz-transition: all 0.3s ease-out;
    -ms-transition: all 0.3s ease-out;
    -o-transition: all 0.3s ease-out;
    transition: all 0.3s ease-out;
}
/* Hover state */
 .wrapper-dropdown-2 .dropdown li:hover a {
    width:125px;
    background-color: #eee;
}
/* Active state */
 .wrapper-dropdown-2.active:after {
    border-width: 0 6px 6px 6px;
}
.wrapper-dropdown-2.active .dropdown {
    opacity: 1;
    pointer-events: auto;
    -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, .15);
    -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, .15);
    box-shadow: 0 1px 6px rgba(0, 0, 0, .15);
   ...

JavaScript

function DropDown(el) {
				this.dd = el;
				this.initEvents();
			}
			DropDown.prototype = {
				initEvents : function() {
					var obj = this;
                    
					obj.dd.on('click', function(event){
						$(this).toggleClass('active');
						event.stopPropagation();
					});	
				}
			}

			$(function() {

				var dd = new DropDown( $('.wrapper-dropdown-2') );

				$(document).click(function() {
					// all dropdowns
					$('.wrapper-dropdown-2').removeClass('active');
				});

			});