JSFiddle - React, Tailwind, and code Playground
HTML
<input type="text" class="combobox" />
CSS
body {
padding: 50px;
}
.cb-button {
cursor: pointer;
display: inline-block;
text-align: center;
font-size: 10px;
font-family: serif;
width: 19px;
margin: 0 0 0 -20px;
padding: 0;
border-color: #bbb;
border-width: 1px 1px 1px 0;
border-style: solid;
vertical-align: top;
background-color: white;
line-height: 21px;
}
.cb-button.active {
background-color: #dedede;
color: #272727;
border-left: 1px solid #ececec;
margin-left: -21px;
}
.cb-list {
margin: 0;
padding: 0;
background-color: #fff;
list-style: none;
border: 1px solid black;
width: 204px;
}
.cb-list li {
padding: 1px 5px;
font-family: sans-serif;
font-size: 80%;
}
.cb-list li:hover {
background-color: #3399ff;
color: #fff;
}
.combobox {
height: 18px;
width: 200px;
border:1px solid #bbb;
padding:2px 2px 1px 2px;
margin:0
}
JavaScript
$cb = $('.combobox');
var items = ["one", "two", "three", "four"];
var $list = $('<ul style="display:none" class="cb-list">');
for (var i in items) {
$list.append('<li>' + items[i] + '</li>');
}
$button = $('<span class="cb-button">▼</span>');
$('.combobox').after($button);
$button.after($list);
var timer;
$button.add($list).click(function() {
$list.show();
}).hover(function() {
clearTimeout(timer);
$button.addClass('active');
}, function() {
$button.removeClass('active');
timer = setTimeout(function() {
$list.hide();
}, 250);
});
$('.cb-list li').live('click', function() {
$cb.val($(this).text());
$list.hide();
$cb.focus();
});