Image Select
HTML
<label>
<select class="options_picker" id="optionsPicker">
<option value="gallery_image_1" data-thumbnail="/img/gallery_img_1.jpg">Gallery image #1</option>
<option value="gallery_image_2" data-thumbnail="/img/gallery_img_2.jpg">Gallery image #2</option>
<option value="gallery_image_3" data-thumbnail="/img/gallery_img_3.jpg">Gallery image #3</option>
<option value="gallery_image_4" data-thumbnail="/img/gallery_img_4.jpg">Gallery image #4</option>
<option value="gallery_image_5" data-thumbnail="/img/gallery_img_5.jpg">Gallery image #5</option>
</select>
</label>
<div class="dropdown_wrap">
<button class="button_select" id="buttonSelect" value="gallery_image_1">
<img src="/img/gallery_img_1.jpg" alt="Gallery image #1"><span>Gallery image #1</span>
</button>
<div class="dropdown_block" id="dropdownBlock">
<ul class="dropdown_list" id="dropdownList"></ul>
</div>
</div>
CSS
.options_picker{display:none}
.button_select{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;width:100%;max-width:35rem;padding:1rem;-webkit-border-radius:.5rem;-moz-border-radius:.5rem;border-radius:.5rem;background-color:#fff;border:.1rem solid #ccc;outline:none}
.button_select:focus{background-color:#f4f3f3}
.dropdown_wrap{position:relative}
.dropdown_block{display:none;width:100%;max-width:35rem;border:.1rem solid rgba(0,0,0,.15);background-color:#fff;-webkit-box-shadow:0 .6rem 1.2rem rgba(0,0,0,.175);-moz-box-shadow:0 .6rem 1.2rem rgba(0,0,0,.175);box-shadow:0 .6rem 1.2rem rgba(0,0,0,.175);-webkit-border-radius:.5rem;-moz-border-radius:.5rem;border-radius:.5rem;margin:1rem 0 0;overflow:hidden;position:absolute;top:100%;left:0;z-index:5}
.dropdown_list li{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;padding:1rem;width:100%;cursor:pointer}
.dropdown_list img,.button_select img{width:4rem;height:2.5rem;margin:0 1rem 0 0;-o-object-fit:contain;object-fit:contain;font-family:'object-fit: contain;\A '}
.dropdown_list span,.button_select span{text-align:left}
@media (-ms-high-contrast: none), (-ms-high-contrast: active), (-moz-touch-enabled: 0), (hover: hover) {
.dropdown_list li:hover,.button_select:hover{background-color:#f4f3f3}
}
SCSS
.options_picker{
display: none;
}
.button_select{
display: flex;
align-items: center;
width: 100%;
max-width: 35rem;
padding:1rem;
border-radius: .5rem;
background-color: #ffffff;
border: .1rem solid #cccccc;
outline: none;
&:focus {
background-color: #F4F3F3;
}
}
.dropdown_wrap {
position: relative;
}
.dropdown_block{
display: none;
width: 100%;
max-width: 35rem;
border: .1rem solid rgba(0,0,0,.15);
background-color: #ffffff;
box-shadow: 0 .6rem 1.2rem rgba(0,0,0,.175);
border-radius: .5rem;
margin: 1rem 0 0;
overflow: hidden;
position: absolute;
top: 100%;
left: 0;
z-index: 5;
}
.dropdown_list {
li{
display: flex;
align-items: center;
padding: 1rem;
width: 100%;
cursor: pointer;
}
}
.dropdown_list, .button_select {
img {
width: 4rem;
height: 2.5rem;
margin: 0 1rem 0 0;
object-fit: contain;
font-family: 'object-fit: contain;';
}
span {
text-align: left;
}
}
@media (-ms-high-contrast: none), (-ms-high-contrast: active), (-moz-touch-enabled: 0), (hover: hover) {
.dropdown_list li:hover, .button_select:hover {background-color: #F4F3F3;}
}
JavaScript
function dropdownChange(options_picker, dropdown_block, dropdown_list, button_select) {
var optionsArray = [];
$(options_picker + ' option').each(function(){
var img = $(this).attr("data-thumbnail");
var text = this.innerText;
var value = $(this).val();
var item = '<li><img src="'+ img +'" alt="'+ text +'" data-value="'+ value +'"/><span>'+ text +'</span></li>';
optionsArray.push(item);
});
$(dropdown_list).html(optionsArray);
$(dropdown_list + ' li').click(function(){
var img = $(this).find('img').attr("src");
var value = $(this).find('img').attr('value');
var text = this.innerText;
var item = '<img src="'+ img +'" alt="'+ text +'" /><span>'+ text +'</span>';
$(button_select).html(item);
$(button_select).attr('value', value);
$(dropdown_block).toggle();
});
$(button_select).click(function(){
$(dropdown_block).toggle();
});
}
dropdownChange('#optionsPicker','#dropdownBlock','#dropdownList','#buttonSelect');
dropdownChange('#optionsPicker2','#dropdownBlock2','#dropdownList2','#buttonSelect2');
$(document).mouseup(function(e){
var dropdownBlock = $(".dropdown_block");
if (!dropdownBlock.is(e.target) && dropdownBlock.has(e.target).length === 0) {
dropdownBlock.css('display', 'none');
}
});