Как изменить цвет заполнителя Bootstrap-select

Я хочу изменить цвет заполнителя/заголовка в раскрывающемся списке Bootstrap-select. Сейчас он выглядит вот так: черный, я хочу, чтобы он был темно-серым.

До

Я попытался добавить это в свой css

span.filter-option.pull-left {
    color: darkgrey;
}

После, что отлично работает. Но это также сделало варианты темно-серыми, а не черными. см. здесь.Я хочу только изменить цвет заполнителя на темно-серый, а не все варианты. Как мне лучше всего это сделать? Спасибо.

HTML:

<select name="box" class="selectpicker form-control">
  <option value="">Select</option>
  <option value="option1"> Option 1 </option>
</select>

ИЗМЕНИТЬ:

Чистый стиль CSS по какой-то причине не работает для меня. Я попытался использовать собственное свойство Bootstrap-select title, но оно не выделено серым цветом, как показано в документации. Есть ли способ Javascript/JQuery для изменения цвета span.filter-option.pull-left в зависимости от того, выбран ли он «Выбрать» или «Вариант 1»?

PS. это то, что инструмент инспектора Chrome показывает мне для Select и для Вариант 1, кроме этих двух других вариантов нет.


person OneMoreQuestion    schedule 25.08.2016    source источник


Ответы (3)


Основная проблема заключается в том, что плагин (bootstrap-select) на самом деле не имеет установленного способа сделать это. Если вы просто используете одиночный выбор (атрибут не multiple в select), вы можете полагаться на класс bs-placeholder, который будет добавлен при выборе значения, который (если вы используете МЕНЬШЕ) использует переменную @input-color-placeholder для установки цвет:

.bootstrap-select {
  ...

  // The selectpicker button
  > .dropdown-toggle {
    ...

    &.bs-placeholder,
    &.bs-placeholder:hover,
    &.bs-placeholder:focus,
    &.bs-placeholder:active { color: @input-color-placeholder; }
  }
  ... 
}

Единственная проблема заключается в том, что плагин не добавляет класс, если это множественный выбор, поэтому вам нужно проявить немного творчества, чтобы определить, выбрано ли значение. К сожалению, единственная манипуляция с атрибутами DOM, которую я вижу по умолчанию, — это изменение заголовка .dropdown-toggle. Если вы не возражаете против жесткого кодирования начального атрибута title в CSS, вы можете добавить класс, который меняет цвет, если заголовок имеет определенное значение, подобное этому (https://jsfiddle.net/gxvqa5xa/):

.bootstrap-select > .dropdown-toggle[title=Select],
.bootstrap-select > .dropdown-toggle[title=Select]:hover,
.bootstrap-select > .dropdown-toggle[title=Select]:focus,
.bootstrap-select > .dropdown-toggle[title=Select]:active { color: darkgrey; }

Теперь, если это слишком грязно или ненадежно, плагин поддерживает прослушиватели событий, поэтому вы можете просто прослушивать изменения, проверять, пусто ли оно, и добавлять класс, если он есть (я предпочитаю этот метод):

$('.selectpicker').on('changed.bs.select', function (e) {
	$(this).prevAll('.dropdown-toggle').toggleClass('bs-placeholder', this.value === '');
}).trigger('changed.bs.select');
@import url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css);
@import url(https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.11.0/css/bootstrap-select.css);
*{outline:none !important;}

