Как стилизовать опцию html-элемента «select»?

202

Вот мой HTML:

<select id="ddlProducts" name="ddProducts"> 
    <option>Product1 : Electronics </option>
    <option>Product2 : Sports </option>
</select>

Я хочу сделать название продукта (то есть «Product1», «Product2» и т. Д.) Жирным, а его категории (например, электроника, спорт и т. Д.) Курсивом, используя только CSS. Я нашел старый вопрос, в котором говорилось, что невозможно использовать HTML и CSS, но, надеюсь, сейчас есть решение.

MrClan
источник
Не уверен насчет этого. Я думаю, что нет. Для этого вам понадобится магия JavaScript (jQuery).
Призрак Мадары
6
варианты до сих пор так же раздражают стиль, как они когда-либо были. то, что вы, возможно, захотите использовать, - это optgroup: htmlhelp.com/reference/html40/forms/optgroup.html, это даст вам жирную и выделенную курсивом категорию (например, электроника), в которую попадает множество вариантов.
wolv2012

Ответы:

203

Есть только несколько атрибутов стиля, которые можно применить к <option>элементу.

Это потому, что этот тип элемента является примером «замененного элемента». Они зависят от ОС и не являются частью HTML / браузера. Он не может быть стилизован через CSS.

Существуют сменные плагины / библиотеки, которые выглядят как, <select>но на самом деле состоят из обычных HTMLэлементов, которые МОГУТ быть стилизованы.

Диодей - Джеймс Макфарлейн
источник
2
Это поведение различается в разных браузерах и в разных ОС; Стоит уточнить, если вы говорите в основном об IE на Windows.
Винс Боудрен
4
Вы можете select > optionсоздавать стили , но для этого не существует надежного кросс-браузерного решения, и, по крайней мере, в Chrome вы можете максимально настроить размер шрифта, семейство, фон и цвет переднего плана. Может быть, еще несколько настроек, но такие вещи, как обивка, цвет при наведении и тому подобное, мне не удалось изменить. Действительно, могут быть альтернативы, но в зависимости от проекта тег <select> может понадобиться, например, для угловой проверки или по какой-либо другой причине.
Фелипе
3
@ нет Я опубликовал ответ на теги параметров стиля . Он не показывает, как стилизовать <option>, но показывает, как имитировать, <select>чтобы вы могли стилизовать параметры.
UndoingTech
3
Несмотря на то, что это общепринятый ответ, OPTIONс помощью современных браузеров можно
стилизовать
2
Во внедрении мобильных устройств это еще менее стилизованно, поскольку элементы параметров даже не отображаются в зависимости от выбора в потоке страницы - он указан в отдельном прокручиваемом разделе внизу экрана - стилизован совсем иначе, чем как вы ожидаете в традиционном браузере.
благоговение
74

Нет, это невозможно, так как стили для этих элементов обрабатываются ОС пользователя. MSDN ответит на ваш вопрос здесь :

За исключением background-colorи color, настройки стиля, применяемые через объект стиля для элемента option, игнорируются.

