JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://fonts.googleapis.com/css?family=Raleway"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/js/i18n/defaults-*.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/js/bootstrap-select.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/css/bootstrap-select.min.css">
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/css/bootstrap-select.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/js/bootstrap-select.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.4/js/i18n/defaults-*.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Raleway" rel="stylesheet">
</head>
<body style="background-color: #242424;">
<center><h4 style="color: white">Escolha o plano</h4>
<div class="drop">
<div class="option active placeholder" data-value="placeholder">
Escolha o Serviço
</div>
<div class="option" data-value="wow">
Hour Boost
</div>
<div class="option" data-value="drop">
Commend Bot
</div>
<div class="option" data-value="select">
Report Bot
</div>
</div>
<div class="drop">
<div class="option active placeholder" data-value="placeholder">
Choose wiseely
</div>
<div class="option" data-value="wow">
Wow!
</div>
<div class="option" data-value="drop">
So dropdown!
</div>
<div class="option" data-value="select">
Very select!
</div>
<div class="option" data-value="custom">
Much custom!
</div>
<div class="option" data-value="animation">
Such animation!
...
CSS
@font-face {
font-family: 'Raleway', sans-serif;
}
body {
background: #35414a;
}
.drop {
width: 20em;
margin: 5em auto;
font-family: pfs-bold;
color: #86919a;
text-transform: uppercase;
position: relative;
-webkit-transition: width 0.5s;
transition: width 0.5s;
will-change: width;
}
.drop .option {
padding: 1em;
cursor: pointer;
background-color: #333333;
}
.drop .option:not(.active) {
display: none;
opacity: 0;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
.drop.visible {
-webkit-animation: bounce 1s;
animation: bounce 1s;
width: 24em;
}
.drop.visible:before, .drop.visible:after {
border-color: #fff;
}
.drop.visible:before {
opacity: 0;
}
.drop.visible:after {
opacity: 1;
}
.drop.visible .option {
color: #fff;
display: block;
}
.drop.opacity .option {
-webkit-transform: translateZ(0);
transform: translateZ(0);
opacity: 1;
}
.drop.opacity .option:nth-child(0) {
-webkit-transition: opacity 0.5s 0s, -webkit-transform 0.5s 0s;
transition: opacity 0.5s 0s, -webkit-transform 0.5s 0s;
transition: opacity 0.5s 0s, transform 0.5s 0s;
transition: opacity 0.5s 0s, transform 0.5s 0s, -webkit-transform 0.5s 0s;
}
.drop.opacity .option:nth-child(1) {
-webkit-transition: opacity 0.5s 0.1s, -webkit-transform 0.5s 0.1s;
transition: opacity 0.5s 0.1s, -webkit-transform 0.5s 0.1s;
transition: opacity 0.5s 0.1s, transform 0.5s 0.1s;
transition: opacity 0.5s 0.1s, transform 0.5s 0.1s, -webkit-transform 0.5s 0.1s;
}
.drop.opacity .option:nth-child(2) {
-webkit-transition: opacity 0.5s 0.2s, -webkit-transform 0.5s 0.2s;
transition: opacity 0.5s 0.2s, -webkit-transform 0.5s 0.2s;
transition: opacity 0.5s 0.2s, transform 0.5s 0.2s;
transition: opacity 0.5s 0.2s, transform 0.5s 0.2s, -webkit-transform 0.5s 0.2s;
}
.drop.opacity .option:nth-child(3) {
-webkit-transition: opacity 0.5s 0.3s, -webkit-transform 0.5s 0.3s;
transition: opacity 0.5s 0.3s,...
JavaScript
$(document).ready(function() {
$(".drop .option").click(function() {
var val = $(this).attr("data-value"),
$drop = $(".drop"),
prevActive = $(".drop .option.active").attr("data-value"),
options = $(".drop .option").length;
$drop.find(".option.active").addClass("mini-hack");
$drop.toggleClass("visible");
$drop.removeClass("withBG");
$(this).css("top");
$drop.toggleClass("opacity");
$(".mini-hack").removeClass("mini-hack");
if ($drop.hasClass("visible")) {
setTimeout(function() {
$drop.addClass("withBG");
}, 400 + options*100);
}
triggerAnimation();
if (val !== "placeholder" || prevActive === "placeholder") {
$(".drop .option").removeClass("active");
$(this).addClass("active");
};
});
function triggerAnimation() {
var finalWidth = $(".drop").hasClass("visible") ? 22 : 20;
$(".drop").css("width", "24em");
setTimeout(function() {
$(".drop").css("width", finalWidth + "em");
}, 400);
}
});