Стилизация select
Стилизация select на чистом CSS без использования сторонних библиотек или JavaScript кода. А также бонус: рассмотрим как стилизовать select option при помощи JavaScript и jQuery.
- Стилизация slect при помощи appearance .
- Стилизация select option.
- Создание выпадающего списка, используя input .
- Проверка, открыт ли select.
Стилизация select
Структура будет стандартной:
Чтобы в select отображаемая строка была одна используем атрибут size со значением 1.
Стилизация для нашего select.
-webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; background: url("path/img.png") no-repeat right center; outline: 0;
В примере выше мы прописали четыре строчки ccs свойства appearance с вендорными префиксами, чтобы свойство работало одинаково во всех браузерах. Что это за свойство читайте ниже.
Вся сложность заключалась лишь в замене стандартной стрелки в прямоугольнике, вместо которой мы реализовали background. Таким образом можно вставить любую картинку. Необходимо лишь подогнать размер при помощи свойства background-size
Appearance CSS
Реализовать нашу задачу помогло css3 свойство appearance.
Данное свойство позволяет изменить вид элемента на: button, checkbox, radio, field, icon и многое другое. В нашем случае мы вообще скрыли элемент, используя none и добавили картинку с помощью background.
Стилизация select option
Для того чтобы стилизовать select option нам потребуется JavaScript. Начнём с HTML и CSS.
.select < display: block; max-width: 215px; width: 100%; position: relative; >.new-select < position: relative; border: 1px solid #ced4da; padding: 10px 15px; cursor: pointer; user-select: none; >.new-select__list < position: absolute; top: 45px; left: 0; border: 1px solid #ced4da; cursor: pointer; width: 100%; z-index: 2; background: #fff; user-select: none; >.new-select__list.on < display: block; >.new-select__item span < display: block; padding: 10px 15px; >.new-select__item span:hover < color: #12b223; >.new-select:after < content: ""; display: block; width: 25px; height: 25px; position: absolute; right: 9px; top: 9px; background: url("path-to-image") no-repeat right center / cover; opacity: 0.6; transition: all .27s ease-in-out; transform: rotate(0deg); >.new-select.on:after
Перед JavaScript-кодом должен быть подключен jQuery.
$(".select").each(function () < const _this = $(this), selectOption = _this.find("option"), selectOptionLength = selectOption.length, selectedOption = selectOption.filter(":selected"), duration = 450; // длительность анимации _this.hide(); _this.wrap(" "); $("", < class: "new-select", text: _this.children("option:disabled").text() >).insertAfter(_this); const selectHead = _this.next(".new-select"); $("", < class: "new-select__list" >).insertAfter(selectHead); const selectList = selectHead.next(".new-select__list"); for (let i = 1; i < selectOptionLength; i++) < $("", < class: "new-select__item", html: $("", < text: selectOption.eq(i).text() >) >) .attr("data-value", selectOption.eq(i).val()) .appendTo(selectList); > const selectItem = selectList.find(".new-select__item"); selectList.slideUp(0); selectHead.on("click", function () < if (!$(this).hasClass("on")) < $(this).addClass("on"); selectList.slideDown(duration); selectItem.on("click", function () < let chooseItem = $(this).data("value"); $("select").val(chooseItem).attr("selected", "selected"); selectHead.text($(this).find("span").text()); selectList.slideUp(duration); selectHead.removeClass("on"); >); > else < $(this).removeClass("on"); selectList.slideUp(duration); >>); >);
Input select
Более простой вариант при помощи input. Данный вариант мне нравится больше.
.select < position: relative; display: block; min-width: 220px; width: 100%; max-width: 400px; margin-bottom: 20px; >.select__head < width: 100%; max-width: 100%; box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); border-radius: 10px; padding: 14px 15px; font-size: 14px; line-height: 18px; color: rgba(66, 67, 72, 0.8); cursor: pointer; >.select__head::after < width: 10px; height: 6px; background: #FFF url('data:image/svg+xml,%3Csvg width="10" height="6" viewBox="0 0 10 6" fill="none" xmlns="http: //www.w3.org/2000/svg"%3E%3Cpath fill-rule="evenodd" clip-rule="evenodd" d="M4.50495 5.78413L0.205241 1.25827C-0.0684138 0.970375 -0.0684138 0.503596 0.205241 0.215836C0.478652 -0.0719461 0.922098 -0.071946 1.19549 0.215837L5.00007 4.22052L8.80452 0.215953C9.07805 -0.0718292 9.52145 -0.0718292 9.79486 0.215953C10.0684 0.503736 10.0684 0.970492 9.79486 1.25839L5.49508 5.78425C5.35831 5.92814 5.17925 6 5.00009 6C4.82085 6 4.64165 5.928 4.50495 5.78413Z" fill="%23ED266A"/%3E%3C/svg%3E%0A') no-repeat center / cover; position: absolute; right: 20px; bottom: 50%; transform: translateY(50%); content: ""; display: block; transition: .2s ease-in; >.select__head.open::after < transform: translateY(50%) rotate(180deg); >.select__list < display: none; position: absolute; top: 100%; left: 0; right: 0; background: #fff; box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); border-radius: 10px; margin-top: 5px; max-height: 205px; overflow-x: hidden; overflow-y: auto; z-index: 100; margin: 0; padding: 0; font-size: 14px; color: #424348; scrollbar-color: dark; scrollbar-width: thin; overscroll-behavior: contain; >.select__list::-webkit-scrollbar < width: 7px; background-color: #F8F9FA; padding: 5px; >.select__list::-webkit-scrollbar-thumb < border-radius: 10px; background-color: #D9D9D9; >.select__list .select__item < position: relative; border-top: 1px solid rgba(224, 229, 231, 0.5); padding: 10px 15px; cursor: pointer; list-style-type: none; >.select__list .select__item:hover
jQuery(($) => < $(".select").on("click", ".select__head", function () < if ($(this).hasClass("open")) < $(this).removeClass("open"); $(this).next().fadeOut(); >else < $(".select__head").removeClass("open"); $(".select__list").fadeOut(); $(this).addClass("open"); $(this).next().fadeIn(); >>); $(".select").on("click", ".select__item", function () < $(".select__head").removeClass("open"); $(this).parent().fadeOut(); $(this).parent().prev().text($(this).text()); $(this).parent().prev().prev().val($(this).text()); >); $(document).click(function (e) < if (!$(e.target).closest(".select").length) < $(".select__head").removeClass("open"); $(".select__list").fadeOut(); >>); >);
Проверка открыт ли select
Будем изменять положение стрелки в зависимости от того открыт или закрыт select.
const select = document.querySelector("select"); select.addEventListener("blur", () => selectEvent()); select.addEventListener("click", () => selectEvent()); selectEvent = (event) => < if (event.type == "click") < if (select.classList.contains("change")) < select.classList.remove("change"); >else < select.classList.add("change"); >> if (event.type == "blur") < select.classList.remove("change"); >>;
Если вам понравилась статья про стилизацию select, рекомендую прочитать про Стилизацию чекбоксов.
Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.
Поделиться с друзьями:
Статьи из данной категории:
- JavaScript: Работа с Массивами
- Наличие Динамически Добавленного Элемента
- Стилизация Input File
- Предзагрузка Картинок — Предварительная Загрузка Изображений на JavaScript
- Стилизация Скролла
- События Формы
Комментарии ( 5 )
06/05/2020, 23:23
Здравствуйте, спасибо за такой пример и скрипт, но я попробовала его использовать, и заметила недочёты..
1. При загрузке страницы по умолчанию уже должно быть какое-то значение. Это не доработано в скрипте. Мне кажется вот здесь text:
_this.children(‘option:disabled’).text() должно быть не disabled, а
_this.children(‘option:selected’).text()
2. Первый по порядку option считается 0-й, то есть цикл нужно начинать с 0, а не с 1
for (let i = 0; i < selectOptionLength; i++) и т.д..
Иначе в псевдоселект добавляются пункты все, кроме первого
3. Мне кажется, что нужно добавить закрытие псевдоселлекта при клике вне этого блока. Потому, что если селекты расположенны рядом, то могут наезжать друг на друга открытые.
Спасибо!
Only to top
08/05/2020, 10:21
Здравствуйте, Оксана. Спасибо за выявление недостатков скрипта. Как будет время, обязательно код будет исправлен и улучшен.
22/07/2020, 15:00
Здравствуйте! Подскажите, пожалуйста, в чем может быть причина, что не работает js код для селект нигде кроме хрома и сафари?
Only to top
23/07/2020, 07:47
Здравствуйте, Анастасия. Представленный код работает во всех современных браузерах.
11/07/2022, 19:11
если несколько селектов на странице, как сделать что бы был открыт только один? открытый закрывается и открывается по которому кликнули
Как подвинуть стрелку в select?
Нужно сделать стрелку у тега select левее
- Вопрос задан более трёх лет назад
- 7994 просмотра
4 комментария
Простой 4 комментария