esqew
источник
поэтому вывод таков: «опция выбора не может быть частично стилизована только с помощью CSS», верно ??? :(
MrClan
27
Важным моментом здесь является то, что они могут быть стилизованы, только очень минимально.
devios1
1
Чтобы добавить к пункту devios - собственный выбор может быть минимально стилизован для Windows, но не обязательно для других ОС. Как упомянуто ниже, вам нужно поменять выбор для других элементов (обычно это ul) и дублировать функциональность выбора в JavaScript для полного контроля над стилями.
Бенджамин Робинсон
3
<option style = "color: 'red';"> у меня не работает ... предложение?
Фабио
1
style="background-color: red;color: red;"не работает для меня. РЕДАКТИРОВАТЬ: После закрытия консоли разработчика стиль был применен.
Черный
33

Вы можете стилизовать элементы опций до некоторой степени.

Используя тэг * CSS, вы можете стилизовать параметры внутри поля, нарисованного системой.

Пример:

#ddlProducts *
{
 border-radius:15px;
 background-color:red;
}

Это будет выглядеть так:

введите описание изображения здесь

Zoron19
источник
2
Это верно только потому, что все селекторы нацелены на внутренние DOM-тени, вы можете выбрать их вручную для каждого браузера.
Mystrdat
20

Я нашел и использую этот хороший пример стилизации селекторов и опций. Вы можете делать с этим селектором все, что хотите. Вот скрипка

HTML

<select id="selectbox1">
    <option value="">Select an option&hellip;</option>
    <option value="aye">Aye</option>
    <option value="eh">Eh</option>
    <option value="ooh">Ooh</option>
    <option value="whoop">Whoop</option>
</select>
<select id="selectbox2">
    <option value="">Month&hellip;</option>
    <option value="january">January</option>
    <option value="february">February</option>
    <option value="march">March</option>
    <option value="april">April</option>
    <option value="may">May</option>
    <option value="june">June</option>
    <option value="july">July</option>
    <option value="august">August</option>
    <option value="september">September</option>
    <option value="october">October</option>
    <option value="november">November</option>
    <option value="december">December</option>
</select>

CSS

body {
    padding:50px;
    background-color:white;
}
.s-hidden {
    visibility:hidden;
    padding-right:10px;
}
.select {
    cursor:pointer;
    display:inline-block;
    position:relative;
    font:normal 11px/22px Arial, Sans-Serif;
    color:black;
    border:1px solid #ccc;
}
.styledSelect {
    position:absolute;
    top:0;
    right:0;
    bottom:0;
    left:0;
    background-color:white;
    padding:0 10px;
    font-weight:bold;
}
.styledSelect:after {
    content:"";
    width:0;
    height:0;
    border:5px solid transparent;
    border-color:black transparent transparent transparent;
    position:absolute;
    top:9px;
    right:6px;
}
.styledSelect:active, .styledSelect.active {
    background-color:#eee;
}
.options {
    display:none;
    position:absolute;
    top:100%;
    right:0;
    left:0;
    z-index:999;
    margin:0 0;
    padding:0 0;
    list-style:none;
    border:1px solid #ccc;
    background-color:white;
    -webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);
    -moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);
    box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);
}
.options li {
    padding:0 6px;
    margin:0 0;
    padding:0 10px;
}
.options li:hover {
    background-color:#39f;
    color:white;
}

JS

// Iterate over each select element
$('select').each(function () {

    // Cache the number of options
    var $this = $(this),
        numberOfOptions = $(this).children('option').length;

    // Hides the select element
    $this.addClass('s-hidden');

    // Wrap the select element in a div
    $this.wrap('<div class="select"></div>');

    // Insert a styled div to sit over the top of the hidden select element
    $this.after('<div class="styledSelect"></div>');

    // Cache the styled div
    var $styledSelect = $this.next('div.styledSelect');

    // Show the first select option in the styled div
    $styledSelect.text($this.children('option').eq(0).text());

    // Insert an unordered list after the styled div and also cache the list
    var $list = $('<ul />', {
        'class': 'options'
    }).insertAfter($styledSelect);

    // Insert a list item into the unordered list for each select option
    for (var i = 0; i < numberOfOptions; i++) {
        $('<li />', {
            text: $this.children('option').eq(i).text(),
            rel: $this.children('option').eq(i).val()
        }).appendTo($list);
    }

    // Cache the list items
    var $listItems = $list.children('li');

    // Show the unordered list when the styled div is clicked (also hides it if the div is clicked again)
    $styledSelect.click(function (e) {
        e.stopPropagation();
        $('div.styledSelect.active').each(function () {
            $(this).removeClass('active').next('ul.options').hide();
        });
        $(this).toggleClass('active').next('ul.options').toggle();
    });

    // Hides the unordered list when a list item is clicked and updates the styled div to show the selected list item
    // Updates the select element to have the value of the equivalent option
    $listItems.click(function (e) {
        e.stopPropagation();
        $styledSelect.text($(this).text()).removeClass('active');
        $this.val($(this).attr('rel'));
        $list.hide();
        /* alert($this.val()); Uncomment this for demonstration! */
    });

    // Hides the unordered list when clicking outside of it
    $(document).click(function () {
        $styledSelect.removeClass('active');
        $list.hide();
    });

});
Анаит Казарян
источник
1
Не могли бы вы опубликовать код здесь, потому что, может быть, когда-нибудь он будет удален, но здесь он останется в безопасном месте
Мохаммед Алабед
Это очень динамичный способ делать то, что вы хотите с помощью выбора, если у вас будет лучший вариант, я буду рад увидеть его здесь в качестве ответа @ahnbizcad
Anahit DEV
17
Это НЕ нативный html <select>, он просто перерисовывает один с некоторым кодом jQuery. Если вы собираетесь это сделать, то можете также использовать плагин jQuery, компонент React и т. Д., Который обрабатывает клавиатуру ВВЕРХ / ВНИЗ, ввод текста / поиск и т. Д.
Джон Калвинер,
10

