как закрасить кнопку select в нужный цвет

711
24 мая 2017, 06:05

Как закрасить кнопку select в нужный цвет. Белая стрелка на сером фоне. С border понятно

Answer 1
Быстрый ответ

select { 
  border: 2px solid #5B5B5B; 
  background: transparent; 
  width: 125px; 
  padding: 5px 35px 5px 5px; 
  font-size: 16px; 
  height: 28px; 
  -webkit-appearance: none; 
  -moz-appearance: none; 
  appearance: none; 
  background: no-repeat right url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAZCAMAAAAVHr4VAAAASFBMVEVbW1v+/v7Y2NiDg4P7+/vj4+PV1dV0dHRiYmJeXl729vby8vLr6+vPz8/CwsK8vLytra2pqamYmJiVlZWHh4d2dnZpaWloaGivQPliAAAAVklEQVQoz93PSQ6AIBBE0WIScJ69/03VdCQGGvfyt29ThQJT8pWKtRIh42O0OuCKpPGxDmnekOmN3UQ4gK2/rd55PJoLJ2SahWgdK3R2QTYr8ZHDbzsBMLkBiiUpVMwAAAAASUVORK5CYII=') 
} 
 
 
/* CAUTION: IE hackery ahead */ 
 
select::-ms-expand { 
  display: none; 
  /* remove default arrow on ie10 and ie11 */ 
} 
 
 
/* target Internet Explorer 9 to undo the custom arrow */ 
 
@media screen and (min-width:0\0) { 
  select { 
    background: none\9; 
    padding: 5px\9; 
  } 
}
<select> 
    <option>5 кг</option> 
    <option selected>10 кг</option> 
    <option>20 кг</option> 
    <option>30 кг</option> 
</select>

Здесь использовалось решение #1, описанное ниже

Описание решений

На stackoverflow.com пользователем Danield предложено 3 решения для стилизации select.

Я позволил себе сделать вольный перевод данного ответа, сохранив все ссылки на статьи и примеры из оригинального ответа.

Решение #1 - appearance: none

Демо

Суть решения заключается в том, чтобы спрятать стрелочку с помощью appearance: none и добавить произвольное изображение.

select {
   -webkit-appearance: none; 
   -moz-appearance: none;
   appearance: none;       /* удаляем стандартную стрелочку */
   background-image: url(...);   /* добовляем произвольное изображение */
}

appearance: none имеет хорошую поддержку браузерами, однако не поддерживается IE11- и Firefox 34-

Мы можем добавить поддержку IE10 и IE11 добавив

select::-ms-expand { 
    display: none; /* скрывает стрелку в IE10 и IE11 */
}

К сожалению, мы не сможем скрыть стрелку в IE9, мы лишь можем убрать нашу собственную и оставить стандартную

/* target Internet Explorer 9 to undo the custom arrow */
@media screen and (min-width:0\0) {
    select {
        background-image:none\9;
        padding: 5px\9;
    } 
}

Если нужна поддержка IE9- и Firefox 34-, тогда:

Решение 2 - Обрезать элемент select, чтобы спрятать стрелочку

Демо

Суть решения заключается в том, чтобы обернуть select элементом div, который имеет фиксированную ширину и overflow:hidden. Элементу select установить ширину на примерно 20px больше чем ширина div. В результате стандартная стрелка будет не видна, будет обрезана элементом div, и мы можем использовать любое фоновое изображение в правой части div.

Преимущество этого решения в широкой поддержке браузерами (IE8+, браузеры на WebKit и Gecko). Однако, есть и недостаток, выпадающий список с option выступает относительно правого края select на те самые 20px.

Подробнее о способе можно прочитать тут

Если стандартная стрелочка необхоима на Firefox 34-, но вам не нужна поддержка старых IE, тогда:

Решение 3 - pointer-events

Идея заключается в том, чтобы перекрыть стандартную стрелку select элементом с pointer-events:none.

Демо

Преимущество: хорошо выглядит и работает на WebKit и Gecko. Недостаток: вы не можите добавить :hover или cursor:pointer своей стрелочке, так как мы отключили события курсора. Еще один недостаток, Internet Explorer 10 и ниже не поддерживает pointer-events, это означает, что клик по элементу со своей стрелочкой не приведет к открытию списка.

Можно использовать Modernizr или условные комментарии, чтобы вернуть стандартные стрелочки в IE.

Учтите, что IE10 больше не поддерживает условные комментарии. Однако, есть еще один способ отключить pointer-events для IE10 с помощью CSS hack.

Подробнее о способе можно прочитать тут

READ ALSO
mysql добавить столбец с сегодняшней датой

mysql добавить столбец с сегодняшней датой

Привет, необходимо добавить в таблицу Tempvigruzka столбец dates с сегодняшней датой Пробовал 'Alter table tempvigruzka add dates datetime' но он вводит пустые значения

318
Не могу выбрать используемую БД, которая существует. [требует правки]

Не могу выбрать используемую БД, которая существует. [требует правки]

Есть 2 созданные БД: bank; personНе могу выбрать в качестве используемой БД person, хотя могу просмотреть ее содержимое через desc

201
Задача 45 sql-ex.ru [требует правки]

Задача 45 sql-ex.ru [требует правки]

Как выбрать названия кораблей без пробела в конце?

347
Регулярка mysql

Регулярка mysql

Составил регулярку and real_mobile_phone REGEXP '^(\+7)[[:digit:]]{10}$' = 1 но выдает ошибку Got error 'repetition-operator operand invalid' from regexpЕсли брать без плюса '^7[[:digit:]]{10}$', то все...

227