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');
}
});
});