Есть ли CSS-стиль для <select>
выпадающего меню?
Мне нужно <select>
максимально стилизовать форму, без использования JavaScript. Какие свойства я могу использовать для этого в CSS?
Этот код должен быть совместим со всеми основными браузерами:
- Internet Explorer 6, 7 и 8
- Fire Fox
- Сафари
Я знаю, что могу сделать это с помощью JavaScript: Пример .
И я не говорю о простом оформлении. Я хочу знать, что лучшее, что мы можем сделать только с CSS.
Я нашел похожие вопросы по переполнению стека.
И этот на Doctype.com.
Ответы:
Вот три решения:
Решение № 1 - внешний вид: нет - с обходом Internet Explorer 10 - 11 ( демонстрация )
-
Чтобы скрыть стрелку по умолчанию, установленную
appearance: none
для элемента select, затем добавьте собственную стрелку сbackground-image
Поддержка браузера:
appearance: none
имеет очень хорошую поддержку браузера ( caniuse ) - за исключением Internet Explorer 11 (и более поздних ) и Firefox 34 (и более поздних ).Мы можем улучшить эту технику и добавить поддержку Internet Explorer 10 и Internet Explorer 11, добавив
Если Internet Explorer 9 вызывает озабоченность, у нас нет способа удалить стрелку по умолчанию (что означало бы, что теперь у нас будет две стрелки), но мы могли бы использовать классный селектор Internet Explorer 9.
Как минимум, чтобы отменить нашу пользовательскую стрелку - оставив стрелку выбора по умолчанию без изменений.
Все вместе:
Показать фрагмент кода
Это решение простое и имеет хорошую поддержку браузера - его должно быть достаточно.
Если необходима поддержка браузером Internet Explorer 9 (и более поздних версий) и Firefox 34 (и более поздних версий), продолжайте читать ...
Решение № 2 Обрезать элемент select, чтобы скрыть стрелку по умолчанию ( демонстрация )
-
(Подробнее читайте здесь)
Оберните
select
элемент в div с фиксированной шириной иoverflow:hidden
.Затем дайте
select
элементу ширину около 20 пикселей больше, чем div .В результате стрелка раскрывающегося списка
select
элемента по умолчанию будет скрыта (из-заoverflow:hidden
на контейнере), и вы можете поместить любое фоновое изображение, которое вы хотите, справа от div.Преимущество этого подхода состоит в том, что он является кросс-браузер (Internet Explorer 8 , а затем, WebKit и Gecko ). Однако недостатком этого подхода является то, что выпадающий список опций выступает справа (на 20 пикселей, которые мы спрятали ... потому что элементы опций принимают ширину элемента select).
[Следует, однако, отметить, что если пользовательский элемент выбора необходим только для мобильных устройств - тогда вышеупомянутая проблема не применяется - из-за способа, которым каждый телефон изначально открывает элемент выбора. Так что для мобильных устройств это может быть лучшим решением.]
Показать фрагмент кода
Если пользовательская стрелка необходима в Firefox - до версии 35 - но вам не нужно поддерживать старые версии Internet Explorer - тогда продолжайте читать ...
Решение № 3 - Использование
pointer-events
собственности ( демо )-
(Подробнее читайте здесь)
Идея здесь состоит в том, чтобы наложить элемент на собственную стрелку раскрывающегося списка (чтобы создать нашу собственную) и затем запретить события указателя на нем.
Преимущество: хорошо работает в WebKit и Gecko. Это выглядит хорошо (без выступающих
option
элементов).Недостаток: Internet Explorer (Internet Explorer 10 и ниже) не поддерживает
pointer-events
, что означает, что вы не можете щелкнуть пользовательскую стрелку. Кроме того, еще один (очевидный) недостаток этого метода заключается в том, что вы не можете нацеливать на новое изображение стрелки эффект наведения или курсор в виде руки, потому что мы просто отключили события указателя на них!Тем не менее, с помощью этого метода вы можете использовать Modernizer или условные комментарии, чтобы Internet Explorer вернулся к стандартному встроенному стрелке.
NB. Поскольку Internet Explorer 10 больше не поддерживает
conditional comments
: если вы хотите использовать этот подход, вам, вероятно, следует использовать Modernizr . Однако все еще возможно исключить CSS-события указателя из Internet Explorer 10 с помощью хака CSS, описанного здесь .Показать фрагмент кода
источник
Это возможно, но, к сожалению, в основном в браузерах на основе WebKit в той мере, в которой мы, как разработчики, требуем. Вот пример стилей CSS, собранных из панели параметров Chrome с помощью встроенного инспектора инструментов разработчика, улучшенного для соответствия поддерживаемым в настоящее время свойствам CSS в большинстве современных браузеров:
Когда вы запускаете этот код на любой странице в браузере на основе WebKit, он должен изменить внешний вид поля выбора, удалить стандартную OS-стрелку и добавить PNG-стрелку, поставить интервал перед и после метки, почти все, что вы захотите.
Самая важная часть - это
appearance
свойство, которое меняет поведение элемента.Он отлично работает практически во всех браузерах на основе WebKit, включая мобильные, хотя
appearance
, похоже , Gecko не поддерживает так же хорошо, как и WebKit.источник
text-indent: 0.01px; text-overflow: "";
это будет работать еще лучшеВыберите элемент и его выпадающая особенность является трудно стилем.
Атрибуты стиля для элемента select Криса Хайльмана подтверждают сказанное Райаном Доэри в комментарии к первому ответу:
источник
У меня была именно эта проблема, за исключением того, что я не мог использовать изображения и не был ограничен поддержкой браузера. Это должно быть «по спецификации», и, если повезет, со временем все начнёт работать .
Он использует многослойные повернутые фоновые слои, чтобы «вырезать» стрелку раскрывающегося списка, поскольку псевдоэлементы не будут работать для элемента select.
Изменить: в этой обновленной версии я использую переменные CSS и крошечная система тем.
источник
-moz-appearance: none;
Самое большое несоответствие, которое я заметил при стилизации выпадающих списков, - это Safari и Google Chrome. рендеринг (Firefox полностью настраивается с помощью CSS). После небольшого поиска в глубине Интернета я наткнулся на следующее, что почти полностью решает мои проблемы с WebKit:
Исправление Safari и Google Chrome :
Это, однако, удаляет стрелку раскрывающегося списка. Вы можете добавить стрелку раскрывающегося списка, используя рядом
div
объект с фоном, отрицательным полем или абсолютно расположенный над выпадающим списком.* Дополнительная информация и другие переменные доступны в свойстве CSS: -webkit-Appearance .
источник
<select>
теги можно стилизовать с помощью CSS, как и любой другой элемент HTML на странице HTML, отображаемой в браузере. Ниже приведен (слишком простой) пример, который будет размещать элемент выбора на странице и отображать текст параметров синим цветом.Пример HTML-файла (selectExample.html):
Пример CSS-файла (selectExample.css):
источник
Сообщение в блоге Как создать форму в стиле CSS. У меня не работает JavaScript , но в Opera это не получается :
источник
Вот версия, которая работает во всех современных браузерах. Ключ использует
appearance:none
который удаляет форматирование по умолчанию. Поскольку все форматирование пропало, вы должны добавить обратно стрелку, которая визуально отличает выбор от ввода.Рабочий пример: https://jsfiddle.net/gs2q1c7p/
источник
Я добрался до вашего дела с помощью Bootstrap . Это самое простое решение, которое работает:
Примечание: материал base64 находится
fa-chevron-down
в SVG.источник
В современных браузерах стилизация
<select>
в CSS относительно безболезненна . Сappearance: none
единственной сложной задачей является замена стрелки (если это то, что вы хотите). Вот решение, которое использует встроенныйdata:
URI с открытым текстом SVG:Остальная часть стиля (границы, отступы, цвета и т. Д.) Довольно проста.
Это работает во всех браузерах, которые я только что попробовал (Firefox 50, Chrome 55, Edge 38 и Safari 10). Одно замечание о Firefox заключается в том, что если вы хотите использовать
#
символ в URI данных (напримерfill: #000
), вам нужно его экранировать (fill: %23000
).источник
height
and / or тега вместо свойства CSS .width
<svg>
background-size
источник
Пользовательский выбор стилей CSS
Протестировано в Internet Explorer (10 и 11), Edge, Firefox и Chrome
источник
background-position: right 15px center, right 10px center;
Используйте
clip
свойство, чтобы обрезать границы и стрелкуselect
элемента, затем добавьте свои собственные стили замещения в оболочку:Используйте второй выбор с нулевой непрозрачностью, чтобы сделать кнопку нажатой:
Координаты различаются между Webkit и другими браузерами, но запрос @media может покрыть это.
Ссылки
источник
Очень хороший пример, который использует
:after
и:before
делает трюк в Styling Select Box with CSS3 | CSSDeckисточник
Редактировать этот элемент не рекомендуется, но если вы хотите попробовать, он похож на любой другой элемент HTML.
Пример редактирования:
источник
Это использует цвет фона для выбранных элементов, и я удалил изображение ..
источник
Да. Вы можете стилизовать любой элемент HTML по имени тега, например так:
Конечно, вы также можете использовать CSS-класс для стилизации, как и любой другой элемент:
источник
Вот решение, основанное на моих любимых идеях из этого обсуждения. Это позволяет стилизовать элемент <select> напрямую без какой-либо дополнительной разметки.
Работает Internet Explorer 10 (и более поздние версии) с безопасным запасным вариантом для Internet Explorer 8/9. Одним из предостережений для этих браузеров является то, что фоновое изображение должно располагаться и быть достаточно маленьким, чтобы скрываться за собственным элементом управления расширением.
HTML
SCSS
CodePen
http://codepen.io/ralgh/pen/gpgbGx
источник
Начиная с Internet Explorer 10, вы можете использовать
::-ms-expand
селектор псевдоэлемента, чтобы стилизовать и скрыть элемент стрелки раскрывающегося списка.Остальные стили должны быть похожи на другие браузеры.
Вот базовый форк jsfiddle Данилда, который применяет поддержку IE10
источник
Там простой способ.
Проверьте эту скрипку и простите меня за чрезмерный стиль: https://jsfiddle.net/dkellner/7ac9us70/
Хитрость позади: как только тег <select> получит свойство, называемое «size», он будет вести себя как список с фиксированной высотой и внезапно по какой-то причине позволит вам чертить его. Строго говоря, фиксированный список - это побочный эффект, но он просто помогает нам больше, потому что мы используем его для «выпадающего списка».
Минимальный пример:
(для простоты я сделал это с помощью jQuery - но вы можете сделать то же самое без него)
Примечания стороны
Это решение дает вам больше, чем просто выбор: значение также можно редактировать вручную. Используйте свойство readonly, если вы предпочитаете способ ограничения выбора по умолчанию.
Чтобы максимизировать возможности стилизации, теги <optgroup> не находятся вокруг их дочерних элементов , они перемещены раньше ними. Это намеренно, визуально понятнее, и они счастливы работать так, не волнуйтесь.
Javascripts: да, я знаю, что OP сказал «нет Javascript», но я понял это, пожалуйста, не беспокойтесь о плагинах , и это нормально. Вам не нужны библиотеки для этого. Даже jQuery, как я уже сказал, это только для ясности примера.
источник
Вы определенно должны сделать это, как в Styling select, optgroup и options с CSS . Во многих отношениях фоновый цвет и цвет - это как раз то, что вам обычно требуется для настройки параметров, а не весь выбор.
источник
Вы также можете добавить стиль наведения в раскрывающемся списке.
источник
Третий метод в ответе Данилда может быть улучшен для работы с эффектами наведения и другими событиями мыши. Просто убедитесь, что элемент "button" находится сразу после элемента select в разметке. Затем настройте его, используя селектор + CSS:
HTML:
CSS:
Это, однако, покажет эффект наведения при наведении курсора на элемент выбора, а не только на кнопку.
Я использую этот метод в сочетании с Angular (поскольку мой проект в любом случае оказывается приложением Angular), чтобы охватить весь элемент select и позволить Angular отображать текст выбранного параметра в элементе «button». В этом случае совершенно логично, что эффект наведения применяется при наведении курсора на любое место над выбранным.
Хотя он не работает без JavaScript, поэтому, если вы хотите сделать это, и ваш сайт должен работать без JavaScript, вы должны убедиться, что ваш скрипт добавляет элементы и классы, необходимые для улучшения. Таким образом, браузер без JavaScript просто получит обычный, не стилизованный выбор вместо стилизованного значка, который не обновляется правильно.
источник
Решение только для CSS и HTML
Кажется, он совместим с Chrome, Firefox и Internet Explorer 11. Но, пожалуйста, оставьте свой отзыв о других веб-браузерах.
Как следует из ответа Данилда , я заключаю свой выбор в div (даже два div для совместимости с x-браузером), чтобы получить ожидаемое поведение.
Смотрите http://jsfiddle.net/bjap2/
HTML:
Обратите внимание на две оболочки div.
Также обратите внимание на добавленный дополнительный div для размещения кнопки со стрелкой вниз, где вам удобно (расположено абсолютно), здесь мы поместили ее слева.
CSS
источник