Каково правильное значение -moz-appearance, чтобы скрыть стрелку раскрывающегося списка элемента ‹select›

Я пытаюсь создать стрелку раскрывающегося списка элемента <select> только с помощью CSS, она отлично работает в Chrome/Safari:

select {
  -webkit-appearance: button;
  -webkit-border-radius: 2px;
  -webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
  -webkit-padding-end: 20px;
  -webkit-padding-start: 2px;
  -webkit-user-select: none;

  background-image: url('./select-arrow1.png') ;
  background-position: center right;
  background-repeat: no-repeat;
  border: 1px solid #AAA;
  margin: 0;
  padding-top: 2px;
  padding-bottom: 2px;
  width: 200px;
}

Который выглядит прекрасно, как показано здесь

По этой логике единственное, что мне нужно было сделать, чтобы заставить его работать в Firefox, это добавить все -webkit-* в качестве -moz-* :

-moz-appearance: button;
-moz-border-radius: 2px;
-moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
-moz-padding-end: 20px;
-moz-padding-start: 2px;
-moz-user-select: none;

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

Похоже, что -moz-appearance: button; не работает для элемента <select>. Также -moz-appearance: none; не влияет на удаление стрелки раскрывающегося списка по умолчанию.

Итак, каково правильное значение для -moz-appearance, чтобы удалить стрелку раскрывающегося списка по умолчанию?

Обновления:

11 декабря 2014 г.: Хватит изобретать новые хитрости. Спустя 4 с половиной года -moz-appearance:none начинает работать с Firefox 35. Хотя moz-appearance:button все еще не работает, вам все равно не нужно его использовать. Вот очень простой рабочий пример.

28 апреля 2014 г.: упомянутая взлом css работал пару месяцев, но с начала апреля 2014 года эта ошибка снова появилась в Firefox 31.0.a1 Nightly на всех платформах.


person Tony    schedule 22.07.2011    source источник
comment
Просто чтобы вы знали, что ошибка была исправлена ​​в Firefox 35 \o/   -  person MatTheCat    schedule 09.12.2014
comment
@MatTheCat вау, спустя 4,5 года! За это время я сменил 2 подруг, 3 собак и 2 квартиры. Но я думаю, мы должны быть благодарны, что они все равно наполовину исправили это.   -  person Tony    schedule 11.12.2014
comment
Это означает, что ‹ FF35 нам нужно СКРЫТЬ либо нашу пользовательскую стрелку, либо стрелку по умолчанию. В противном случае вы увидите обе стрелки.   -  person Ben Racicot    schedule 15.01.2015


Ответы (8)


Вот оно, ребята! ИСПРАВЛЕНО!


Подождите и посмотрите: https://bugzilla.mozilla.org/show_bug.cgi?id=649849

или обходной путь


Для интересующихся:

https://bugzilla.mozilla.org/show_bug.cgi?id=649849#c59

Во-первых, поскольку ошибка содержит много враждебного спама, она создает враждебное рабочее место для любого, кому это поручено.

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

В-третьих, даже когда у этого человека снова появится время, нет никакой гарантии, что это будет приоритетом, потому что, несмотря на то, что у webkit есть это, это нарушает спецификацию того, как должна работать (это то, что мне сказали, я лично не знать спецификацию)

Теперь см. https://wiki.mozilla.org/B2G/Schedule_Roadmap ;)


Страница больше не существует, и ошибка не исправлена, но приемлемый обходной путь предложил João Cunha, вы, ребята, можете поблагодарить его за это!

person MatTheCat    schedule 22.07.2011
comment
Спасибо! Надеюсь, это будет исправлено в ближайшее время. В качестве обходного пути я буду использовать исходный код в другой вопрос, на который вы ответили - person Tony; 22.07.2011
comment
Боже, год спустя, и кажется, мы все еще можем ждать. - person MatTheCat; 02.08.2012
comment
да, довольно грустно, что через полтора года статус этого отчета об ошибке остается на НОВЫЙ - person Tony; 29.09.2012
comment
О, ужасная ошибка позиции в стиле списка. Раньше я обходил ее, назначая display: inline элементу заголовка. Тем временем я полностью перешел на Chromium и стараюсь избегать Firefox, насколько это возможно. - person Tony; 29.09.2012
comment
два года назад... вот почему у нас есть Chrome! - person Mbrevda; 12.06.2013
comment
Ответ от Mozilla, упомянутый MatTheCat, действительно ужасен. По сути, они говорят: «Мы классные». Смирись или заткнись. - person Tony; 09.07.2013
comment
Ошибка все еще не исправлена, но я нашел обходной путь, проверьте мой ответ здесь. И также сообщение об ошибке: bugzilla.mozilla.org/show_bug.cgi?id= 649849#c84 - person João Cunha; 20.08.2013
comment
Я добавил ссылку на ваш ответ, вы заслуживаете внимания за свой трюк! - person MatTheCat; 26.08.2013
comment
Спасибо чувак! Я рад быть чем-то полезным :) - person João Cunha; 26.08.2013
comment
Ха! Я нахожу довольно забавным (и грустным), что люди сейчас внедряют подобные хаки для исправления основных ошибок CSS в так называемом движке браузера с открытым исходным кодом! Только потому, что власть имущие отказываются исправлять этот баг. Напоминает мне все те хаки для IE6, которые люди изобретали... - person Tony; 02.09.2013

