JSFiddle - React, Tailwind, and code Playground

by Darren Galway

HTML

<div class="dropdown-container">
  <div class="relative">
    <button class="button">Click</button>
    <div class="dropdown">
      <span>awesome 1</span>
      <span>awesome 2</span>
      <span>awesome 3</span>
      <span>awesome 4</span>
    </div>
  </div>
</div>

SCSS

body {
  font-family: sans-serif;
  background-color: #ccc;
}

.dropdown-container {
  display: flex;
  justify-content: center;
}

.dropdown {
  animation: fadein 300ms ease;
  width: 200px;
  position: absolute;
  display: none;
  flex-direction: column;
  box-shadow: 0 0 25px rgba(0, 0, 0, .15);
  top: 31px;
  background: #fff;
  border-radius: 3px;
  padding: .5rem 0;
  
  &.show {
    display: flex;
  }
  
  &::before {
    content: '';
    width: 18px;
    height: 18px;
    background: #fff;
    border-radius: 3px;
    position: absolute;
    top: -7px;
    left: 14px;
    transform: rotate(-45deg);
  }
  
  > span {
    padding: 1rem;
    z-index: 2;
    
    &:hover {
      background: #eee;
    }
  }
}

.relative {
  position: relative;
}

@keyframes fadein {
  from {
    opacity: 0;
    transform: translateY(-50px);
  }
  
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

JavaScript

const button = document.querySelector('button')
const el = document.querySelector('.dropdown')

button.addEventListener('click', handleClick)

function handleClick() {
	el.classList.toggle('show')
}