Кастомный селектор на JS + стили

Last update: 22 Квітня, 2023

Category: WordPress

Пример верстки селектора. Структуру оставляем такую же, классы важны.

<div class="dropdown">
    <div class="select">
        <span class="crypto-span">--</span>
        <i class="fa fa-chevron-left"></i>
    </div>
        <input class="crypto-input" type="hidden">
    <ul class="dropdown-menu crypto-list">
        <li>
            <div class="crypto-item">
                <img src="../icons/bitcoin.jpg">
                <p>BTC</p>
            </div>
        </li>
        <li>
            <div class="crypto-item">
                <img src="../icons/eth.jpg">
                <p>ETH</p>
            </div>
        </li>
        <li>
            <div class="crypto-item">
                <img src="../icons/ltc.png">
                <p>LTC</p>
            </div>
        </li>
        <li>
            <div class="crypto-item">
                <img src="../icons/dash.png">
                <p>DASH</p>
            </div>
        </li>
        <li>
            <div class="crypto-item">
                <img src="../icons/zcash.png">
                <p>ZEC</p>
            </div>
        </li>
        <li>
            <div class="crypto-item">
                <img src="../icons/logo_bnb.png">
                <p>BNB</p>
            </div>
        </li>
        <li>
            <div class="crypto-item">
                <img src="../icons/logo_dogecoin.png">
                <p>DOGE</p>
            </div>
        </li>
        <li>
            <div class="crypto-item">
                <img src="../icons/logo_tron.png">
                <p>TRX</p>
            </div>
        </li>
        <li>
            <div class="crypto-item">
                <img src="../icons/busd.png">
                <p>BUSD</p>
            </div>
        </li>
        <li>
            <div class="crypto-item">
                <img src="../icons/USDC.png">
                <p>USDC</p>
            </div>
        </li>
        <li>
            <div class="crypto-item">
                <img src="../icons/tether.png">
                <p>USDT</p>
            </div>
        </li>
    </ul>
</div>

Стили для селектора, можно полностью кастомизировать. Для того что бы не подсвечивались input  вставляем в стили такую строчку:

:focus-visible {
    outline-color: -webkit-focus-ring-color;
    outline-style: auto;
    outline-width: 0px;

Сами стили:

/* Selector */

 .dropdown {
    width: 48%;
    height: 48px!important;
    display: inline-block;
    background: #FFFFFF;
    border-radius: 2px;
    border: 1px solid #d9d9d9;
    transition: all .5s ease;
    position: relative;
    font-size: 14px;
    color: #474747;
    text-align: left;
    padding: 14px 20px;
}
 .dropdown .select {
    cursor: pointer;
    display: block;
    padding: 0px
}
 .dropdown .select::before {
    position: absolute;
    top: 15px;
    right: 25px;
    width: 14px;
    height: 5px;
    content: url("icons/angle-down-solid.svg")
}
 .dropdown .select > i {
    font-size: 13px;
    color: #888;
    cursor: pointer;
    transition: all .3s ease-in-out;
    float: right;
    line-height: 20px
}
 .dropdown:hover {
    box-shadow: 0 0 4px rgb(204, 204, 204)
}
 .dropdown:active {
    background-color: #f8f8f8
}
 .dropdown.active:hover,
 .dropdown.active {
    box-shadow: 0 0 4px rgb(204, 204, 204);
    border-radius: 2px 2px 0 0;
    background-color: #f8f8f8
}
 .dropdown.active .select > i {
    transform: rotate(-90deg)
}
 .dropdown .dropdown-menu {
    position: absolute;
    background-color: #FFFFFF;
    width: 100%;
    left: 0;
    margin-top: 20px;
    box-shadow: 0 1px 2px rgb(204, 204, 204);
    border-radius: 0 1px 2px 2px;
    overflow: hidden;
    display: none;
    max-height: 144px;
    overflow-y: auto;
    z-index: 9
}
 .dropdown .dropdown-menu li {
    padding: 10px;
    transition: all .2s ease-in-out;
    cursor: pointer
} 
 .dropdown .dropdown-menu {
    padding: 0;
    list-style: none
}
 .dropdown .dropdown-menu li:hover {
    background-color: #f2f2f2
}
 .dropdown .dropdown-menu li:active {
    background-color: #e2e2e2
}
 .dropdown .dropdown-menu li > .crypto-item {
    display: flex;
    align-items: center;
    flex-direction: row;
}
 .dropdown .dropdown-menu li > .crypto-item > img {
    width: 25px;
    height: 25px;
    margin-right: 15px;
}

Js код который нужен для работы селектора:

(Работает с jQuery)

function Selector () {
    $('.dropdown').click(function () {
        $(this).attr('tabindex', 1).focus();
        $(this).toggleClass('active');
        $(this).find('.dropdown-menu').slideToggle(300);
    });

    $('.dropdown').focusout(function () {
        $(this).removeClass('active');
        $(this).find('.dropdown-menu').slideUp(300);
    });

    $('.dropdown .dropdown-menu li').click(function () {
        $(this).parents('.dropdown').find('span').text($(this).text());
        $(this).parents('.dropdown').find('input').attr('value', $(this).attr('answer')); //Эта строчка заполняет input. Сюда можно указать и сам текст li, будет виглядеть так:
        // $(this).parents('.dropdown').find('input').attr('value', $(this).text(); или можно указать любой ваш атрибут.
    });
};
Selector();