Вот несколько способов стиля <option>вместе с<select> , если вы используете Bootstrap и / или JQuery. Я понимаю, что это не то, о чем просит оригинальный постер, но я подумал, что смогу помочь другим, кто наткнется на этот вопрос.

Вы все еще можете достичь цели стилизации каждого из них по <option>отдельности, но, возможно, придется применить некоторый стиль к ним <select>. Моя любимая библиотека - Bootstrap Select, упомянутая ниже.


Bootstrap Select Library (jquery)

Если вы уже используете bootstrap, вы можете попробовать библиотеку Bootstrap Select или библиотеку, указанную ниже (поскольку она имеет тему начальной загрузки).

Обратите внимание, что вы можете стилизовать весь selectэлемент илиoption элементы отдельно.

Примеры :

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Зависимости : требуется jQuery v1.9.1 +, Bootstrap , компонент dropdown.js Bootstrap и CSS Bootstrap

Совместимость : не уверена, но bootstrap заявляет, что «поддерживает последние стабильные выпуски всех основных браузеров и платформ»

Демо : https://developer.snapappointments.com/bootstrap-select/examples/

.special {
  font-weight: bold !important;
  color: #fff !important;
  background: #bc0000 !important;
  text-transform: uppercase;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.9/dist/css/bootstrap-select.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.9/dist/js/bootstrap-select.min.js"></script>

<select class="selectpicker">
  <option>Mustard</option>
  <option class="special">Ketchup</option>
  <option style="background: #5cb85c; color: #fff;">Relish</option>
</select>


Select2 (JS lib)

Есть библиотека, которую вы можете использовать, называется Select2 .

выбор2

Зависимости : Библиотека только JS + CSS + HTML (не требует JQuery).

Совместимость : IE 8+, Chrome 8+, Firefox 10+, Safari 3+, Opera 10.6+

Демо : https://select2.org/getting-started/basic-usage

Также есть тема начальной загрузки доступна .

Нет примера начальной загрузки:

$(function() {
  var $select = $('.select2');
  
  $select.select2({
    theme: 'paper'
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/css/select2.min.css" rel="stylesheet"/>

<select class="select2 form-control" placeholder="Country">
  <optgroup label="Alaskan/Hawaiian Time Zone">
    <option value="AK">Alaska</option>
    <option value="HI">Hawaii</option>
  </optgroup>
  <optgroup label="Pacific Time Zone">
    <option value="CA">California</option>
    <option value="NV">Nevada</option>
    <option value="OR">Oregon</option>
    <option value="WA">Washington</option>
  </optgroup>
</select>

Пример начальной загрузки:

$(function() {
  var $select = $('.select2');
  
  $select.select2({
    theme: 'paper'
  });
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.2/paper/bootstrap.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/css/select2.min.css" rel="stylesheet"/>

<select class="select2 form-control" placeholder="Country">
  <optgroup label="Alaskan/Hawaiian Time Zone">
    <option value="AK">Alaska</option>
    <option value="HI">Hawaii</option>
  </optgroup>
  <optgroup label="Pacific Time Zone">
    <option value="CA">California</option>
    <option value="NV">Nevada</option>
    <option value="OR">Oregon</option>
    <option value="WA">Washington</option>
  </optgroup>
</select>


MDBootstrap ($ & Bootstrap & JQuery)

Если у вас есть дополнительные деньги, вы можете воспользоваться премиальной библиотекой MDBootstrap . (Это целый комплект пользовательского интерфейса , поэтому он не легкий)

Это позволяет стилизовать элементы select и option с использованием дизайна Material .

введите описание изображения здесь

Есть бесплатная версия, но она не позволит вам использовать симпатичный дизайн Material!

Зависимости : Bootstrap 4 , JQuery,

Совместимость : «поддерживает последние стабильные выпуски всех основных браузеров и платформ».

Демонстрация : https://mdbootstrap.com/docs/jquery/forms/select/#color

Кэти
источник
19
Потому что вопрос касается стиля элемента option , а не элемента select .
Жалинас
5
Этот ответ вводит в заблуждение, потому что, хотя вы явно показываете, что можете стилизовать выделение , вы утверждаете, что этот вариант - это то, что можно стилизовать, даже если это элемент ОС, который вообще принимает только минимальный стиль CSS.
Эндрю Грей
@Jsalinas извини, мой предыдущий ответ был жестоким. Я заменил его на тот, который, я надеюсь, лучше.
Кэти
1
Отличный ответ! Хорошие примеры!
cskwg
Select2 4.0 больше не является чистым, так как теперь он основан на jQuery.
Галмок
9

Похоже, я могу просто установить CSS для selectChrome напрямую. CSS и HTML-код предоставлены ниже:

.boldoption {
	font-weight: bold;
}
<select>
	<option>Some normal-font option</option>
	<option>Another normal-font option</option>
	<option class="boldoption">Some bold option</option>
</select>
введите описание изображения здесь

HoldOffHunger
источник
2
@Muhamed Al Khalil: я обновил пример, чтобы он был более понятным, так как выбранная опция также имеет свой собственный стиль. Если это не сработает, то я подозреваю, что проблемы совместимости браузера, то. = \
HoldOffHunger
3
@Akash: Интересно, что это работало на Firefox до того, как они выпустили Firefox Quantum, и до сих пор работает на Chrome (более 60% пользователей). Могу поспорить, это ошибка!
HoldOffHunger
1
Это работает только для выпадающего меню, а не для того, что отображается как выбранное. Жаль.
WebDude0482
3

Как уже упоминалось, единственный способ - использовать плагин, который заменяет <select>функциональность.

Список плагинов jQuery: http://plugins.jquery.com/tag/select/

Посмотрите на пример с помощью Select2плагина: http://jsfiddle.net/swsLokfj/23/

AlexM
источник
В текущем jQuery Select2 4.x способ сделать это теперь другой. Смотрите: пример , документы .
Танус
3

Bootstrap позволяет использовать стили с помощью data-content:

<select class="selectpicker">
  <option data-content="<span class='label label-success'>Relish</span>">Relish</option>
</select>

Пример: https://silviomoreto.github.io/bootstrap-select/examples/

Bhetzie
источник
9
HTML, встроенный в атрибуты данных, заставляет меня чувствовать себя очень странно.
Бен Халл
2

Некоторые свойства могут быть стилизованы для <option>тега:

  • font-family
  • color
  • font-*
  • background-color

Также вы можете использовать собственный шрифт для отдельного <option>тега, например, любой шрифт Google , значки материалов или другие шрифты значков из icomoon или аналогичные . (Это может пригодиться для селекторов шрифтов и т. Д.)

Учитывая это, вы можете создать стек семейств шрифтов и вставлять значки в <option>теги, например.

    <select>
        <option style="font-family: 'Icons', 'Roboto', sans-serif;">a    ★★★</option>
        <option style="font-family: 'Icons', 'Roboto', sans-serif;">b    ★★★★</option>
    </select>

откуда взято Iconsи остальное Roboto.

Обратите внимание, что пользовательские шрифты не работают для мобильного выбора.

dy_
источник
<option style = "color: 'red';"> у меня не работает ... предложение?
Фабио
1
Удалить кавычки red: <option style = "color: red;">
dy_
1

На самом деле вы можете добавить: before и: after и стилизовать их. По крайней мере, это что-то

option{
    font-size:18px;
    background-color:#ffffff;
}
option:before{
    content: ">";
    font-size:20px;
    display:none;
    padding-right:10px;
    padding-left:5px;
    color:#fff;
}
option:hover:before{
    display:inline;
}

ProSales Softwaresysteme
источник
1

Наступил 2017 год, и можно выбрать конкретные варианты выбора. В моем проекте у меня есть таблица с классом = "Вариации" , и параметры выбора находятся в ячейке таблицы td = "значение" , а выбор имеет идентификатор select # pa_color . Элемент option также имеет класс option = "attach" (среди других тегов класса). Если пользователь вошел в систему как оптовый клиент, он может увидеть все варианты цвета. Но розничным покупателям не разрешается покупать 2 варианта цвета, поэтому я их отключил

<option class="attached" disabled>color 1</option>
<option class="attached" disabled>color 2</option>

Это заняло немного логики, но вот как я нацелился на отключенные опции выбора.

CSS

table.variations td.value select#pa_color option.attached:disabled {
display: none !important;
}

При этом мои цветовые варианты видны только оптовым покупателям.

Мистер гарнизон
источник
1

Оставляя здесь быструю альтернативу, используя переключение классов на столе. Поведение очень похоже на выбор, но может быть стилизовано с переходом, фильтрами и цветами, каждый ребенок в отдельности.

function toggleSelect(){ 
 if (store.classList[0] === "hidden"){
    store.classList = "viewfull"
  }
  else {
    store.classList = "hidden"
  }
}
#store {
  overflow-y: scroll;
  max-height: 110px;
  max-width: 50%
 }
 
.hidden {
  display: none
 }
 
.viewfull {
  display: block
}

#store :nth-child(4) {
  background-color: lime;
}

span {font-size:2rem;cursor:pointer}
<span onclick="toggleSelect()"></span>
 <div id="store" class="hidden">
 
<ul><li><a href="#keylogger">keylogger</a></li><li><a href="#1526269343113">1526269343113</a></li><li><a href="#slow">slow</a></li><li><a href="#slow2">slow2</a></li><li><a href="#Benchmark">Benchmark</a></li><li><a href="#modal">modal</a></li><li><a href="#buma">buma</a></li><li><a href="#1526099371108">1526099371108</a></li><a href="#1526099371108o">1526099371108o</a></li><li><a href="#pwnClrB">pwnClrB</a></li><li><a href="#stars%20u">stars%20u</a></li><li><a href="#pwnClrC">pwnClrC</a></li><li><a href="#stars ">stars </a></li><li><a href="#wello">wello</a></li><li><a href="#equalizer">equalizer</a></li><li><a href="#pwnClrA">pwnClrA</a></li></ul>
 
 </div>

NVRM
источник
1

Вы можете использовать встроенные стили, чтобы добавить привычные стили к <option>тегам.

Например: <option style="font-weight:bold;color:#09C;">Option 1</option> это будет применять стили только к этому конкретному <option>элементу.

Затем вы можете использовать немного волшебства javascript, чтобы применить встроенные стили ко всем <option>элементам внутри <select>тега следующим образом:

var select = $(document).getElementById('#select-element-id')

var option = select.children('#option-element-id')

option.css('font-weight', 'bold')

option.css('font-size', '24px')

Вы также можете использовать, <option value="" disabled> <br> </option>чтобы добавить разрыв строки между параметрами.

Винаяк Мукерджи
источник
0

Этот элемент отображается операционной системой, а не HTML. Его нельзя стилизовать с помощью CSS.

	$(function() {
    var clicky;
    var t=0;
    $(document).mousedown(function(e) {
        clicky = $(e.target);
    });
    $(document).mouseup(function(e) {
        clicky = null;
    });

    $("select").focusout(function(e) {
        if (typeof clicky.attr('id') !== typeof undefined && clicky.attr('id') !== false) {
        	$(this).parents().children("span.selected").html(clicky.html());
        	$(this).children('option[value="'+clicky.attr('id')+'"]').prop('selected', true);
		}
        
        $(this).parents().children("span.lists").html('');
        

    });
    $('select > option').text(function(i, text) {
				var attr = $(this).attr('selected');
				if (typeof attr !== typeof undefined && attr !== false) {
        				$(this).parents().parents().children("span.selected").html(text);
				}
	});

		$("select").focusin(function(){
			$(this).children('option').text(function(i, text) {
    			$(this).parents().children("span.lists").append("<span class='item' id='"+$(this).attr('value')+"'>"+text+"</span>");
				});
		});

	});
select {
  width: 0px;
  height: 0px;
  overflow:hidden;
  outline: none;
  border: none;
  appearance:none;
  -moz-appearance: none;

}
label{
	display: inline-block;
	padding: 5px 10px;
	position: relative;
	width: 100px;
	height: 20px;
	background-color:#ccc;

}
label .selected{
	display: inline-block;
	overflow: hidden;
	width: 100%;
	height: 100%;
}
label span.lists{
	width: 100%;
	display: inline-block;
	position: absolute;
	top: 100%;
	left: 0px;
	box-shadow: 0px 0px 2px 0px #ccc;
	background-color:#fff;
	z-index: 9;
}
label span.item{
	display: inline-block;
	width: 100%;
	border-bottom: 1px solid #ccc;
}
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
	<form action="?" method="GET">
	<label><span class="selected">select..</span> <span class="lists"></span>
	<select name="test">
		<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
		<option value="2" selected>item 2</option>
		<option value="3">item 3</option>
		<option value="4">item 4</option>
	</select>
	</label><br>
	<label><span class="selected">select..</span> <span class="lists"></span>
	<select name="test2">
		<option value="1">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</option>
		<option value="2">item 2</option>
		<option value="3" selected>item 3</option>
		<option value="4">item 4</option>
	</select>
	</label><br>
	<button>Submit</button>
</form>

</body>
</html>

попробуй это может тебе помочь

[ https://codepen.io/venu9l/pen/jeNXzY][1]
Венкат Г
источник
0

Вы можете добавить класс и дает font-weight: 700; в варианте. Но благодаря этому весь текст станет жирным.

Анас Чаудхари
источник
0

Это определенно будет работать. Опция select отображается операционной системой, а не html. Вот почему стиль CSS не действует, обычно option{font-size : value ; background-color:colorCode; border-radius:value; }
это работает, но мы не можем настроить отступы, поля и т. Д.

Код ниже 100% работает, чтобы настроить тег выбора, взятый из этого примера

var x, i, j, selElmnt, a, b, c;
/*look for any elements with the class "custom-select":*/
x = document.getElementsByClassName("custom-select");
for (i = 0; i < x.length; i++) {
  selElmnt = x[i].getElementsByTagName("select")[0];
  /*for each element, create a new DIV that will act as the selected item:*/
  a = document.createElement("DIV");
  a.setAttribute("class", "select-selected");
  a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
  x[i].appendChild(a);
  /*for each element, create a new DIV that will contain the option list:*/
  b = document.createElement("DIV");
  b.setAttribute("class", "select-items select-hide");
  for (j = 1; j < selElmnt.length; j++) {
    /*for each option in the original select element,
    create a new DIV that will act as an option item:*/
    c = document.createElement("DIV");
    c.innerHTML = selElmnt.options[j].innerHTML;
    c.addEventListener("click", function(e) {
        /*when an item is clicked, update the original select box,
        and the selected item:*/
        var y, i, k, s, h;
        s = this.parentNode.parentNode.getElementsByTagName("select")[0];
        h = this.parentNode.previousSibling;
        for (i = 0; i < s.length; i++) {
          if (s.options[i].innerHTML == this.innerHTML) {
            s.selectedIndex = i;
            h.innerHTML = this.innerHTML;
            y = this.parentNode.getElementsByClassName("same-as-selected");
            for (k = 0; k < y.length; k++) {
              y[k].removeAttribute("class");
            }
            this.setAttribute("class", "same-as-selected");
            break;
          }
        }
        h.click();
    });
    b.appendChild(c);
  }
  x[i].appendChild(b);
  a.addEventListener("click", function(e) {
      /*when the select box is clicked, close any other select boxes,
      and open/close the current select box:*/
      e.stopPropagation();
      closeAllSelect(this);
      this.nextSibling.classList.toggle("select-hide");
      this.classList.toggle("select-arrow-active");
  });
}
function closeAllSelect(elmnt) {
  /*a function that will close all select boxes in the document,
  except the current select box:*/
  var x, y, i, arrNo = [];
  x = document.getElementsByClassName("select-items");
  y = document.getElementsByClassName("select-selected");
  for (i = 0; i < y.length; i++) {
    if (elmnt == y[i]) {
      arrNo.push(i)
    } else {
      y[i].classList.remove("select-arrow-active");
    }
  }
  for (i = 0; i < x.length; i++) {
    if (arrNo.indexOf(i)) {
      x[i].classList.add("select-hide");
    }
  }
}
/*if the user clicks anywhere outside the select box,
then close all select boxes:*/
document.addEventListener("click", closeAllSelect);
/*the container must be positioned relative:*/
.custom-select {
  position: relative;
  font-family: Arial;
}
.custom-select select {
  display: none; /*hide original SELECT element:*/
}
.select-selected {
  background-color: DodgerBlue;
}
/*style the arrow inside the select element:*/
.select-selected:after {
  position: absolute;
  content: "";
  top: 14px;
  right: 10px;
  width: 0;
  height: 0;
  border: 6px solid transparent;
  border-color: #fff transparent transparent transparent;
}
/*point the arrow upwards when the select box is open (active):*/
.select-selected.select-arrow-active:after {
  border-color: transparent transparent #fff transparent;
  top: 7px;
}
/*style the items (options), including the selected item:*/
.select-items div,.select-selected {
  color: #ffffff;
  padding: 8px 16px;
  border: 1px solid transparent;
  border-color: transparent transparent rgba(0, 0, 0, 0.1) transparent;
  cursor: pointer;
}
/*style items (options):*/
.select-items {
  position: absolute;
  background-color: DodgerBlue;
  top: 100%;
  left: 0;
  right: 0;
  z-index: 99;
}
/*hide the items when the select box is closed:*/
.select-hide {
  display: none;
}
.select-items div:hover, .same-as-selected {
  background-color: rgba(0, 0, 0, 0.1);
}
<div class="custom-select" style="width:200px;">
  <select>
    <option value="0">Select car:</option>
    <option value="1">Audi</option>
    <option value="2">BMW</option>
    <option value="3">Citroen</option>
    <option value="4">Ford</option>
    <option value="5">Honda</option>
    <option value="6">Jaguar</option>
    <option value="7">Land Rover</option>
    <option value="8">Mercedes</option>
    <option value="9">Mini</option>
    <option value="10">Nissan</option>
    <option value="11">Toyota</option>
    <option value="12">Volvo</option>
  </select>
</div>

Харикришнан к
источник
Из обзора: Привет, пожалуйста, не отвечайте только с исходным кодом. Попробуйте дать хорошее описание того, как работает ваше решение. Смотрите: Как мне написать хороший ответ? , Спасибо
sɐunıɔ ןɐ qɐp
этот код взят прямо из w2schools w3schools.com/howto/tryit.asp?filename=tryhow_custom_select
coderpatomx
0

Даже если не нужно много свойств изменять, но вы можете добиться следующего стиля только с помощью css:

введите описание изображения здесь

HTML:

<div class="options">
    <select>
        <option value="">Apple</option>
        <option value="">Banana</option>
        <option value="">Orange</option>
        <option value="">Mango</option>
    </select>
</div>

CSS:

.options {

    border: 1px solid #e5e5e5;
    padding: 10px;

    select {
        font-size: 14px;
        border: none;
        width: 100%;
        background: white;
    }
}
Анил Сингх
источник