Обновление: исправлено в Firefox v35. Подробнее см. в полном описании.


== как скрыть стрелку выбора в Firefox ==

Только что придумал, как это сделать. Хитрость заключается в том, чтобы использовать сочетание -prefix-appearance, text-indent и text-overflow. Это чистый CSS и не требует дополнительной разметки.

select {
    -moz-appearance: none;
    text-indent: 0.01px;
    text-overflow: '';
}

Короче говоря, сдвинув его немного вправо, переполнение избавится от стрелки. Довольно аккуратно, да?

Подробнее об этой сути я только что написал. Протестировано на Ubuntu, Mac и Windows, все с последними версиями Firefox.

person João Cunha    schedule 20.08.2013
comment
Это хороший обходной путь, но, похоже, он недостаточно отталкивает стрелку, когда пользователь меняет область просмотра на что-то меньшее, чем 100%. - person Mathias Rechtzigel; 19.02.2014
comment
Да, это так, @MathiasaurusRex. Какую версию ОС и браузера вы тестируете? В данный момент я работаю над адаптивной формой, и я только что подтвердил. - person João Cunha; 19.02.2014
comment
@JoãoCunha Извините, я оговорился. Я имел в виду уменьшение масштаба окна просмотра до 100%. Я использую FireFox 26.0 и работаю на OSX 10.9.1. Вот JSFiddle — jsfiddle.net/2Vtf9/1 Нажатие команды минус (-), которая уменьшает масштаб до 90%, приведет к отображению стрелки раскрывающегося списка. - person Mathias Rechtzigel; 19.02.2014
comment
Не слишком большая проблема, потому что исправление в любом случае является своего рода хаком, и Mozilla просто нужно исправить ошибку. Ваше исправление и то, как оно реагирует на масштабирование, кажется мне логичным! - person Mathias Rechtzigel; 19.02.2014
comment
Эй, хорошая находка! Соответственно обновлю суть :) gist.github.com/joaocunha/6273016 - person João Cunha; 20.02.2014
comment
Я просто хотел бы отметить, что этот обходной путь больше не работает с Firefox 31 (ночная сборка, май 2014 г.). Насколько мне известно, на данный момент обходного пути нет. - person Bendik; 14.05.2014

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

-moz-appearance: window; 
person RD.    schedule 26.09.2012
comment
Это даже недопустимое значение, согласно значениям, перечисленным на странице developer. mozilla.org/en-US/docs/CSS/-moz-appearance и, разумеется, не работает: i.imgur.com/w4hwD.jpg - person Tony; 29.09.2012
comment
Работает на MacOS/Firefox v 19.0.2 - person Adrian Florescu; 17.03.2013
comment
Это определенно сработало для меня. MacOS 10.9/Firefox33.0 - person Sean Larkin; 16.10.2014
comment
По какой-то странной причине работает только на Mac OSX, точно не работает на Windows. - person Erin Drummond; 05.12.2014

Попробуйте поставить opacity:0; ваш выбранный элемент будет невидимым, но параметры будут видны, когда вы нажмете на него.

person Josh Byvelds    schedule 09.11.2012
comment
Если элемент select невидим, как мы должны нажимать на опции? Поместив широкое фоновое изображение на выбор? И как узнать, какой вариант вы только что выбрали? Поместив событие onchange и обновив текст на странице? Извините, но это вообще не ответ. Это мохнатый гигантский взлом. - person Tony; 23.11.2012

В Mac OS -moz-appearance: window; удалит стрелку в соответствии с документацией MDN здесь: https://developer.mozilla.org/en-US/docs/CSS/-moz-appearance. Протестировано в Firefox 13 на Mac OS X 10.8.2. См. также: https://bugzilla.mozilla.org/show_bug.cgi?id=649849#c21.

person Joshua Davis    schedule 19.12.2012
comment
Работает на Mac, но не на Windows. Однако хорошее усилие. - person SpaceBeers; 20.06.2014

Стоит попробовать эти 2 варианта ниже, пока мы все еще ждем исправления в FF35:

select {
    -moz-appearance: scrollbartrack-vertical;
}

or

select {
    -moz-appearance: treeview;
}

Они просто скроют любое фоновое изображение стрелки, которое вы вставили в собственный стиль выбранного элемента. Таким образом, вы получаете стандартную стрелку браузера вместо ужасной комбинации стрелки браузера и вашей собственной стрелки.

person El Guapo    schedule 09.12.2014

Хотя вы еще не можете заставить Firefox удалить стрелку раскрывающегося списка (см. сообщение MatTheCat), вы можете скрыть свое «стилизованное» фоновое изображение от показа в Firefox.

-moz-background-position: -9999px -9999px!important;

Это поместит его вне рамки, оставив вам стрелку поля выбора по умолчанию — при сохранении стилизованной версии в Webkit.

person mattisahuman    schedule 12.02.2013
comment
Зачем мне это делать? - person Tony; 09.07.2013
comment
нет такого понятия как -moz-background-position - person billynoah; 11.10.2014
comment
однако вы можете сделать @-moz-document url-prefix() { select { background-position: -9999px!important; } } - person billynoah; 11.10.2014

он работает при добавлении:

выберите { ширина: 115% }

person sam    schedule 19.03.2013
comment
Это должен быть комментарий. - person Ariel Magbanua; 19.03.2013