Skip to content

Instantly share code, notes, and snippets.

@ecnelises
Last active May 29, 2021 15:59
Show Gist options
  • Save ecnelises/514dee31d266885d29f62bc77dc6989a to your computer and use it in GitHub Desktop.
Save ecnelises/514dee31d266885d29f62bc77dc6989a to your computer and use it in GitHub Desktop.
A styled select implementation. See https://var.ecnelises.com/select.html
<!DOCTYPE HTML>
<html>
<head>
<title>Select</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, minimal-ui, initial-scale=1.0" />
<style>
body {
font-family: avenir, "helvetica neue", sans-serif;
margin: 72px;
}
.shadow-select {
display: none;
}
.shown-select > p {
padding: 6px 8px;
overflow: hidden;
background-color: #e9573f;
color: white;
display: block;
width: 160px;
margin: 0;
-moz-user-select: none;
}
.shown-select .option {
margin: 0;
padding: 6px 8px;
background-color: #DDD;
display: block;
width: 160px;
transition: background-color .5s;
-moz-user-select: none;
}
.shown-select .option:hover {
margin: 0;
padding: 6px 8px;
background-color: #DDD;
display: block;
width: 160px;
background-color: #CCC;
transition: background-color .5s;
}
</style>
</head>
<body>
<form>
<select class="shadow-select" name="test">
<option value="0">Option1</option>
<option value="1">Option2</option>
<option value="2">Option3</option>
<option value="4">Option4</option>
<option value="5">Option5</option>
<option value="6">Option6</option>
</select>
<!-- <button type="submit">OK</button> -->
</form>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<script>
$(document).ready(function(){
$('.shadow-select').each(function(index, tag){
var shownMenu = $('<div/>').attr('class', 'shown-select')
var selectedItem = $('<p/>')
shownMenu.append(selectedItem)
var options = $('<div/>').attr('class', 'wrapper')
$(tag.options).each(function(index, option){
if (index == 0) {
selectedItem.text(option.label)
}
var shownOption = $('<div/>').attr('class', 'option').text(option.label)
options.append(shownOption)
shownOption.click(function(){
selectedItem.text(option.label)
$(tag).val(option.value).change()
options.slideToggle(500)
})
})
shownMenu.append(options)
selectedItem.click(function(){
options.slideToggle(500)
})
tag.after(shownMenu[0])
})
})
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment