Как изменить css цвета тегов select2?
Я только начал использовать project для отображения нескольких тегов из окна выбора, и он отлично работает, спасибо за библиотеку.
мне просто нужно изменить цвет или css тегов, показанных в многозначных полях выбора. Прямо сейчас цвет тега отображается как серый, и я хотел бы изменить его на какой-то другой цвет в соответствии с типом тега. Или, по крайней мере, есть способ изменить цвет по умолчанию?
также можно ли изменить класс CSS тегов? Там является такой опцией, как formatResultCssClass
но когда я попытался добавить классы css через это свойство ничего не изменилось, я был бы признателен, если бы кто-нибудь мог показать пример, как это сделать?
Edit: обходной путь для решения проблемы: Добавить новое свойство в select2.значения по умолчанию для представления классов выбранных объектов.
$.fn.select2.defaults = {
...
selectedTagClass: "",
...
}
addSelectedChoice: function (data) {
var choice=$(
"<li class='select2-search-choice " + this.opts.selectedTagClass + "'>" +
" <div><a href='#' onclick='return false;' class='select2-search-choice-close' tabindex='-1'><i class='icon-remove icon-white'/></a></div>" +
"</li>"),
id = this.id(data),
val = this.getVal(),
formatted;
...
и инициализировать select2, используя это новое свойство:
$(".#select2Input").select2({placeholder: "Please Select Country",
selectedTagClass: 'label label-info', // label label-info are css classes that will be used for selected elements
formatNoMatches: function () { return "There isn't any country similar to entered query"; }
});
7 ответов
First up-предупреждение о том, что это означает, что вы переопределяете CSS, который является внутренним для select2, поэтому, если код select2 изменится позже,вам также придется изменить свой код. Нет formatChoiceCSS
способ на данный момент (хотя это было бы полезно).
чтобы изменить цвет по умолчанию, вам придется переопределить различные свойства CSS тега, который имеет этот класс CSS:
.select2-search-choice {
background-color: #56a600;
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0 );
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
-webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
-moz-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05);
color: #333;
border: 1px solid #aaaaaa;
}
изменить класс каждого тега на основе текста или вариант # из этого тега вам нужно будет добавить событие изменения:
$("#select2_element").on("change", function(e) {
if (e.added) {
// You can add other filters here like
// if e.val == option_x_of_interest or
// if e.added.text == some_text_of_interest
// Then add a custom CSS class my-custom-css to the <li> added
$('.select2-search-choice:not(.my-custom-css)', this).addClass('my-custom-css');
}
});
и вы можете определить пользовательский цвет фона и т. д. В этот класс:
li.my-custom-css {
background-color: // etc etc
}
для форматирования тегов можно использовать функцию formatSelectionCssClass.
$("#mySelect").select2({
formatSelectionCssClass: function (data, container) { return "myCssClass"; },
});
или вы можете добавить класс css на основе идентификатора опции:
$("#mySelect").select2({
formatSelectionCssClass: function (data, container) { return data.id; },
});
помните, что вам нужно будет переопределить как фильтр, так и background_color в вашем классе css
в моем случае мне нужно было показать разницу между тегами, которые были "выбраны" и теми, которые были добавлены.
помощь здесь была для предыдущих версий select2, и не много пользы. Используя текущую версию 4.0 (с ее ужасно разреженной документацией), я смог добиться этого, используя функции шаблона и немного "ума".
первым шагом является шаблон результатов (следует отметить, что при каждом выборе или удалении действия это увольняется за каждый выбор в коробке). Это обычно возвращает только текст, который будет идти в результирующем LI... однако мы хотим обернуть этот текст в промежуток (и сказать S2 не удалять HTML, возвращая объект) с помощью пользовательского класса CSS для нашего типа. В моем примере я использую selected
свойство для определения этого:
$('.select2_sortable').select2({
tags: true,
templateSelection: function(selection) {
if(selection.selected) {
return $.parseHTML('<span class="im_selected">' + selection.text + '</span>');
}
else {
return $.parseHTML('<span class="im_writein">' + selection.text + '</span>');
}
}
});
ваш результирующий HTML после выбора элемента должен быть примерно таким:
<ul class="select2-selection__rendered ui-sortable" id="select2_rendered_smartselectbox_4">
<li class="select2-selection__choice" title="John Doe">
<span class="select2-selection__choice__remove" role="presentation">×</span>
<span class="im_selected">John Doe</span>
</li>
<li class="select2-selection__choice" title="fdfsdfds">
<span class="select2-selection__choice__remove" role="presentation">×</span>
<span class="im_writein">fdfsdfds</span>
</li>
<li class="select2-search select2-search--inline ui-sortable-handle">
<input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" placeholder="" style="width: 0.75em;">
</li>
</ul>
но этого недостаточно, так как нам нужен доступ родитель ли, а не ребенок span. И поскольку CSS не допускает родительских селекторов, мы должны запустить jQuery, чтобы это произошло. Поскольку они перерисованы, мы хотим запустить эту функцию на обоих select
и remove
события элемента Select2:
$('.select2_sortable').on("select2:select", function (ev) {
updateSelectedParents();
});
$('.select2_sortable').on("select2:removed", function (ev) {
updateSelectedParents();
});
function updateSelectedParents() {
$('.im_selected').closest('li').addClass('im_connected_item');
$('.im_writein').closest('li').addClass('im_writein_item');
}
наконец, в результате:
<ul class="select2-selection__rendered ui-sortable" id="select2_rendered_smartselectbox_4">
<li class="select2-selection__choice im_connected_item" title="John Doe">
<span class="select2-selection__choice__remove" role="presentation">×</span>
<span class="im_selected">John Doe</span>
</li>
<li class="select2-selection__choice im_writein_item" title="fdfsdfds">
<span class="select2-selection__choice__remove" role="presentation">×</span>
<span class="im_writein">fdfsdfds</span>
</li>
<li class="select2-search select2-search--inline ui-sortable-handle">
<input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" placeholder="" style="width: 0.75em;">
</li>
</ul>
и позволяет вам стилизовать свои элементы на основе im_writein_item
и im_connected_item
CSS-классы.
использовать formatResultCssClass
, containerCssClass
и dropdownCssClass
опции для указания классов в коде,adaptContainerCssClass
и adaptDropdownCssClass
параметры для указания классов в разметке или даже containerCss
и dropdownCss
параметры для указания встроенного стиля в коде.
Если вам интересно, почему вы никогда не использовали их, они не были должным образом задокументированы некоторое время назад.
ссылка: http://ivaynberg.github.io/select2/>
вы можете получить доступ к контейнеру тег такой:
formatSelectionCssClass = function(tag, container) {
$(container).parent().addClass("my-css-class");
};
для тех, кто только хочет изменить цвет некоторых полей select2:
вместо прямого изменения свойств CSS Select2 select2-choice напрямую используйте идентификатор, сгенерированный select2 для div select2 (это будет #s2id_yourelementid), чтобы выбрать его дочерние элементы, несущие класс select2-choice.
например, если я хочу изменить элемент #myelement, к которому я применяю Select2, а затем изменить цвет, я бы добавил следующее в свой css:
#s2id_myelement > .select2-choice{
background-color:blue;
}
добавление этого CSS работало для меня:
.select2-selection__choice {
background-color: red !important;
filter: progid: DXImageTransform.Microsoft.gradient( startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0);
background-image: -webkit-linear-gradient(top, red 25%, yellow 52%, green 25%, purple 100%) !important;
background-image: -moz-linear-gradient(top, red 25%, yellow 52%, green 25%, purple 100%) !important;
background-image: -o-linear-gradient(top, red 25%, yellow 52%, green 25%, purple 100%) !important;
background-image: -ms-linear-gradient(top, red 25%, yellow 52%, green 25%, purple 100%) !important;
background-image: linear-gradient(top, red 25%, yellow 52%, green 25%, purple 100%) !important;
-webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0, 0, 0, 0.05) !important;
-moz-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0, 0, 0, 0.05) !important;
box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0, 0, 0, 0.05) !important;
color: white !important;
border: 1px solid #aaaaaa !important;
}
Пример Скрипку:
http://jsfiddle.net/sajjansarkar/hvsvcc5r/
(да, я сошел с ума от цветов, чтобы продемонстрировать свою точку зрения; -))