JSFiddle - React, Tailwind, and code Playground
by magicaj
HTML
<select id="s">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
CSS
select { display: block; }
JavaScript
var select = document.getElementById("s"),
options = select.getElementsByTagName("option"),
clone = select.cloneNode(true),
body = document.body,
isOpen = false,
closeSelect = function() {
select.removeAttribute("size");
clone.setAttribute("style", "display: none;");
isOpen = false;
select.value = options[clone.selectedInput];
},
openSelect = function(e) {
isOpen = true;
clone.setAttribute("style", "display: auto; width: 53px;");
select.setAttribute("size", options.length);
clone.value = options[select.selectedInput];
};
clone.setAttribute("style", "display: none;");
body.insertBefore(clone, select);
body.addEventListener("click", function(e) {
if (isOpen === true && e.target != select) {
closeSelect();
}
});
select.addEventListener("click", openSelect);
for (i = 0; i < options.length; i++) {
options[i].addEventListener("click", function(e) {
closeSelect();
});
}