Rustam Bainazarov @SmthTo Куратор тега CSS
Картинку на фон, либо оборачивать select в ещё один блок и делать её псевдоэлементом.

Rustam Bainazarov @SmthTo Куратор тега CSS
Можно вообще градиентом сделать стрелку:

Рустам Байназаров, эх.. а without gradient? )))

Rustam Bainazarov @SmthTo Куратор тега CSS
Решения вопроса 1

Самый простой способ:
1. Скрыть стандартную стрелку — appearance: none;
2. Добавить свою стрелку — background: url(arrow_custom.svg) no-repeat right;
3. Подвинуть по горизонтали — background-position-x: calc(100% — 8px);
Ответ написан более трёх лет назад
Комментировать
Нравится 6 Комментировать
Как заменить стрелку (caret) select?
Можно ли изменить стрелку справа (caret), не заменяя весь фон? То есть, я хочу иметь возможность заменить иконку стрелки, но не трогать остальной вид select. Видел решение, которое заменяет background целиком на новую картинку. Это решение рассматривать не будем. Использовать модифицированный button тоже не хотелось бы.
Отслеживать
задан 16 янв 2016 в 12:12
5,185 3 3 золотых знака 23 23 серебряных знака 48 48 бронзовых знаков
просто заменить нельзя — стилизация не предусмотрена. надо слегка потанцевать с бубном, например, если в двух словах, можно создать слой поверх и ему через псевдоэлемент поставить нужную картинку на место стрелки. но тогда она не кликабельна будет.
Силовые тренажеры и спортивное оборудование

