JSFiddle - React, Tailwind, and code Playground

by luizz

HTML

<div class="cs-select cs-skin-slide" tabindex="0"><span class="cs-placeholder">Sight Seeing</span><div class="cs-options">
    <ul>
        <li class="icon-camera" data-option="" data-value="sightseeing"><span>Sight Seeing</span></li>
        <li class="icon-money" data-option="" data-value="business"><span>Business</span></li>
        <li class="icon-heart" data-option="" data-value="honeymoon"><span>Honeymoon</span></li>
        <li class="icon-food" data-option="" data-value="food"><span>Gourmet</span></li>
        <li class="icon-shirt" data-option="" data-value="shopping"><span>Shopping</span></li>
    </ul>
</div>
    
    <select class="cs-select cs-skin-slide">
					<option value="sightseeing" data-class="icon-camera">Sight Seeing</option>
					<option value="business" data-class="icon-money">Business</option>
					<option value="honeymoon" data-class="icon-heart">Honeymoon</option>
					<option value="food" data-class="icon-food">Gourmet</option>
					<option value="shopping" data-class="icon-shirt">Shopping</option>
				</select>
</div>

CSS

div.cs-select {
	display: inline-block;
	vertical-align: middle;
	position: relative;
	text-align: left;
	background: #fff;
	z-index: 100;
	width: 100%;
	max-width: 500px;
	-webkit-touch-callout: none;
	-webkit-user-select: none;
	-khtml-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
}

div.cs-select:focus {
	outline: none; /* For better accessibility add a style for this in your skin */
}

.cs-select select {
	display: none;
}

.cs-select span {
	display: block;
	position: relative;
	cursor: pointer;
	padding: 1em;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* Placeholder and selected option */
.cs-select > span {
	padding-right: 3em;
}

.cs-select > span::after,
.cs-select .cs-selected span::after {
	speak: none;
	position: absolute;
	top: 50%;
	-webkit-transform: translateY(-50%);
	transform: translateY(-50%);
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

.cs-select > span::after {
	content: '\25BE';
	right: 1em;
}

.cs-select .cs-selected span::after {
	content: '\2713';
	margin-left: 1em;
}

.cs-select.cs-active > span::after {
	-webkit-transform: translateY(-50%) rotate(180deg);
	transform: translateY(-50%) rotate(180deg);
}

/* Options */
.cs-select .cs-options {
	position: absolute;
	overflow: hidden;
	width: 100%;
	background: #fff;
	visibility: hidden;
}

.cs-select.cs-active .cs-options {
	visibility: visible;
}

.cs-select ul {
	list-style: none;
	margin: 0;
	padding: 0;
	width: 100%;
}

.cs-select ul span {
	padding: 1em;
}

.cs-select ul li.cs-focus span {
	background-color: #ddd;
}

/* Optgroup and optgroup label */
.cs-select li.cs-optgroup ul {
	padding-left: 1em;
}

.cs-select li.cs-optgroup > span {
	cursor: default;
}


div.cs-skin-slide {
	color: #fff;
	font-size: 1.5em;
	width: 300px;
}

@media screen and (max-width: 30em) {
	div.cs-skin-slide { font-size: 1em; width: 250px; }
}

div.cs-skin-slide::before {
	content: '';
	background:...

JavaScript

$(function(){

    $('div.cs-select').click(function(){
        
        if($(this).hasClass('cs-active')){
            
            $(this).removeClass('cs-active').addClass('close');
            return;
        }else{
            
            $(this).removeClass('close').addClass('cs-active');
        }
    });

});