Como crear un Select Personalizado con HTML CSS y JS

HTML
<div class="select-container">
    <p class="select-label">Movie categories</p>
    <div class="select">
        <div class="selected-option">
            <div class="select-value">All</div>
            <span class="icon icon-down-dir-2"></span>
        </div>
        <div data-toggle="collapsed" class="options">
            <div class="option">All</div>
            <div class="option">Horror</div>
            <div class="option">Sci-fic</div>
            <div class="option">Adventure</div>
            <div class="option">Action</div>
        </div>
    </div>
</div>
CSS
*{
    margin:0;
    padding:0;
    box-sizing:border-box;
    color:#444;
    font-family:Arial,Helvetica,Sans-serif;
}
body{
    background-color:whitesmoke;
}

/** SELECT */
.select-container{
    width:300px;
    margin:1rem auto;
}
.select-label{
    text-transform:uppercase;
    font-size:14px;
    margin-bottom:10px;
}
.select{
    width:250px;
    position:relative;
}
.selected-option{
    display:flex;
    justify-content:space-between;
    background-color:white;
    border-radius:3px;
    border: .5px solid #ccc;
}
.icon,.select-value{
    padding:10px 15px;
}
.icon{
    border-left:.5px solid #ccc;
}
.select-value{
    padding:10px;
}
.options{
    position:absolute;
    background-color:white;
    width:100%;
    padding:15px 0;
    margin-top:5px;
    border: .5px solid #ccc;
    border-radius:3px;
}
.options[data-toggle="collapsed"]{
    display:none;
}
.option{
    padding:10px 15px;
    cursor:pointer;
}
.option:hover{
    background-color:whitesmoke;
}
JS
const selectedOption  = document.querySelector('.selected-option');
const selectValue     = document.querySelector('.select-value');
const optionContainer = document.querySelector('.options');
const optionList      = document.querySelectorAll('.option');

/** Toggle function */
const selectToggle = ()=>{

    if(optionContainer.dataset.toggle == 'collapsed'){
        optionContainer.dataset.toggle = '';
    }else{
        optionContainer.dataset.toggle = 'collapsed'
    }
}

/** When click on seleted-option */
selectedOption.addEventListener('click',selectToggle);

/** This function update select value */
const updateSelectValue = (option) => {
    selectValue.innerText = option.innerText;
}

optionList.forEach((option) => {
  option.addEventListener('click',(e) => {
      updateSelectValue(option)
      selectToggle()
  })  
})


/*
    fuente: https://www.youtube.com/watch?v=uYKDBH5_QmM 
    - Todo los créditos a su autor.
    - Sólo se modificó el ancho del select-container de 400px a 300px
    - para mejorar el centrado.
    
*/

Autor: Web322

Publicado: 21/07/2021

Compartir Elemento Web

Donar a Compositu
Otras formas de ayudar
  • Compártelo en tus redes sociales.
  • Recomienda los elementos.
  • Regístrate Aquí
  • Deja tu comentario agradeciendo el aporte.

Descarga el código completo del Elemento Web y archivos necesarios (imágenes, librerias, plugins, frameword, etc)

Deja tu comentario