Изменить цвет фона параметра поля выбора

129

У меня есть selectполе, и я пытаюсь изменить цвет фона параметров, когда на selectполе щелкнули и отображаются все параметры.

См. Скрипку

HTML:

<select>
    <option val="">Please choose</option>
    <option val="1">Option 1</option>
    <option val="2">Option 2</option>
    <option val="3">Option 3</option>
    <option val="4">Option 4</option>
</select>

CSS:

select{
    margin:40px;
    background: rgba(0,0,0,0.3);
    color:#fff;
    text-shadow:0 1px 0 rgba(0,0,0,0.4);
}
ngplayground
источник

Ответы:

163

Вам нужно положить background-colorна optionтеге , а не selectтег ...

select option {
    margin: 40px;
    background: rgba(0, 0, 0, 0.3);
    color: #fff;
    text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4);
}

Если вы хотите стилизовать каждый из optionтегов ... используйте attributeселектор css :

select option {
  margin: 40px;
  background: rgba(0, 0, 0, 0.3);
  color: #fff;
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4);
}

select option[value="1"] {
  background: rgba(100, 100, 100, 0.3);
}

select option[value="2"] {
  background: rgba(150, 150, 150, 0.3);
}

select option[value="3"] {
  background: rgba(200, 200, 200, 0.3);
}

select option[value="4"] {
  background: rgba(250, 250, 250, 0.3);
}
<select>
  <option value="">Please choose</option>
  <option value="1">Option 1</option>
  <option value="2">Option 2</option>
  <option value="3">Option 3</option>
  <option value="4">Option 4</option>
</select>

udidu
источник
Я убрал опцию rgba и, кажется, теперь использую черный, который подойдет :)
ngplayground
5
:nth-child(1..n)Вместо этого вы можете использовать селектор CSS .
Сэмюэл Лью
2
Вероятно, вам не следует использовать селектор атрибутов. Вероятно, вы захотите использовать n-й дочерний элемент или вместо этого дать каждому варианту класс.
Фред
4
Не работает ни в Firefox, ни в Chromium (Linux Antergos)
Альберт
Попробуй добавить !imporant. Например:background: red!important;
michal
19

Я не знаю, учли вы это или нет, но если ваше приложение основано на раскрашивании различных групп элементов, вам, вероятно, следует использовать <optgroup>тег вместе с классом для дальнейших ссылок. Например:

<select>
    <optgroup label="Numbers" class="green">
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
    </optgroup>

    <optgroup label="Letters" class="blue">
        <option value="a">A</option>
        <option value="b">B</option>
        <option value="c">C</option>
    </optgroup>
</select>

а затем в заголовке вашего документа напишите css следующим образом:

<style type="text/css">
    .green option{
        background-color:#0F0;
    }

    .blue option{
        background-color:#00F;
    }
</style>
rfoo
источник
16

Да, вы можете установить это противоположным способом, используя это,

option:not(:checked) { }

Проверь это demo jsFiddle

HTML

<select>
    <option val="">Please choose</option>
    <option val="1">Option 1</option>
    <option val="2">Option 2</option>
    <option val="3">Option 3</option>
    <option val="4">Option 4</option>
</select>

CSS

select{
    margin:40px;
    background: rgba(0,0,0,0.3);
    color:#FFF;
    text-shadow:0 1px 0 rgba(0,0,0,0.4);
}
option:not(:checked) { 
    background-color: white; 
    color:#000;
}
Джей Патель
источник
@aswzen на самом деле в Chrome работает для меня (v65), но не в Firefox Quantum (v59).
CPHPython
7

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

Подобно некоторым ответам, но на самом деле не указано, это добавить класс к фактическому тегу option и использовать классы css ... в настоящее время это работает для меня без проблем в IE (см. Выше ss).

<select id="reviewAction">
<option class="greenColor">Accept and Advance Status</option>
<option class="redColor">Return for Modifications</option>
</select>

CSS:

.greenColor{
    background-color: #33CC33;
}
.redColor{
    background-color: #E60000;
}
dah97765
источник
3

Мои выделения не будут окрашивать фон, пока я не добавлю! Important в стиль.

    input, select, select option{background-color:#FFE !important}
Боб Бруниус
источник
2

Если вы действительно хотите стилизовать внутри a, рассмотрите возможность перехода на раскрывающийся список на основе Javascript / CSS, например http://getbootstrap.com/2.3.2/components.html#dropdowns или https://silviomoreto.github.io/ bootstrap-select / examples / . Это потому, что браузеры, такие как IE , не позволяют стилизовать параметры внутри элементов . У Chrome / OSX также есть эта проблема - вы не можете стилизовать параметры.

Однако к такому подходу прилагается предупреждение. Эти типы меню работают по-разному на мобильных платформах, потому что нативные элементы не используются. У них также могут быть раздражающие причуды на рабочем столе. Мой совет: 1) не пишите свои собственные и 2) найдите библиотеку, которая действительно хорошо протестирована.

Чарли Далсасс
источник
1

Вот и все, что я узнал о предмете!

Спецификация CSS 2 не решает проблему того, как элементы формы должны быть представлены пользователям!

Читайте здесь: разгромный журнал

В конце концов , вы никогда не найдете технических статей от w3c или других, посвященных этой теме. Стилизация элементов формы, в частности окон выбора, не полностью поддерживается, однако вы можете ездить ... с некоторыми усилиями!

Стилизация элементов HTML-формы

Создание собственных виджетов

Не тратьте время на хаки, прочтите ссылки и узнайте, как профессионалы делают свою работу!

obinoob
источник
1

Просто измените цвет bg

select { background: #6ac17a; color:#fff; }

Томас Мэтью
источник
0

Другой вариант - использовать Javascript:

if (document.getElementById('selectID').value == '1') {
       document.getElementById('optionID').style.color = '#000';

(Не такой чистый, как селектор атрибутов CSS, но более мощный)

Travis
источник
0
$htmlIngressCss='<style>';
$multiOptions = array("" => "All");
$resIn = $this->commonDB->getIngressTrunk();
while ($row = $resIn->fetch()) {
    if($row['IsActive']==0){
        $htmlIngressCss .= '.ingressClass select, option[value="'.$row['TrunkInfoID'].'"] {color:red;font-weight:bold;}';
    }
    $multiOptions[$row['TrunkInfoID']] = $row['IngressTrunkName'];
}
$htmlIngressCss.='</style>';

добавьте $htmlIngressCssв свою html-часть :)

Chintan
источник