Наша компания является ведущим российским производителем известных силовых тренажеров, воплощая в своей продукции высокие стандарты качества и инновации. Основываясь на многолетнем опыте и глубоких знаниях рынка, компания предлагает широкий ассортимент тренажеров, от бюджетных до профессиональных моделей.
Продукция известна своей надежностью и долговечностью, что подтверждается многочисленными положительными отзывами профессионалов и любителей фитнеса. Каждый тренажер проходит строгий контроль качества, чтобы обеспечить максимальную безопасность и эффективность тренировок.
Силовые тренажеры от нас – это комбинация современных технологий и эргономичного дизайна, соответствующего анатомии человека. Это делает их идеальными для любого фитнес-клуба или домашней тренировки.
Виды спортивного оборудования
Силовые тренажеры российского производства заслуживают особого внимания профессионалов и любителей фитнеса. Виды оборудования:
- Грузоблочные тренажеры отличаются стабильностью и универсальностью. Они позволяют работать над различными группами мышц, регулируя вес нагрузки.
- Тренажеры, нагружаемые дисками, идеально подойдут для проработки конкретных зон. Их главное преимущество — возможность индивидуальной настройки нагрузки посредством добавления или убирания дисков.
- Тренажеры для работы со своей массой тела станут незаменимыми помощниками в тренировках для укрепления мышц, улучшения координации и поддержания общей физической формы. Они подойдут как для начинающих, так и для опытных спортсменов.
- Свободные веса включают в себя гантели, штанги и гири, которые обеспечивают свободное движение и эффективно развивают мышцы. Использование свободных весов требует от спортсмена контроля и стабилизации тела, что улучшает баланс, координацию и укрепляет стабилизирующие мышцы.
Российские тренажеры предлагают широкий выбор для любого ценителя физической активности.
Производство спортивного оборудования
Спортивные силовые тренажеры производятся с учетом высоких стандартов качества и безопасности. Основными материалами являются сталь, высокопрочный наполнитель мягких элементов и кожа для обивки. В процессе изготовления используются технологии лазерной и плазменной резки, сварки, фрезерования, а также порошковой окраски для обеспечения прочности и долговечности изделий.
Наши тренажеры являются эргономичными и универсальными. Предоставляется возможность регулировки под индивидуальные параметры пользователя, а также защита от травм благодаря смазывающим системам и амортизаторам. Благодаря современным технологиям, тренажеры обеспечивают максимально эффективное и безопасное выполнение упражнений, что делает их незаменимым инструментом как для профессионалов, так и для любителей фитнеса.
Преимущества спортоборудования
Тренировочные машины для силовых тренировок предлагают множество преимуществ как для профессионалов, так и для любителей фитнеса. Вот несколько из них:
- Целевая тренировка. Эти машины разработаны для изоляции конкретных групп мышц, обеспечивая направленные и эффективные тренировки.
- Безопасность. Благодаря фиксированному пути движения снижается риск травм, что делает их подходящими для начинающих и тех, кто реабилитируется после травм.
- Прогрессивная нагрузка. Они позволяют легко регулировать сопротивление веса, облегчая прогрессивную нагрузку, ключевой принцип в развитии силы и мышц.
- Удобство. Эти машины легко использовать и требуют минимальной настройки, что делает их предпочтительным выбором для многих фитнес-энтузиастов.
- Постоянство. Они предлагают постоянный опыт тренировки, что крайне важно для отслеживания прогресса и внесения корректировок в программу тренировок.
- Эффективные тренировки. Машины могут обеспечить комплексную тренировку всего тела за короткое время, что делает их эффективным выбором для тех, у кого плотное расписание.
Тренировочные машины являются универсальным и надежным инструментом для всех, кто стремится улучшить свою форму.
Стоимость доставки тренажеров
Будь вы любителем фитнеса или профессиональным тренером, получение правильного спортивного оборудования является фундаментальным. Доставка спортивного оборудования и инвентаря на ваш адрес может значительно упростить этот процесс. Эта услуга позволяет вам избежать необходимости транспортировки и гарантирует, что все, начиная от грузоблочного оборудования и заканчивая гантелями, доставляется безопасно и своевременно.
Доставка предоставляет вам удобство заказа из комфорта своего дома и получения оборудования прямо на вашем пороге или в зале. Это особенно выгодно для тяжелых или громоздких предметов, которые сложно перевозить. Эта услуга часто включает профессиональную сборку, что обеспечивает правильную установку вашего оборудования и его готовность к использованию. Таким образом, заказывая оборудование для домашнего зала или пополняя профессиональный объект, вы можете сосредоточиться на тренировке, зная, что ваши потребности в оборудовании будут учтены.
Стоимость доставки тренажеров и спортивного инвентаря может значительно варьироваться в зависимости от ряда факторов:
- Во-первых, вес и габариты груза играют значительную роль. Большие и тяжелые тренажеры обычно стоят дороже для доставки по сравнению с легкими и маленькими.
- Во-вторых, расстояние до места доставки также влияет на стоимость. Доставка на большие расстояния или в труднодоступные места может стоить больше.
- В-третьих, условия доставки, такие как быстрая доставка или специальная упаковка, могут повысить общую стоимость.
Перед тем как оформить доставку, обязательно уточните все детали у менеджера нашей компании.
Сборка и установка спортивного оборудования
Наша команда специализируется на сборке и установке силовых тренажеров в спортивных залах. Мы обеспечиваем высококачественное обслуживание для профессионалов и любителей спорта. Силовые тренажеры – это неотъемлемая часть любого спортивного зала, и мы понимаем, насколько важно, чтобы они были правильно собраны и установлены. Наши специалисты имеют опыт работы с различными моделями, гарантируя безупречное качество выполнения работ.
Мы стремимся обеспечить максимальное удобство и безопасность для всех пользователей тренажеров, поэтому внимательно следим за каждым этапом процесса сборки и установки. Безусловно, правильная установка оборудования обеспечивает его долгую службу и надежность в использовании. Обратившись к нам, вы получите профессиональный сервис, надежность и безопасность.
Изготовление тренажеров под заказ
Мы рады предложить вам услуги по изготовлению тренажеров для спортзалов под заказ. Наша компания обладает богатым опытом и высокими технологиями, что позволяет нам создавать тренажеры, которые сочетают в себе качество, функциональность и стиль. Мы учитываем все пожелания клиента и осуществляем полный контроль на каждом этапе изготовления.
Наше производство оснащено современным оборудованием, давая нам возможность создавать тренажеры любой сложности и конфигурации. Мы гарантируем прочность и долговечность нашей продукции благодаря использованию качественных материалов и строгому контролю качества.
Ваш спортзал заслуживает лучшего, и мы готовы предложить вам тренажеры, которые помогут его посетителям достичь новых вершин в спорте. Независимо от того, являетесь ли вы профессионалом или любителем, наши тренажеры помогут вам повысить уровень физической подготовки и улучшить здоровье.