.bootstrap-select > .dropdown-toggle.bs-placeholder,
.bootstrap-select > .dropdown-toggle.bs-placeholder:hover,
.bootstrap-select > .dropdown-toggle.bs-placeholder:focus,
.bootstrap-select > .dropdown-toggle.bs-placeholder:active { color: red; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.11.0/js/bootstrap-select.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.js"></script>

<select name="box1" class="selectpicker form-control" title="Select">
  <option value="option1"> Option 1 </option>
  <option value="option2"> Option 2 </option>
  <option value="option3"> Option 3 </option>
</select>
<select name="box2" multiple class="selectpicker form-control" title="Select">
  <option value="option1"> Option 1 </option>
  <option value="option2"> Option 2 </option>
  <option value="option3"> Option 3 </option>
</select>

person Joseph Marikle    schedule 26.08.2016

Не знаю, как работает выбор начальной загрузки, но у нас есть селекторы атрибутов в CSS, вы можете их использовать. Что-то типа

elements[attribute] {

}

******* РЕДАКТИРОВАТЬ 1 *********

Покопавшись в BS-select, я нашел что-то вроде этого

<select class="selectpicker" title="Choose one of the following...">
    <option>Mustard</option>

    <option>Ketchup</option>
    <option>Relish</option>
</select>

Что поместит заполнитель коричневого цвета.

**** ИЗМЕНИТЬ 2* *****

Рабочий код

button.bs-placeholder[role='button']>span{ color:darkgrey; }

person Tarun Garg    schedule 25.08.2016
comment
Чтобы изменить цвет заполнителя (при использовании атрибута title), вы можете просто добавить правило стиля для класса .bs-placeholder - person Joseph Marikle; 26.08.2016
comment
@JosephMarikle, вы можете написать ответ с этим решением? - person OneMoreQuestion; 26.08.2016
comment
@OneMoreQuestion button.bs-placeholder [role='button'] > span { color: darkgrey; } - person Tarun Garg; 26.08.2016
comment
@TarunGarg спасибо, по какой-то причине ваше решение не работает для меня, но я прочитал документы, и это должно сработать - person OneMoreQuestion; 26.08.2016
comment
@OneMoreQuestion Извините, я не видел этот ответ вчера. Вам просто нужно использовать .bs-placeholder { color:darkgrey; }. Класс удаляется после выбора реального значения. Я не писал это как новый ответ, потому что это в основном ответ Таруна с одним крошечным дополнением. Если Тарун этого не сделает, я просто отредактирую этот ответ, чтобы указать правильное правило стиля. Кроме того, если вы используете Bootstrap SASS/LESS, $input-color-placeholder (@input-color-placeholder в LESS) — это переменная, которую .bs-placeholder использует для установки цвета. - person Joseph Marikle; 26.08.2016
comment
@JosephMarikle Я пытался сделать .bs-placeholder { color:darkgrey; } но он вообще не подхватывается кодом - person OneMoreQuestion; 26.08.2016
comment
@OneMoreQuestion Ой! Виноват. Специфика слишком высока в таблице стилей bootstrap-select. .bootstrap-select > .dropdown-toggle.bs-placeholder должно работать, кроме как при наведении, активном и фокусе. Кроме того, кажется, что сам плагин немного не соответствует классу bs-placeholder. Он не добавляет его при множественном выборе: jsfiddle.net/vdsv8k9u. Вероятно, лучший способ обойти это — использовать селектор атрибутов: jsfiddle.net/svdydpzs. Очевидно, используйте LESS или SASS для упрощения правил. - person Joseph Marikle; 26.08.2016
comment
@OneMoreQuestion Да, похоже, это должно быть так: jsfiddle.net/gxvqa5xa. .bootstrap-select > .dropdown-toggle[title=Select] {color:darkgrey !important;} будет работать. К сожалению, вам нужно жестко закодировать значение title, но это ограничение самого плагина. - person Joseph Marikle; 26.08.2016
comment
@JosephMarikle большое спасибо, чувак, это работает! Если вы хотите опубликовать свою скрипку в качестве ответа, я приму ее. - person OneMoreQuestion; 26.08.2016

  1. Установите другой цвет для всего тега select.
  2. Установите нормальный цвет для всех неотмеченных элементов.

select { color: red; }
option:not(:checked) { color: black; }
option:checked { color: black; }
<select name="box" class="selectpicker form-control colored-title">
<option value="" selected="selected">Select</option>
<option value="option1"> Option 1 </option>
</select>

https://jsfiddle.net/ojdoug22/

редактировать:

option:checked { color: black; }

Просто добавьте эту строку в свой CSS.

Новый JSFiddle: https://jsfiddle.net/ojdoug22/1/

edit2: Добавлен скриншот. Я вижу красные варианты выбора «заголовок», а все остальные черные. Если я выберу другой, он изменится. введите здесь описание изображения

person Daniel    schedule 25.08.2016
comment
Ваша скрипка на самом деле не работает? два одного цвета - person OneMoreQuestion; 26.08.2016
comment
Отредактировал CSS, попробуйте сейчас. - person Daniel; 26.08.2016
comment
Скрипка по-прежнему не показывает красный цвет. Также это Bootstrap - выберите пользовательский плагин, может быть, сначала импортируйте его? - person OneMoreQuestion; 26.08.2016
comment
Добавлен скриншот. - person Daniel; 26.08.2016
comment
какой у тебя браузер, в хроме всегда все черное, в фф все всегда красное - person OneMoreQuestion; 26.08.2016
comment
Chrome: 52.0.2743.116 m (64-разрядная версия) и IE 11.545 — оба работают нормально. - person Daniel; 26.08.2016