it-swarm.com.ru

Bootstrap 3 Styled Select выглядит ужасно в Firefox на OS X

При стилизации элемента формы <select> в Bootstrap 3 он отображает некрасивую кнопку в Firefox в OS X:

Ugly select in Firefox on OS X

( http://bootply.com/98385 )

Это, по-видимому, известная проблема в течение некоторого времени, и существует ряд хаков и обходных путей, ни один из которых не очень чистый ( https://github.com/twbs/bootstrap/issues/765 ). Мне интересно, нашел ли кто-нибудь хорошее решение этой проблемы, кроме использования выпадающих списков Bootstrap или дополнительных плагинов. Я намеренно решил использовать раскрывающиеся списки HTML <select> вместо Bootstrap, поскольку удобство использования в длинных списках на мобильных устройствах лучше.

Это проблема Firefox или Bootstrap?

Подробности: Mac OS X 10.9, Firefox 25.0.1

Update 12/4/13: Я провел параллельное сравнение того, как каждый браузер отображает <select> в OS X 10.9, используя Firefox, Chrome и Safari, в ответ на @zessx (используя http: //bootply.com/98425 ). Очевидно, что между отображением элемента формы <select> в браузерах и ОС существует большая разница:

Each browser renders the select element quite differently

Я понимаю, что тег <select> обрабатывается по-разному в зависимости от того, какую ОС вы используете, поскольку существуют встроенные элементы управления на основе ОС, которые определяют стиль и поведение. Но что это за class="form-control" в Bootstrap, который заставляет элемент формы <select> выглядеть по-другому в Firefox? Почему стандартный стиль без <select> в Firefox выглядит хорошо, но как только он становится стилизованным, он выглядит некрасиво?

69
bhall

Вы можете изменить серое поле вокруг стрелки раскрывающегося списка в IE:

        select::-ms-expand {
            width:12px;
            border:none;
            background:#fff;
        }

enter image description here

27
jzm

На самом деле вы можете сделать практически все с помощью выпадающего поля, и оно будет выглядеть одинаково в любом браузере, посмотрите на пример кода 

select.custom {
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20fill%3D%22%23555555%22%20%0A%09%20width%3D%2224px%22%20height%3D%2224px%22%20viewBox%3D%22-261%20145.2%2024%2024%22%20style%3D%22enable-background%3Anew%20-261%20145.2%2024%2024%3B%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20d%3D%22M-245.3%2C156.1l-3.6-6.5l-3.7%2C6.5%20M-252.7%2C159l3.7%2C6.5l3.6-6.5%22%2F%3E%0A%3C%2Fsvg%3E");
  padding-right: 25px;
  background-repeat: no-repeat;
  background-position: right center;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}

select.custom::-ms-expand {
  display: none;
}

https://jsfiddle.net/x76j455z/10/

23
rafx

Основываясь на превосходных ответах rafx и Sina, здесь приведен фрагмент, предназначенный только для Firefox и заменяющий кнопку по умолчанию копией вниз, скопированной из темы иконок Bootstrap.

До:

 default select

После:

 styled select

@-moz-document url-prefix() {
  select.form-control {
    padding-right: 25px;
    background-image: url("data:image/svg+xml,\
      <svg version='1.1' xmlns='http://www.w3.org/2000/svg' width='14px'\
           height='14px' viewBox='0 0 1200 1000' fill='rgb(51,51,51)'>\
        <path d='M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z'/>\
      </svg>");
    background-repeat: no-repeat;
    background-position: calc(100% - 7px) 50%;
    -moz-appearance: none;
    appearance: none;
  }
}

(Встроенный SVG имеет обратную косую черту и новые строки для удобства чтения. Удалите их, если они вызывают проблемы в вашем конвейере ресурсов.)

Вот JSFiddle

19
Tobia

Существует приятный на вид плагин jQuery, который, очевидно, играет Nice с Bootstrap и называется SelectBoxIt ( http://gregfranko.com/jquery.selectBoxIt.js/ ). Что мне нравится в этом, так это то, что он позволяет вам запускать собственное поле выбора на любой ОС, на которой вы работаете, при этом сохраняя согласованный стиль ( http://gregfranko.com/jquery.selectBoxIt.js/#TriggertheNativeSelectBox ). О, как бы я хотел, чтобы Bootstrap предоставил эту опцию!

Единственным недостатком этого является то, что он добавляет еще один уровень сложности в решение и дополнительную работу для обеспечения совместимости со всеми другими плагинами, поскольку они обновляются/исправляются с течением времени. Я также не уверен в совместимости Bootstrap 3. Но это может быть хорошим решением для обеспечения согласованного просмотра браузеров и ОС.

8
bhall

Я уверен, что -webkit-appearance:none справится с Chrome и Safari.

Правка: -moz-appearance: none теперь должен работать также на Firefox.

7
Tim Nguyen

Это нормальное поведение, и оно вызвано стилем <select> по умолчанию в Firefox: вы не можете установить line-height, тогда вам нужно играть на padding, когда вы хотите иметь настроенный <select>.

Пример с результатами в Firefox 25/Chrome 31/IE 10:

<select>
  <option>Default</option>
  <option>Default</option>
  <option>Default</option>
</select>

<select class="form-control">
  <option>Bootstrap</option>
  <option>Bootstrap</option>
  <option>Bootstrap</option>
</select>

<select class="form-control custom">
  <option>Custom</option>
  <option>Custom</option>
  <option>Custom</option>
</select>
select.custom {
  padding: 0px;
}

Bootply

enter image description here

7
zessx

Это просто. Вам просто нужно поместить в .form-control это:

.form-control{
        -webkit-appearance:none;
        -moz-appearance: none;
        -ms-appearance: none;
        -o-appearance: none;
        appearance: none;
}

Это удалит внешний вид браузера и позволит вашему CSS.

2
Ivijan Stefan Stipić

Мы использовали плагин bootstrap-select для Bootstrap для выбора стиля. Действительно хорошо работает и имеет много интересных дополнительных функций. Я могу рекомендовать это точно.

1
aahoogendoorn

Я нашел два возможных пути решения этой конкретной проблемы:

  1. Использовать Выбранный

  2. Целевые браузеры Mozilla, использующие @-moz-document url-prefix(), примерно так:

@-moz-document url-prefix() {
  select {
    padding: 5px;
  }
}
1
Sina

Я использую Chosen . Посмотрите на: http://harvesthq.github.io/chosen/

Он работает в Firefox, Chrome, IE и Safari в одном стиле. Но не на мобильных устройствах.

0
skip2me99

С Bootstrap 4+ вы можете просто добавить класс custom-select для ваших выбранных входов, чтобы удалить стиль браузера и сохранить значки со стрелками.

Документация здесь: Bootstrap 4 Custom Forms Выберите меню

0
Braden Heckman