Стилизация select на CSS
Вы здесь: Главная — CSS — CSS3 — Стилизация select на CSS
Для верстальщика обязательным порядком необходимо уметь стилизовать разные элементы формы. Согласитесь, что вряд ли дизайнер оставит форму, как в браузере, никак не приукрасив.
HTML разметка для select
Тег select поместим внутри тега div с классом select. Создадим две опции, между которыми и должен происходить выбор.
<div>
<select>
<option value="Лимон">Лимон</option>
<option value="Банан">Банан</option>
<option value="Яблоко">Яблоко</option>
</select>
</div>
Вот так select выглядит в браузере Chrome, без стилизации. Однако, с помощью CSS стилей, мы слегка его приукрасим: увеличим размер поля, отступы, цвет и стиль рамки, шрифт.
CSS для select
Зададим блоку select позицию relative, делаем мы это для позиционирования кастомной стрелочки, относительно этого блока.
.select {
position: relative;
}
Стилизуем тег select. С помощью свойства appearance, убираем стандартные стрелочки у элементов формы. Затем добавляем для него вендорные префиксы для браузеров Chrome и Safari нужен –webkit, а для Firefox -moz.
.select select {
display: block;
width: 100%; /* от ширины блока div */
padding: .75rem 2.5rem .75rem 1rem;/* отступы от текста до рамки */
background: none; /* убираем фон */
border: 1px solid #ccc; /* рамка */
border-radius: 3px;/* скругление полей формы */
-webkit-appearance: none;/* Chrome */
-moz-appearance: none;/* Firefox */
appearance: none;/* убираем дефолнтные стрелочки */
font-family: inherit;/* наследует от родителя */
font-size: 1rem;
color: #444;
}
Воссоздадим убранную стрелочку при помощи псевдоэлемента
.select:after {
content: "";
display: block;
border-style: solid;
border-width: 6px 5px 0 5px;
border-color: #000 transparent transparent transparent;
pointer-events: none;
position: absolute;
top: 50%;
right: 1rem;
z-index: 1;
margin-top: -3px;
}
Как вставить дизайнерскую стрелочку?
Ниже, я приведу два варианта, как вставить уникальную стрелочку, при верстке макета, если её нарисовал дизайнер. Вместо стрелочки на CSS, можно добавить стрелочку в виде картинки в пустые кавычки content.
.select:after {
content: " url(...) ";
}
или вставить картинку в виде фона без повтора.
.select select {
background: url(...) no-repeat;
}
Демонстрация примера
Стилизация select option
Как вы уже заметили, что тег option, остался не стилизованным. Почему его не нужно стилизовать? Дело в том, что браузеры мобильных устройств, по разному отображают опции выбора и совсем не так, как на десктопных. Поэтому пользователи мобильных телефонов, так и так увидели бы выпадающий список без стилизации.
Заключение
Однако лучшим решением на 2019 год – это конвертировать иконку в SVG формат и вставить фоном. Такой вариант, гарантирует качественное изображение на любых разрешениях и разных масштабах.
В видеокурсе «Вёрстка сайта с нуля 2. 0″, я показываю на живом примере, как верстать сайт по макету.
- Создано 22.05.2019 10:15:50
- Михаил Русаков
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
-
Кнопка:
<a href=»https://myrusakov.Она выглядит вот так:
-
Текстовая ссылка:
<a href=»https://myrusakov.ru» target=»_blank»>Как создать свой сайт</a>Она выглядит вот так: Как создать свой сайт
- BB-код ссылки для форумов (например, можете поставить её в подписи):
[URL=»https://myrusakov.ru»]Как создать свой сайт[/URL]
CSS оформление select — используем свойство appearance
Очень часто дизайнеры рисуют макеты с нестандартными элементами форм, т.е. оформление чекбоксов, радиокнопок, инпутов и селектов отличается от того, что рендерит браузер по умолчанию. Таким образом, перед верстальщиком возникает задача кастомизировать оформление, в том числе это касается элементов select.
В статье мы рассмотрим, как изменить внешний вид select-ов. Однако мы будем придерживаться следующей идеологии. Кастомизировать имеет смысла только дефолтное свёрнутое состояние селекта, а оформление выпадающего списка должно оставаться стандартным. Поэтому решение, описанное ниже, не подойдет, если вам требуется сложный выпадающий список, например, с иконками или чекбоксами для каждого option.
С другой стороны такой подход позволяет:
1. Не писать javascript код, который эмулировал бы поведение селектов. Вся логика возлагается на браузер. Плагинов на сегодняшний день очень много, но не часто встретишь такой, который обрабатывал бы все крайние случаи, возникающие у пользователя при взаимодействии с этим контролом. Примером такого крайнего случая может служить автоматический выбор положения выпадающего списка (открытие вниз или вверх).
2. Раз за поведение и оформление выпадающего списка отвечает браузер, то и не требуется писать какое-то отдельное решение для мобильных устройств, которое позволяло бы удобно работать с селектами на тач-устройствах с маленькими экранами. Встроенные нативные селекты сами принимают нужный вид, ведь на мобильных платформах уже всё продумано.
Итак, как уже было сказано, для оформления select достаточно CSS3 свойств.
Основное свойство, которое позволит изменить внешний вид селекта, это appearance
. Оно заставляет какой-либо элемент принять вид того, что вы захотите, например, можно заставить див стать кнопкой. Однако в рамках нашей задачи интересно значение
, которое означает, что к элементу вообще не нужно применять какой-либо стиль. Таким образом, мы сможем убрать специфичный для селекта атрибут — стрелочку вниз справа.
.select {
-webkit-appearance: none;
-moz-appearance: none;
-ms-appearance: none;
appearance: none !important;
}
Как видно, убрать стрелку не составило труда, теперь остаётся добавить несколько тривиальных CSS-свойств вроде рамки, шрифта и прочего. Здесь конечно же можно добавить и скругление уголков, и тени и прочее, всё как нарисовал дизайнер в макете. Главное выпадающий список остаётся нативным.
.select {
background: transparent;
display: block;
width: 100%;
border: 1px solid #a7a7a7;
color: #32353a;
font-family: 16/Arial, sans-serif;
font-size: 16px;
line-height: 1.4;
font-weight: normal;
padding: 7px 10px 7px 10px;
height: 36px;
vertical-align: top;
outline: 0;
-webkit-appearance: none;
-moz-appearance: none;
-ms-appearance: none;
appearance: none !important;
}
Теперь остаётся добавить фоном стрелку или какую-либо другую иконку. Использовать фон будем, поскольку псевдоэлементы вроде before
и after
для селекта работать не будут. Для лучшего отображения сайтов на различных устройствах с разным плотностью пикселей, на различных масштабах и т. п. принято использовать SVG иконки. Поэтому с помощью онлайн URL-encoder для SVG сконвертируем иконку в data URI. При этом важно помнить, что тег SVG должен иметь атрибут xmlns="http://www.w3.org/2000/svg"
.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 8">
<path fill="#000" fill-rule="evenodd" d="M8,0L4.141,6.993,0.012,0.156Z"/>
</svg>
Получится следующий результат.
%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23000' fill-rule='evenodd' d='M8,0L4.141,6.993,0.012,0.156Z'/%3E%3C/svg%3E%0A
Поскольку стрелка используется нестандартная, то можно переместить её влево или использовать вместо стрелки любое другое изображение, а можно и вовсе обойтись без иконок.
По ссылке ниже приведён рассмотренный в статье пример стилизации select через CSS свойство appearance.
Понравилась статья? — Ставь лайк!
HTML и CSS с примерами кода
Тег <select>
(от англ. select — выбрать) позволяет создать элемент интерфейса в виде раскрывающегося списка, а также список с одним или множественным выбором.
Конечный вид зависит от использования атрибута size
, который устанавливает высоту списка. Ширина списка определяется самым широким текстом, указанным в элементе <option>
, а также может изменяться с помощью стилей. Каждый пункт создаётся с помощью элемента <option>
, который должен быть вложен в контейнер <select>
. Если планируется отправлять данные списка на сервер, то требуется поместить <select>
внутрь формы. Это также необходимо, когда к данным списка идёт обращение через скрипты.
Синтаксис
<select>
<option>Пункт 1</option>
<option>Пункт 2</option>
</select>
Закрывающий тег обязателен.
Атрибуты
autofocus
- Устанавливает, что список получает фокус после загрузки страницы.
disabled
- Блокирует доступ и изменение элемента.
form
- Связывает список с формой.
multiple
- Позволяет одновременно выбирать сразу несколько элементов списка.
name
- Имя элемента для отправки на сервер или обращения через скрипты.
required
- Список обязателен для выбора перед отправкой формы.
size
- Количество отображаемых строк списка.
Также для этого элемента доступны универсальные атрибуты.
autofocus
Атрибут autofocus
устанавливает, что список получает фокус после загрузки страницы, при этом список становится доступным для выбора пунктов, например, с помощью клавиатуры.
Синтаксис
<select autofocus>
...
</select>
Значения
Нет.
Значение по умолчанию
По умолчанию этот атрибут выключен.
disabled
Блокирует доступ и изменение элементов списка. Блокированный список не может получить фокус через курсор или клавиатуру, быть изменён, значение такого списка не передаётся на сервер.
Синтаксис
<select disabled>
...
</select>
Значения
Нет.
Значение по умолчанию
По умолчанию этот атрибут выключен.
form
Связывает список с формой по её идентификатору. Такая связь необходима в случае, когда список располагается за пределами <form>
.
Синтаксис
<select form="<идентификатор>">
...
</select>
Значения
Идентификатор формы (значение атрибута id
элемента <form>
).
Значение по умолчанию
Нет.
multiple
Наличие атрибута multiple
сообщает браузеру отображать содержимое элемента <select>
как список множественного выбора. Конечный вид списка зависит от используемого атрибута size
и браузера.
Для выбора нескольких значений списка применяются клавиши Ctrl и Shift совместно с курсором мыши.
Чтобы на сервер отправлялся массив данных, значение атрибута name
следует писать с квадратными скобками — hero[]
, к примеру.
Синтаксис
<select multiple>
...
</select>
Значения
Нет.
Значение по умолчанию
По умолчанию этот атрибут выключен.
name
Определяет уникальное имя элемента <select>
. Как правило, это имя используется для доступа к данным через скрипты или для получения выбранного значения списка на сервере.
Синтаксис
<select name="<имя>">
...
</select>
Значения
В качестве имени используется набор символов, включая числа и буквы. JavaScript чувствителен к регистру, поэтому при обращении к элементу <select>
по имени соблюдайте ту же форму написания, что и в атрибуте name
.
Значение по умолчанию
Нет.
required
Устанавливает список обязательным для выбора перед отправкой формы на сервер. Если пункт списка не выбран, браузер выведет сообщение, а форма отправлена не будет. Вид и содержание сообщения зависит от браузера и меняться пользователем не может.
Синтаксис
<select required>
...
</select>
Значения
Нет.
Значение по умолчанию
По умолчанию атрибут required
выключен.
size
Устанавливает высоту списка. Если значение атрибута size
равно 1, то список превращается в раскрывающийся. При добавлении атрибута multiple
к элементу <select>
при size="1"
список отображается как «крутилка». Во всех остальных случаях получается список с одним или множественным выбором.
Синтаксис
<select size="<число>">
...
</select>
Значения
Любое целое положительное число.
Значение по умолчанию
Зависит от атрибута multiple
. Если он присутствует, то размер списка равен количеству элементов. Когда атрибута multiple
нет, то по умолчанию значение атрибута size
равно 1.
Значения ARIA role
<select>
(без атрибутаmultiple
и без атрибутаsize
со значением больше1
) —role=combobox
<select>
(с атрибутомmultiple
или с атрибутомsize
со значением больше1
) —role=listbox
Спецификации
Описание и примеры
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>SELECT</title>
</head>
<body>
<form action="select1. php" method="post">
<p>
<select size="3" multiple name="hero[]">
<option disabled>Выберите героя</option>
<option value="Чебурашка">Чебурашка</option>
<option selected value="Крокодил Гена">
Крокодил Гена
</option>
<option value="Шапокляк">Шапокляк</option>
<option value="Крыса Лариса">Крыса Лариса</option>
</select>
</p>
<p><input type="submit" value="Отправить" /></p>
</form>
</body>
</html>
Ссылки
Изменить стиль Select с помощью jQuery. Пишем свой select-список, используя jQuery и CSS Оформление select jquery
Около года назад, я уже делал подробный обзор jQuery-плагинов для стилизации селектов . Итог остался неутешительным, у каждого из них были свои недостатки, и я так и не смог найти то, что хотел. В комментариях отписалось довольно много разработчиков, но все мы сошлись на том, что идеального плагина нет, и что над любым из них приходится хорошо поработать напильником.
Недавно на хабре проскакивал Selectik — довольно неплохой плагин, но не без недостатков . Работа над ним, судя по GitHub , ещё идёт, но пока он не очень удобен, и его основные проблемы ещё имеют место быть.
Недавно мне написал незнакомый человек, и попросил протестировать его плагин ikSelect , который он старался написать максимально приближенным к идеалу. Плагин мне настолько понравился, что после всестороннего тестирования и багфиксинга, я решил написать его обзор и поставить точку в данной теме, а также помочь толковому разработчику попасть на хабр.
В двух словах: он умеет практически всё, что умеет стандартный селект, при этом отлично стилизируется и подстраивается под особенности реализации селектов разных браузеров. Плагин полностью копирует внешний вид родного селекта Mac OS X, но его без проблем можно стилизировать через css.
Вот так он выглядит в закрытом виде:
Вот так в открытом:
Чем же он лучше остальных?
Объем: 11KBДостоинства:
- работает во всех браузерах (IE6+, FF, Opera, Chrome, Safari), в том числе в мобильных
- автоматически подстраивает ширину
- открывается всегда на видимую часть страницы (так называемое «умное позиционирование»), как в горизонтальном, так и в вертикальном положении
- позволяет задавать максимальную высоту выпадающего списка
- позволяет группировать опции (optgroup)
- полностью управляется с клавиатуры (в т. ч. реагирует на переход Tab»ом, PgUp, PgDown, Home, End)
- имеет подбор по первым буквам (не только по одной, но и по последующим)
- поддерживает скролл колёсиком мышки
- вставляется инлайново (inline-block)
- замечательно работает с огромными списками (1000+ элементов)
- оставляет стандартный селект при отключенном javascript
- имеет отличный API
- не позволяет выделять сразу несколько пунктов (multiselect)
- не стилизирует скроллбар выпадающего списка (т.к. слишком сильно влияет на скорость работы)
- не бегает за пивом
Мобильные браузеры
Плагин стилизирует само поле, но при нажатии вызывает родное поведение браузера. Протестировано на iOS (Safari) и Android (2.3 native, Firefox):В Opera mini остаются стандартные селекты, во избежание перезагрузки страницы при открытии списка. В Opera mobile работает так же, как и в настольной версии.
Здравствуйте, хабраюзеры и просто читающие. Сравнительно недавно задался вопросом, как применить стили к тегу select. Всем же хочется, чтобы стилизация формы соответствовала дизайну сайта, а пока что еще не все можно описать чистым CSS. В данной статье мы рассмотрим простенький пример написания своего select-списка, используя CSS и библиотеку языка JavaScript — jQuery. Думаю, особенно новичкам будет любопытен данный материал. Конечно, лучше было бы лучше написать на нативном JS, но всем известно, что строк кода было бы больше, и вряд ли он был бы понятнее.
Честно говоря, прежде чем взяться за создание очередного велосипеда, я пробовал найти подобное решение, но кроме эффектных div-оберток для тега select ничего не нашёл. И я подумал, что будет неплохо написать что-то простенькое и нужное. Ну, что ж, начнём!
В нашем кружке лепки из пластилина участвуют три файла:
- selectbox.html
- selectbox.css
- selectbox.js
selectbox.html
Месяц
Создаем пользовательские элементы select
Сегодня мы хотим поделиться с Вами несколькими вариантами оформления элементов select. В формах, где мы хотели бы использовать пользовательские стили для полей, мы можем использовать библиотеки JavaScript, которые преобразовывают HTML-элементы в структуру, позволяющую нам создать собственное стилевое оформление, особенно это касается таких сложных элементов, как select.
Какие стили использовать, зависит, конечно, от того, что вы хотите чтобы увидел ваш пользователь. При замене элемента select на пользовательскую структуру очень важно сохранить новый элемент доступным. Добавление лэйбла и особые стили при попадания фокуса — это лишь некоторые из вещей, которые вы должны иметь в виду. Узнайте больше о той или иной форме доступности в HTML: HTML Techniques for Web Content Accessibility Guidelines 1.0 от the W3C.
Обратите внимание, что некоторые стили являются экспериментальными, они используются с единственной целью — показать, что это возможно (в современных браузерах).
В демо мы используем иконки из следующих наборов значков: Ionicons, Font Awesome, Linecons и Maki.
SVG-флаги, используемые в одном из примеров, из Flag Webicons Set от Sean Herron.
Круглые иконки, используемые в одном из примеров, взяты из Ballicons 2 set от Pixel Buddha.
Итак, давайте взглянем на наш обычный элемент select. Он обычно выглядит следующим образом:
<select>
<option value=»» disabled selected>Choose your option</option>
<option value=»1″>Option 1</option>
<option value=»2″>Option 2</option>
<option value=»3″>Option 3</option>
</select>
… Мы же преобразуем его в эту структуру:
<div>
<span>Выберите Ваш вариант</span>
<div>
<ul>
<li data-option data-value=»1″><span>Вариант 1</span></li>
<li data-option data-value=»2″><span>Вариант 2</span></li>
<li data-option data-value=»3″><span>Вариант 3</span></li>
</ul>
</div>
<select>
<option value=»» disabled selected>Выберите Ваш вариант</option>
<option value=»1″>Вариант 1</option>
<option value=»2″>Вариант 2</option>
<option value=»3″>Вариант 3</option>
</select>
</div>
Мы сохраняем реальный элемент select, потому что мы будем использовать его для установки выбранного значения при отправке формы.
По желанию, мы можем определить data-link и data-class в опциях элемента select. Опция link позволит фактически открыть гиперссылку при нажатии на элемент списка. Когда пользовательские классы необходимы на элементов списка, то атрибут data-class класс может быть использован.
Доступны следующие опции:
newTab : true,// открывает ссылки на новом табе (когда data-link используется в настройках)
stickyPlaceholder : true,
// когда открывается элемент select, показывается placeholder по-умолчанию
onChange : function( val ) { return false; }
//функция обратного вызова при изменении значения
StickyPlaceholder определяет, будет ли текст-заполнитель по умолчанию отображаться каждый раз, когда мы открываем элемент select.
Основные стили для наших примеров находятся в cs-select.css. Ниже представлен в качестве примера css-код для примера Border:
@font-face {
font-family: ‘icomoon’;
src:url(‘. ./fonts/icomoon/icomoon.eot?-rdnm34′);
src:url(‘../fonts/icomoon/icomoon.eot?#iefix-rdnm34′) format(’embedded-opentype’),
url(‘../fonts/icomoon/icomoon.woff?-rdnm34’) format(‘woff’),
url(‘../fonts/icomoon/icomoon.ttf?-rdnm34’) format(‘truetype’),
url(‘../fonts/icomoon/icomoon.svg?-rdnm34#icomoon’) format(‘svg’);
font-weight: normal;
font-style: normal;
}
div.cs-skin-border {
background: transparent;
font-size: 2em;
font-weight: 700;
max-width: 600px;
}
@media screen and (max-width: 30em) {
.cs-skin-border { font-size: 1em; }
}
.cs-skin-border > span {
border: 5px solid #000;
border-color: inherit;
transition: background 0.2s, border-color 0.2s;
}
.cs-skin-border > span::after,
.cs-skin-border .cs-selected span::after {
font-family: ‘icomoon’;
content: ‘\e000’;
}
.cs-skin-border ul span::after {
content: »;
opacity: 0;
}
. cs-skin-border .cs-selected span::after {
content: ‘\e00e’;
color: #ddd9c9;
font-size: 1.5em;
opacity: 1;
transition: opacity 0.2s;
}
.cs-skin-border.cs-active > span {
background: #fff;
border-color: #fff;
color: #2980b9;
}
.cs-skin-border .cs-options {
color: #2980b9;
font-size: 0.75em;
opacity: 0;
transition: opacity 0.2s, visibility 0s 0.2s;
}
.cs-skin-border.cs-active .cs-options {
opacity: 1;
transition: opacity 0.2s;
}
.cs-skin-border ul span {
padding: 1em 2em;
backface-visibility: hidden;
}
.cs-skin-border .cs-options li span:hover,
.cs-skin-border li.cs-focus span {
background: #f5f3ec;
}
Взгляните на демонстрационные примеры, чтобы увидеть как элементы select могут быть стилизованы.
Надеемся, они вам понравятся!
Демонстрация
Скачать исходные файлы
Перевод статьи с http://tympanus.net/codrops/
Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом
Проблема стилизации элементов форм | Frontender Magazine
В 1998 года, когда появился CSS Level 2, элементы форм уже поддерживались всеми основными браузерами. Спецификация CSS 2 не предусматривала решение проблемы представления. Так как эти элементы являются частью пользовательского интерфейса, авторы спецификации предпочли отдать их визуальное представление на откуп разработчикам браузеров.
Год за годом не достаточно детализированная спецификация заставляла веб-
разработчиков экспериментировать в попытках привести представление таких
элементов, как input
, select
, fieldset
, legend
и textarea
в разных
браузерах к «общему знаменателю». В этой статье мы рассмотрим некоторые приемы
CSS, используемые веб-разработчиками для стандартизации визуального
представления элементов форм.
Тесты Роджера Йоханссона
Сначала в 2004, а затем и в 2007 году, Роджер Йоханссон (Roger Johansson) создал исчерпывающий набор тестов для проверки применения CSS-стилей к элементам форм. Результатом выполнения этих тестов, которые вы можете найти в его статье «К вопросу о стилизации элементов форм с помощью CSS», стал неутешительный вывод, который Йоханссон выразил следующими словами:
Так что же показывает этот эксперимент? Как я и говорил, он показывает, что использование CSS для стилизации элементов форм с целью приведения их к единому виду в разных браузерах и на разных платформах невозможно. Он также показывает, что большинство браузеров игнорируют многие CSS-свойства, применяемые к элементам форм.
Несмотря на несомненную справедливость этих заключений, веб-разработчики продолжили активно тестировать применение CSS-стилей к элементам форм, чтобы найти Святой Грааль их кроссбраузерного представления или хотя бы разумный компромисс между стилями, применяемыми браузером по умолчанию, и заданными разработчиком.
Модель по умолчанию
Спецификация CSS 2.1 указывает в предлагаемой таблице стилей по умолчанию для HTML4,
что элементы форм, такие как textarea
, input
и select
, являются
строчно-блочными:
textarea, input, select {
display: inline-block;
}
В свою очередь, элементы form
и fieldset
являются блочными:
fieldset, form {
display: block;
}
Описание модели, предлагаемой спецификацией CSS по умолчанию, этим и ограничивается. Все остальные визуальные аспекты элементов форм зависят от таблицы стилей браузера, применяемой по умолчанию. Тем не менее, перечисленные правила означают следующее:
Строчно-блочные элементы могут быть стилизованы с использованием строчной модели. Он позволяет использовать такие CSS-свойства, как
line-height
иvertical-align
, для управления высотой блока и его вертикальным выравниванием. Кроме этого, для указания внешних и внутренних отступов блока могут быть применены свойстваmargin
иpadding
. Строчно-блочные элементы поддерживаютwidth
иheight
, так как используют блочную модель форматирования.Блочные элементы могут быть стилизованы с использованием хорошо всем известного блочной модели. Тем не менее, проблемы возникают с элементами
fieldset
иlegend
, так какlegend
полностью зависит от стилей, применяемых браузером по умолчанию.
Как веб-разработчики решают эти проблемы?
Размеры
Веб-разработчики быстро заметили, что браузеры ведут себя странно при использовании строчно-блочных элементов, когда дело касается явного указания размеров. Указание высоты зачастую приводит к неожиданным результатам:
input, select {
width: 120px;
height: 32px;
}
Разработчики пытались решить эту проблему, превратив эти элементы в блочные:
input, select {
width: 120px;
height: 32px;
display: block;
}
Сработало только с textarea
. Стандартное решения этой проблемы заключается в
использовании вместо height
свойств font-size
и padding
.
Элементы форм не наследуют гарнитуру и кегль шрифта, поэтому первым делом необходимо указать их:
input, select {
width: 120px;
font: 1em Arial, sans-serif;
}
Пример на jsFiddle: «CSS: указание размеров элементов форм».
После определения гарнитуры можно задать padding
для добавления внутренних
отступов блоку элемента:
input, select {
width: 120px;
font: 1em Arial, sans-serif;
padding: 3px 6px;
}
Для элементов input
и textarea
в таблицах стилей браузеров определен border
.
Нормализуем его:
input[type="text"],
input[type="password"],
textarea {
border: 1px solid #ccc;
}
Элементам input
с типом button
и submit
браузеры добавляют дополнительный
отступ. Распространенная практика их нормализации:
input[type="button"],
input[type="submit"] {
padding: 2px;
}
Проблема этого приема состоит в том, что браузеры, помимо прочего, применяют
специфичные для них свойства к этим элементам, и padding
не всегда способен
нормализовать их. Например, в браузерах, на движке Webkit, вы можете
обнаружить следующее:
input[type="button"], input[type="submit"],
input[type="reset"], input[type="file"]::-webkit-file-upload-button,
button {
-webkit-box-align: center;
text-align: center;
cursor: default;
color: buttontext;
padding: 2px 6px 3px;
border: 2px outset buttonface;
border-image: initial;
background-color: buttonface;
box-sizing: border-box;
}
input[type="button"], input[type="submit"],
input[type="reset"] {
-webkit-appearance: push-button;
white-space: pre;
}
padding
используется также и для элементов fieldset
и legend
, но приводит
к другим результатам:
- Установка значения свойства
padding
для элементаfieldset
в0
по умолчанию сбросит отступ элементаlegend
в некоторых браузерах (но не в IE). - Установка значения свойства
padding
для элементаlegend
в0
приведет к его схлопыванию.
Для select
, и для input
c типами checkbox
и radio
стоит использовать только:
font-family
,font-size
,width
(дляselect
),padding
.
Применение других свойств к этим элементам часто приводит к противоречивым результатам в различных браузерах.
Выравнивание
Элементы форм можно выровнять по горизонтали и по вертикали. Они могут быть расположены на одной линии или как группа блоков друг под другом. Для выравнивания их на одной линии вы можете использовать один из двух подходов:
- Использовать
float
, - Использовать для некоторых элементов строчно-блочную модель.
При использовании float
элементы автоматически становятся блочными.
Это означает, что эти элементы форм теперь подчиняются девяти правилам float-элементов.
Элементы форм можно выравнивать по вертикали и по горизонтали.
При использовании float
основной проблемой является правильное выравнивания
по вертикали относительно текущей строки. Обычно это делают используя margin
или padding
:
input, select {
width: 120px;
float: left;
margin-top: 0.4em;
}
Этот подход работает, когда вам не нужно задавать выравнивание блоков
относительно текста, например, содержимого label
. В случае, если
это необходимо, вы можете использовать относительное позиционирование, padding
и margin
для элементов, содержащих только текст:
label {
float: left;
padding-top: 0.4em;
width: 5em;
margin-right: 1em;
}
Еще одна проблема возникает с кнопками. В случае, когда у вас есть кнопка, размеры которой превышают размеры других элементов, вы можете задать ее вертикальное выравнивание с помощью относительного позиционирования:
input[type="submit"] {
float: left;
width: 90px;
position: relative;
top: 0.4em;
}
Еще прием с относительным позиционированием можно использовать для input
с типами checkbox
и radio
. Относительное позиционирование можно использовать даже
для нормализации отступа слева у элемента legend
внутри элемента fieldset
.
Единственное отличие состоит в необходимости использования свойства left
вместо top
.
При использовании строчной и строчно-блочной модели для вертикального выравнивания
элементов вы можете использовать свойство vertical-align
:
label, input[type="text"] {
vertical-align: middle;
margin-right: 1em;
}
Бывает удобно использовать это свойство вместе с line-height
. Важно
отметить, что применять это свойство необходимо к родительскому элементу. Если
вы примените это свойство непосредственно к элементам формы, это скажется при
расчете их высоты:
.form-row {
line-height: 1.4;
}
Явное указание высоты родительского элемента эффективно также при использовании вместе с равным ему значением высоты строки:
.form-row {
line-height: 1.8;
height: 1.8em;
}
При использовании строчной или строчно-блочной модели вы также можете
использовать свойство text-align
для родительского элемента, чтобы выровнять
элементы по правому краю, по левому краю или по центру.
Странные особенности элементов выбора файлов
<input type="file"/>
— это особый случай. Исходя из соображений
безопасности, этот тип элементов всегда должен быть видимым и узнаваемым в
браузере. Это означает, что браузеры преднамеренно игнорируют некоторые стили
(например, стили, относящиеся к видимости элемента) и стремятся применять
представление, описанное их собственными таблицами стилей.
Стоит отметить, что оформление по умолчанию у разных браузеров различается: некоторые браузеры показывают только одну кнопку, в то время, как другие добавляют текстовое поле для указания пути к загружаемому файлу.
Веб-разработчики, тем не менее, быстро нашли способ преодолеть эти ограничения. Сначала они поместили поле ввода в контейнер:
<form action="" method="post" enctype="multipart/form-data">
<div>
<input type="file" name="upload"/>
</div>
</form>
Затем они скрыли элемент input
с помощью свойства opacity
и применили стили
к контейнеру:
.upload {
width: 157px;
height: 57px;
background: url(upload.png) no-repeat;
overflow: hidden;
}
.upload input {
display: block !important;
width: 157px !important;
height: 57px !important;
opacity: 0 !important;
overflow: hidden!important;
}
Обратите внимание на !important
. Это предпочтительный способ для
переопределения стилей браузера по умолчанию.
Пример на jsFiddle: «CSS: стилизация поля типа „файл“».
Заключение
Полноценное управление представлением элементов форм невозможно ввиду отсутствия определенности в спецификации CSS и из-за стилей, применяемых браузерами по умолчанию. Тем не менее, используя некоторые общепринятые приемы, можно сократить различия в оформлении элементов (но не избавиться от них).
Нестандартный SELECT, изменение их внешнего вида и оформления
Все прекрасно знают, что изменить оформление SELECT’ов в форме это сплошной геморрой. Ни один раз сталкивался с тем, что у сайта с симпатичным дизайном установлены уродливые SELECT’ы, полностью выбивающиеся из того самого дизайна. И это не говоря о том, что в различных браузерах они выглядят по-разному.
Стили CSS довольно скудно позволяют настраивать внешний вид SELECT’ов: им можно задать цвет бэкграунда, но при этом нельзя в качестве бэкграунда задать картинку. О чём думали, когда это делали?
Изменить оформление злосчастного выкидного списка можно и помогает в этом нам jQuery и другие подобные библиотеки. Плагины для этих библиотек подменяют стандартный селект на выкидной список, сделанный из классических тегов <div>, <p>, <ul> и так далее, а с ними CSS нам позволяет работать на все 100%.
Тем не менее не всё так гладко, как хотелось бы. Очень много рыская в интернете в поисках подобных скриптов, я натыкался на различные вариации, обладающие различными недостатками, из-за чего проблему замены SELECT’ов я считаю довольно актуальной. Я не буду приводить всё, что я нашёл, остановлюсь на нескольких.
Изменённые SELECT’ы без полосы прокрутки
Это наиболее распространённые селекты, недостаток которых указан в названии. Зачастую они прекрасно работают, ничего более и не надо, однако если список превышает 15-20 элементов, то страница растягивается очень далеко, а у селекта нет никаких полос прокрутки. Проблема? При больших списках не просто проблема, а катастрофа.
К примеру, в ссылках чуть ниже показаны пару таких плагинов.
SELECT’ы, заточенные под старинные версии библиотек
Оставляю пункт без комментариев и примеров, так как кому нужны примеры для jQuery 1.0.1 и подобных.
Адекватные оформления SELECT’ов
Самый адекватный скрипт, представленный по ссылкам с примерами чуть ниже, оказался находкой. Всё хорошо, всё красиво, есть даже очень приятный плюс, заключающийся в том, что есть возможность автозаполнения — прописываешь название (как в input’е) и он тебе выберет и покажет доступные варианты.
Однако и здесь также нашлись НО. Самое главное из них заключается в том, что при наличии нескольких селектов на странице (а может даже и одном, но большом, не проверял) оформление сглюкивает из-за медленного рендеринга страницы. У меня часто пропадали полосы прокрутки в селекте.
Тем не менее, это один из лучших, найденных мною, плагинов по изменению оформления SELECT’ов. И, что самое приятное, он постоянно дорабатывается. К концу этого месяца обещали выпустить новую версию, в которой как раз таки должна быть решена проблема рендеринга.
Напоследок
Напоследок хочется сказать, что не было найдено ни одного примера оформленных зависимых селектов — тех, в которых выбираешь в первом селекте одно, в зависимости от этого подставляются значения во втором селекте и так далее. Хотя такой пример можно будет сделать. Полагаю, если представленный чуть выше плагин будет обновлён и будет обезбаган, то взяв его за основу я, наверное, сделаю такие списки. Но это как-нибудь потом.
[UPD] Пока писал пост, плагин с сайта xiper.net взяли и обновили, буквально вчера, уже успели выявить несколько недочётов. У него теперь есть своё название — cuSel. Потестить плагин ещё не успел, но, думается, нововведения придутся по вкусу. Ссылки на плагин я чуть выше изменил — под кнопкой «Пример 1» пример необновлённого плагина, а под «Пример 2» — пример с обновлённым плагином.
AJAX, CSS, jQuery
Похожие записи:
пользовательских стилей выбора с чистым CSS
Это выпуск №20 из серии, посвященной современным решениям CSS для проблем, которые я решал в течение последних 14 с лишним лет работы фронтенд-разработчиком .
Modern CSS предоставляет нам ряд свойств для создания настраиваемых стилей выбора, которые имеют почти идентичный начальный вид для одного, нескольких и отключенных элементов select
в основных браузерах.
Несколько свойств и методов, которые будет использовать наше решение:
-
clip-path
для создания настраиваемой стрелки раскрывающегося списка Макет сетки - CSS для выравнивания собственного выделения и стрелки
- пользовательских переменных CSS для гибкого моделирования
-
em
единиц для относительного размера
Теперь доступно : мой яйцеголовый видеокурс Accessible Cross-Browser CSS Form Styling.Вы научитесь использовать методы, описанные в этом руководстве, на следующем уровне, создав систему дизайна форм с возможностью создания тематических форм, которая будет распространяться на все ваши проекты.
Распространенные проблемы с Native Selects #
Как и все типы полей формы,
отличается в разных браузерах по своему первоначальному виду.
Слева направо, вот начальный вид
в Firefox, Chrome и Safari:
Различия включают в себя размер поля, размер шрифта, высоту строки, и наиболее выдающимся является разница в том, как оформлен индикатор раскрывающегося списка.
Наша цель — создать одинаковый исходный вид для всех этих браузеров, включая множественный выбор и отключенные состояния.
Примечание: раскрывающийся список по-прежнему не стилизован, поэтому после открытия
он все равно подберет индивидуальные стили браузера для списка
option
. Это нормально — мы можем справиться с этим, чтобы сохранить бесплатную доступность нативного выбора!
Базовый HTML #
Для начала мы сосредоточимся на одном
.
Привет! Зарегистрируйтесь на мой семинар по CSS в июле на Smashing Conference: Level-Up With Modern CSS
Метка не является частью нашего упражнения по стилизации, но она включена в качестве общего требования, особенно с атрибутом для
, имеющим значение id
на
.
Чтобы реализовать наши собственные стили, мы обернули собственный выбор в дополнительный div с классом , выберите
для простоты в этом руководстве.
Сброс и удаление унаследованных стилей #
Как и во всех моих руководствах в качестве передовой современной практики, мы сначала добавляем следующий сброс:
*,
* :: before,
* :: after {
box-sizing: border-box;
}
После этого мы можем начать правило для собственного , выберите
и примените следующее для его внешнего вида:
выберите {
внешний вид: нет;
цвет фона: прозрачный;
граница: отсутствует;
заполнение: 0 1em 0 0;
маржа: 0;
ширина: 100%; Семейство шрифтов
: наследование;
размер шрифта: наследовать;
курсор: наследовать;
высота строки: наследование;
}
Хотя большинство из них, вероятно, знакомы, необычным является внешний вид
.Это редко используемое свойство, и вы заметите, что это не совсем то место, где мы хотели бы его поддерживать, но в этом случае оно в первую очередь обеспечивает нам удаление стрелки раскрывающегося списка в собственном браузере.
Примечание. CodePen настроен на использование автопрефикса, который добавит необходимые предварительно фиксированные версии свойства внешнего вида
. Возможно, вам придется специально настроить это для своего проекта или добавить их вручную. Мой HTML / Sass Jumpstart включает автопрефиксатор как часть производственной сборки.
Хорошая новость в том, что мы можем добавить еще одно правило, чтобы убрать стрелку для более ранних версий IE, если она вам нужна:
select :: - ms-expand {
display: none;
}
Этот совет можно найти в отличной статье Filament Group, где показан альтернативный метод создания избранных стилей .
Последняя часть - удалить схему по умолчанию
. Не волнуйтесь - позже мы добавим замену для состояния : focus
!
выберите {
схема: нет;
А вот и гифка с нашим прогрессом.Вы можете видеть, что теперь нет визуальной индикации того, что это , выберите
перед тем, как щелкнуть по нему:
Пользовательские стили окна выбора #
Во-первых, давайте настроим некоторые переменные CSS. Это позволит гибко перекрашивать наш выбор, чтобы отображать состояние ошибки.
: корень {
--select-border: # 777;
- выделить-фокус: синий;
- стрелка выбора: var (- граница выбора);
}
Примечание для специальных возможностей : Как элемент пользовательского интерфейса выделенная граница должна иметь контраст 3: 1 или больше по сравнению с цветом окружающей поверхности.
Теперь пришло время создать собственные стили выбора, которые мы применим к нашей обертке div.select
:
. Выбрать {
ширина: 100%;
мин-ширина: 15 каналов;
макс. Ширина: 30 каналов;
граница: сплошная 1px var (- select-border);
border-radius: 0,25em;
заполнение: 0,25 мкм 0,5 мкм;
font-size: 1.25rem;
курсор: указатель;
line-height: 1.1;
цвет фона: #fff;
background-image: linear-gradient (вверх, # f9f9f9, #fff 33%);
}
Сначала мы устанавливаем некоторые ограничения ширины.Значения min-width
и max-width
в основном предназначены для этой демонстрации, и вы можете удалить или изменить их для своего варианта использования.
Затем мы применяем некоторые свойства блочной модели, включая border
, border-radius
и padding
. Обратите внимание на использование блока em
, который сохранит эти свойства пропорциональными установленному font-size
.
В стилях сброса мы устанавливаем несколько свойств на , наследовать
, поэтому здесь мы определяем их, включая размер шрифта
, курсор
и высоту строки
.
Наконец, мы предоставляем ему свойства фона, включая градиент для малейшего размера. Если вы удалите свойства фона, выделение станет прозрачным и сохранит фон страницы. Это может быть желательно, однако имейте в виду и проверьте влияние на контраст.
И вот наш прогресс:
Хотели бы вы, чтобы подсказки CSS были в вашем почтовом ящике? Присоединяйтесь к моему информационному бюллетеню для получения обновлений статей, советов по CSS и внешних ресурсов!
Пользовательская стрелка раскрывающегося списка выбора #
Для нашей стрелки раскрывающегося списка мы собираемся использовать одно из самых интересных современных свойств CSS: clip-path
.
Обрезка контуров позволяет нам создавать всевозможные формы, «обрезая» квадратные и прямоугольные формы, которые мы получаем по умолчанию от большинства элементов. Мне понравилось использовать clip-path
в моем недавнем редизайне сайта-портфолио.
До clip-path
с лучшей поддержкой, альтернативные методы включали:
-
background-image
- обычно это png, немного более современным будет SVG - встроенный SVG как дополнительный элемент
- трюк с границей для создания треугольника
SVG может показаться оптимальным решением, однако при использовании в качестве фонового изображения
он теряет способность действовать как значок в том смысле, что не может изменять свои свойства, такие как цвет заливки, без его полного переопределения.Это означает, что мы не можем использовать нашу настраиваемую переменную CSS.
Размещение встроенного SVG-файла решает проблему с цветом fill
, однако это означает добавление еще одного элемента каждый раз, когда определяется
.
С clip-path
мы получаем четкую, масштабируемую «графику» стрелки, которая ощущается как SVG, но с преимуществами возможности использовать нашу настраиваемую переменную и содержаться в стиле по сравнению с разметкой HTML.
Чтобы создать стрелку, мы определим ее как псевдоэлемент :: after
.
.select :: after {
content: "";
ширина: 0,8 мм;
высота: 0,5 мм;
background-color: var (- стрелка выбора);
clip-path: многоугольник (100% 0%, 0 0%, 50% 100%);
}
Синтаксис clip-path
немного странный, и, поскольку он не является предметом внимания данной статьи, я рекомендую следующие ресурсы:
- Колби Фэйок объясняет синтаксис на примере в этом видео о яйцеголовых
- Clippy - это онлайн-инструмент, который позволяет вам выбирать форму и настраивать точки, динамически генерируя
clip-path
CSS
Если вы следите по тексту, возможно, вы заметили, что стрелка не появляется, несмотря на определение ширины
и высоты
.При осмотре было обнаружено, что :: после
фактически не допускается его ширина.
Мы решим эту проблему, обновив наш .select
, чтобы использовать макет сетки CSS.
. Выбрать {
display: grid;
}
Это позволяет стрелке появляться, существенно расширяя ее отображаемое значение, подобное «блоку».
На этом этапе мы можем проверить, действительно ли мы создали треугольник.
Чтобы исправить выравнивание, мы воспользуемся моим любимым приемом CSS-сетки (старая шляпа для вас, если вы читали здесь несколько статей!).
Старое решение CSS: позиция: абсолютная
Новое решение CSS: одна областей шаблона сетки
, чтобы содержать их все
Сначала мы определим нашу область, а затем определим, что выбирает
и :: after
оба используют его. Имя привязано к элементу, для которого он создан, и мы упростим его, назвав его "select":
.select {
grid-template-sizes: "выбрать";
} select,
.select: после {
grid-area: select;
}
Что дает нам перекрытие стрелки над собственным выбором из-за контекста стекирования через исходный порядок:
Теперь мы можем использовать свойства сетки, чтобы завершить выравнивание каждого элемента:
.выберите {
align-items: center;
} .select: после {
justify-self: end;
}
Та-да!
: фокус
Состояние # Ах да - помните, как мы удалили контур
? Нам нужно устранить пропущенное состояние : focus
, чтобы его не отбросить.
В ближайшее время мы могли бы использовать свойство под названием : focus-within
, но на данный момент все же лучше включить для него полифилл.
В этом уроке мы будем использовать альтернативный метод, который дает тот же результат, только немного посильнее.
К сожалению, это означает, что нам нужно добавить еще один элемент в DOM.
После собственного элемента select в качестве последнего дочернего элемента в пределах . Выберите
, добавьте:
Почему после? Поскольку, поскольку это чистое решение CSS, размещение его после собственного выбора означает, что мы можем изменить его, когда select
сфокусирован, используя соседний родственный селектор - +
.
Это позволяет нам создать следующее правило:
выберите: focus +.фокус {положение
: абсолютное;
сверху: -1px;
слева: -1px;
справа: -1px;
bottom: -1px;
граница: сплошная 2px var (- select-focus);
border-radius: наследовать;
}
Вам может быть интересно, почему мы вернулись к позиции : абсолютному
после того, как изучили предыдущий взлом grid-area
.
Причина в том, чтобы избежать пересчета корректировок на основе заполнения. Если вы попробуете его самостоятельно, вы увидите, что даже установка ширины
и высоты
на 100% по-прежнему заставляет его сидеть внутри отступа.
Задание position: absolute
лучше всего соответствует размеру элемента. Мы растягиваем лишний пиксель в каждом направлении, чтобы убедиться, что он перекрывает свойство границы.
Но нам нужно сделать еще одно добавление к .select
, чтобы убедиться, что он относительно нашего выбора по ... ну, position: relative
.
.select {
позиция: относительная;
А вот и все вместе, как показано в Chrome:
Множественный выбор #
Selects имеет второй вариант, который позволяет пользователю выбирать более одного варианта.С точки зрения HTML это просто означает добавление атрибута multiple
, но мы также добавим класс для помощи в создании настроек стиля под названием select - multiple
:
И глядя на него, мы видим, что он унаследовал большинство наших стилей, за исключением того, что нам не нужна стрелка в этом виде.
Это быстрое исправление для настройки нашего селектора, определяющего стрелку. Мы используем : not ()
, чтобы исключить наш недавно определенный класс:
.select: not (.select - multiple) :: после
У нас есть пара незначительных корректировок для множественного выбора, первая - это удаление отступов, которые были ранее добавлены, чтобы освободить место для стрелки:
выберите [несколько] {
отступ справа: 0;
}
По умолчанию параметры с длинным значением будут выходить за пределы видимой области и будут обрезаны, но я обнаружил, что основные браузеры позволяют переопределить перенос, если вы хотите:
выберите [несколько] вариант {
пробел: нормальный;
}
При желании мы можем установить высоту
для выбора, чтобы обеспечить более надежное кроссбраузерное поведение.В ходе тестирования я узнал, что Chrome и Firefox будут отображать частичный вариант, но Safari полностью скроет параметр, который не может быть полностью отображен.
Высота должна быть установлена непосредственно в собственном выборе. Учитывая наши другие стили, значение 6rem
сможет показать 3 варианта:
выберите [несколько] {
высота: 6 бэр;
}
На данный момент, в связи с текущей поддержкой браузеров, мы внесли столько изменений, сколько смогли.
Состояние
: selected
из опцийдовольно легко настраивается в Chrome, отчасти в Firefox и совсем не в Safari. См. Демонстрацию CodePen для раздела, который можно раскомментировать для предварительного просмотра.
: отключено
стилей #Хотя я бы выступал за то, чтобы просто не отображать отключенные элементы управления, мы должны подготовить стили для этого состояния, чтобы охватить наши основы.
Чтобы выделить отключенное состояние, мы хотим применить серый фон.Но поскольку мы установили стили фона на . Выберите
и нет селектора : parent
, нам нужно создать последний класс для обработки этого состояния:
.select - отключено {
курсор: запрещено;
цвет фона: #eee;
background-image: linear-gradient (вверх, #ddd, #eee 33%);
}
Здесь мы обновили курсор как дополнительную подсказку, с которой нельзя взаимодействовать с полем, и обновили значения фона, которые мы ранее установили как белые, чтобы теперь они были более серыми для отключенного состояния.
Это приводит к следующим выступлениям:
Демо №
Вы можете протестировать это самостоятельно, но вот предварительный просмотр полного решения (слева) в Firefox, Chrome и Safari:
Стефани Эклс (@ 5t3ph)
CSS-only Custom Styled Select. Элемент HTMLselect, стилизованный напрямую… | by B. Chen
Элемент select
уже давно трудно согласованно стилизовать во всех браузерах.Мы использовали JavaScript для создания элемента управления, подобного select, из различных элементов. Например, мы использовали неупорядоченные списки ul
или div
для создания настраиваемых компонентов выбора.
Оказывается, обходные пути JavaScript сложно поддерживать из-за следующих проблем:
- 💣 Проблемы с доступностью
- 💣 Плохо для программ чтения с экрана
- 💣 Трудно использовать на мобильных устройствах, особенно когда список опций длинный
- 💣 Не работает, когда JavaScript отключен
- Может быть, не подходит для SEO
- Намного больше кода для поддержки
- Повышенный риск появления ошибки
Быстрый пример
Во-первых, для фона, вот без стиля select
элемент.В зависимости от того, какой браузер вы используете, он будет выглядеть по-разному.
Ниже тот же select
элемент, стилизованный непосредственно с использованием только CSS.
Разметка HTML
Давайте просто воспользуемся выбранным по умолчанию HTML (без каких-либо дополнительных тегов html):
CSS
Стрелка раскрывающегося списка и граница по умолчанию являются частью стандартного «внешнего вида» элемента формы.Итак, вам нужно убедиться, что appearance: none;
устанавливается в CSS стиля во всех браузерах.
внешний вид : нет;
-webkit-appearance : нет;
-moz-appearance : none; / * Для IE <= 11 * /
select :: - ms-expand {
display : none;
}
Обратите внимание, что существует специальный псевдокласс для IE ≤ 11.
А вот полный CSS, управляющий внешним видом элемента select
select {
width: 100%;
высота: 50 пикселей;
размер шрифта: 100%;
font-weight: жирный;
курсор: указатель;
border-radius: 0;
цвет фона: # c0392b;
граница: отсутствует;
border-bottom: 2px solid # 962d22;
цвет: белый;
отступ: 10 пикселей;
Внешний вид: нет;
-вебкит-внешний вид: нет;
-моз-внешний вид: нет;
отступ: 10 пикселей;
} / * Для IE <= 11 * /
select :: - ms-expand {
display: none;
}
К настоящему моменту вы должны увидеть:
Базовый вид CSS-стиля select Селектор : hover
используется для выбора элементов при наведении указателя мыши на элемент.Селектор : focus
используется для выбора элемента, имеющего фокус. Давайте стилизуем эффект наведения и фокуса с эффектом перехода 0.3s easy
на color
, background-color
и border-bottom-color
.
выберите {
ширина: 100%;
высота: 50 пикселей;
размер шрифта: 100%;
font-weight: жирный;
курсор: указатель;
border-radius: 0;
цвет фона: # c0392b;
граница: отсутствует;
border-bottom: 2px solid # 962d22;
цвет: белый;
отступ: 10 пикселей;
padding-right: 38px;
Внешний вид: нет;
-вебкит-внешний вид: нет;
-моз-внешний вид: нет;
/ * Добавление эффекта перехода * /
transition: color 0.3 с легкостью, с легкостью для фонового цвета 0,3 с, с легкостью для окраски нижнего края - 0,3 с;
} / * Для IE <= 11 * /
select :: - ms-expand {
display: none;
} select: hover,
select: focus {
color: # c0392b;
цвет фона: белый;
цвет нижней границы: #DCDCDC;
}
Теперь вы должны увидеть такой эффект:
Добавление эффекта наведения и фокусировкиЧтобы улучшить внешний вид, давайте добавим собственное изображение или значок справа, чтобы выделить его и сделать его более похожим на раскрывающийся список.
Разметка HTML
Давайте используем значок svg
и поместим его рядом с , выберите
. Вы можете легко найти любую бесплатную иконку svg
из библиотеки с открытым исходным кодом, например font-awesome.
CSS
Вот стиль CSS для иконки.Обратите внимание, что мы используем переход background-color
и border-color
.
.select-icon {
позиция: абсолютная;
сверху: 4 пикселя;
справа: 4 пикселя;
ширина: 30 пикселей;
высота: 36 пикселей;
события-указателя: нет;
граница: сплошная 2px # 962d22;
padding-left: 5 пикселей;
: переход: фоновый цвет - 0,3 с, граница - 0,3;
}
.select-icon svg.icon {
переход: заливка с легкостью 0,3 с;
заливка: белая;
}
Вот CSS-эффект наведения и фокуса для значка.Обратите внимание: селектор CSS ~
используется для выбора .select-icon
, которому предшествует select
select: hover ~ .select-icon,
select: focus ~ .select-icon {
background-color : белый;
цвет границы: #DCDCDC;
}
select: hover ~ .select-icon svg.icon,
select: focus ~ .select-icon svg.icon {
fill: # c0392b;
}
Теперь вы должны увидеть завершенный пользовательский выбор, например
Завершенный пользовательский выборИ на этом все.Спасибо за чтение, вот полный код:
10 бесплатных фрагментов окна выбора CSS и JavaScript
Поля выбора HTML по умолчанию служат нам десятилетиями. Но в современную эпоху будет справедливо сказать, что они немного… несвежие.
Дизайнеры могут работать лучше, а благодаря улучшениям в CSS легко настраивать поля выбора. Не говоря уже о том, что весь открытый исходный код находится в свободном доступе в Интернете.
Я собрал коллекцию из 10 моих лучших стилей ручной работы.Они не выпускаются как плагины, а вместо этого полагаются на шаблоны для настройки JavaScript и CSS. Но все они так же просты в настройке и даже переделке для ваших собственных целей.
Панель инструментов веб-дизайнера
Неограниченное количество скачиваний: более 1 000 000 веб-шаблонов, тем, плагинов, ресурсов дизайна и многого другого!
1. Пользовательское меню выбора
Начало коллекции - это настраиваемые стили меню выбора Уоллеса Эрика.
Он использует как CSS для рестайлинга, так и JavaScript для настройки UX меню.Они ведут себя немного иначе, чем стандартные элементы HTML, и я думаю, что их немного удобнее использовать.
Вы можете выбрать размер и цветовой стиль меню или работать с настройками Уоллеса по умолчанию. Лучше всего он включает в себя настраиваемый дизайн поля загрузки, который, если вы когда-либо пытались изменить стиль, вы поймете, что это сложно.
Отличное место для начала, если вам просто нужны чистые, но свежо выглядящие избранные меню, которые работают.
2. Простой выбор
Вот еще одно очень простое поле выбора, которое позволяет более естественно вписаться в любой макет.
Используется более нежные цвета с простой черно-белой цветовой схемой. Но он также использует JavaScript для анимации меню выбора в поле зрения и вне его.
Он работает путем нацеливания на скрытое поле ввода, которое ведет себя точно так же, как поле выбора. Таким образом, вы по-прежнему можете извлекать данные из внешнего интерфейса в свои формы, потому что это решение технически не использует фактический элемент
.
Если совместимость вызывает беспокойство, пропустите это.Но я должен признать, что дизайн великолепен и идеально подходит для настольных компьютеров.
3. Невероятные раскрывающиеся списки HTML
Как следует из названия, этот пакет избранных меню направлен на то, чтобы просто не быть отстойным. Все они имеют разные стили и размеры с кнопками, которые вы можете нажимать, чтобы изменить цвет по запросу.
Очевидно, вы можете удалить эту функцию в своем собственном макете и придерживаться одной схемы, которая работает для вашего сайта. Но в целом эти избранные меню работают так же, как и обычные, и ими приятно пользоваться.
Если вы беспокоитесь о совместимости, подумайте о работе с этим шаблоном.
Большинство изменений носит косметический характер, поэтому они не должны сильно влиять на поведение пользователей.
4. Выберите заполнитель
Фактический дизайн этого меню выбора заполнителя великолепен, но дизайн здесь не единственный фактор.
РазработчикДжеймс Ноулэнд создал это меню с целью удалить значение по умолчанию из выбора. Это означает, что он больше похож на заполнитель в текстовых полях, где вы видите его, когда поле пусто, но как только вы устанавливаете значение, оно исчезает.
Он полностью совместим и работает с фактическим элементом выбора HTML. Поле параметра по умолчанию скрывается всякий раз, когда пользователь выбирает вариант. Таким образом, вы никогда не увидите текст «выберите вариант» в раскрывающемся меню. Действительно креативное решение!
5. Плоский дизайн
Эстетика часто имеет значение в веб-дизайне, и это плоское меню выбора - отличный тому пример.
Он по-прежнему работает как обычный выбор, а раскрывающаяся часть вообще не изменилась. Но только рестайлинг самого выбора оживляет страницу.Он кажется намного более классным, чем уродливый браузер по умолчанию.
Вы даже можете взять этот шаблон и расширить его своими собственными плоскими стилями, примененными к раскрывающейся области. Абсолютно ваш звонок!
Но в качестве начального шаблона это один из самых простых вариантов для любого интерфейса.
6. Чистый CSS
Я большой поклонник чистого CSS, а не JavaScript, потому что он упрощает весь процесс проектирования. Это непросто, но существует множество решений.
Один из моих любимых - этот фрагмент, содержащий не только меню выбора на чистом CSS, но и радио и флажки.
Все они выглядят феноменально и должны гармонировать с любым типом макета. У вас есть полный контроль над внесением изменений в CSS, и, что самое главное, они должны работать во всех основных браузерах.
7. Стилизованные доступные раскрывающиеся списки
Вот один из наиболее стилизованных примеров того, что можно делать с отдельными меню. Этот фрагмент, созданный Энди Фицсимоном, использует JavaScript для раскрывающегося эффекта и использует собственный CSS для градиентов и значков стрелок.
Что приятно, это меню также поддерживает функцию no-JS, поэтому оно будет работать, даже если JavaScript отключен.Это называется постепенной деградацией, и это лучший друг веб-разработчика для доступности.
Тем не менее, в этих избранных меню используются старые градиенты Web 2.0, которые могут не вписаться в дизайн на 2017 год и далее.
Но это показывает, что вы можете брать выбранные меню где угодно, проявив немного творчества. И они могут работать на удивление хорошо, если вы взломаете CSS, чтобы немного их настроить.
8. Меню значков SVG
В меню выбора по умолчанию есть значок стрелки сбоку и ничего больше.Приложив немного магии SVG, вы можете превратить его в любой другой значок, который вам нравится.
Это настраиваемое меню имеет собственный дизайн значка «плюс», работающий с чистым файлом SVG. Когда вы нажимаете, чтобы развернуть меню, оно превращается в значок X для закрытия / скрытия.
Я никогда раньше не видел ничего подобного, и это показывает, насколько далеко мы продвинулись, раздвигая границы возможностей веб-браузеров.
К сожалению, этот не работает с на собственном элементе выбора HTML. Это набор элементов списка внутри div
, поэтому при выборе значения нужно будет указывать скрытое поле ввода.
К счастью, этот процесс очень прост, поэтому, если вы хотите, чтобы этот дизайн был на вашем сайте, вам не потребуется много усилий, чтобы он заработал.
9. Выберите Box Experiment
Вот экспериментальный образец, который действительно привлек мое внимание. Демонстрационный экран сравнения показывает, насколько он отличается от обычных меню выбора и как он влияет на взаимодействие с пользователем.
Когда вы впервые нажимаете / нажимаете, чтобы открыть меню, оно сдвигается вниз с полными анимационными эффектами. Но он не скроется, если вы не нажмете меню еще раз, в отличие от обычных меню выбора, которые скрываются, когда вы щелкаете где-нибудь еще на странице.
Действительно хороший пример чистого дизайна с простой анимацией. Но если вам не нравится отсутствие функции скрытия по клику, это может помешать сделке.
10. Dark & Light выбирает
Если вы также любите чистый CSS и хотите гладкое выделение, попробуйте это решение и попробуйте использовать один из них в качестве начального шаблона.
Они оба полагаются на градиенты CSS для фона и смешивают раскрывающиеся меню с нижним цветом градиента. При этом не используются какие-либо плагины JavaScript, поэтому вы можете добиться этого с помощью небольшого количества CSS и некоторых творческих усилий.
Обратите внимание, что CSS сам по себе довольно сложен, поэтому он поможет, если вы знаете язык. Но в качестве отправной точки это один из лучших вариантов, который вы найдете, и он также оставляет много места для настройки.
filamentgroup / select-css: кроссбраузерные стили для согласованного выбора стиля элемента
GitHub - filamentgroup / select-css: кроссбраузерные стили для согласованного выбора стиля элементаКроссбраузерные стили для единообразного стиля выбора элементов
Файлы
Постоянная ссылка Не удалось загрузить последнюю информацию о фиксации.Тип
Имя
Последнее сообщение фиксации
Время фиксации
Кроссбраузерный CSS элемента выбора для согласованного стиля выбора элемента.
Статья: https://www.filamentgroup.com/lab/select-css.html
Демо-страница: http://filamentgroup.github.io/select-css/demo/
Скачать: select-css.css
Доступно в npm: npm install fg-select-css
Использование
Включите следующий файл:
Его CSS стилизует любой выбор с классом select-css
Примечания к CSS
CSS для этого можно использовать как есть, но если вы вообще его редактируете, вы можете знать несколько чисел и значений, которые помогут ему выглядеть правильно.
-
select
установлен наdisplay: block
по умолчанию, но вы можете стилизовать егоdisplay: inline-block; ширина: авто;
, если вы хотите, чтобы он располагался рядом с этикеткой - Фон для
select
создается с использованием двух фоновых изображений: первое - это значок стрелки svg (выраженный встроенным как URI данных), а второе - повторяющийся линейный градиент. Любой URL-адрес может быть внешним изображением, если хотите. Если вы меняете изображение значка, имейте в виду, что его размер установлен в первом разделе более позднегоbackground-size: .65em auto, 100%;
недвижимость. И его позиция устанавливается черезbackground-position: right .7em top 50%, 0 0;
(что составляет.7em
с правой стороны соответственно). Кроме того, если размер изменится, вы можете захотеть сделать больше правого отступа на кнопке, чтобы он не перекрывал текстselect
, но имейте в виду, что в IE9 и более ранних версиях пользовательская стрелка не появится, и стрелка браузера по умолчанию будет отображаться слева от отступа, поэтому не добавляйте слишком много, иначе стрелка IE9 будет вставлена очень далеко. - Линейный градиентный фон важно сохранить, потому что его присутствие фактически мешает IE9 и более ранним версиям распознавать свойство фона, и в результате он не будет отображать настраиваемый значок рядом с его не скрываемым собственным значком. Если вам нужен плоский цвет, используйте линейный градиент между двумя одинаковыми значениями цвета.
- Правило
внешнего вида
и его версии и версии с префиксом важны для отключения некоторых стандартных браузеров.выберите стиль
. - Размер шрифта
: 16 пикселей; Правило
важно, потому что iOS Safari будет увеличивать макет сайта, еслиselect
текст меньше 16 пикселей. Как правило, такое поведение раздражает, поэтому мы стараемся избегать его с размером шрифта 16 пикселей на, выберите
s. - Параметр
.select-css
не позволяет элементамoption
унаследовать жирный шрифт самой кнопкиselect
. - Как отмечалось в статье Скотта О'Хара, установка цвета фона на
select
(хотя и не на фоне изображения , которое я использовал здесь, может привести к тому, что элементыoption
также унаследуют цвета фона, что может вызвать проблемы. Так что не делайте этого.) - Правило
.select-css :: - ms-expand
указывает IE11 и IE10 скрывать псевдоэлемент значка меню, чтобы за ним мог появиться настраиваемый значок.Спасибо за подсказку, Джелмер де Маат.
Для потомков:
Если вам нужен индивидуальный выбор, в котором для дополнительных функций используется JavaScript, обратите внимание на select
.
Около
Кроссбраузерные стили для единообразного стиля выбора элементов
Темы
ресурсов
Лицензия
Вы не можете выполнить это действие в настоящее время.Вы вошли в систему с другой вкладкой или окном. Перезагрузите, чтобы обновить сеанс. Вы вышли из системы на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.Top 30+ CSS Select Boxes - Pintire | автор: Pintire Praveen
Коллекция бесплатных HTML и CSS настраиваемых окон выбора примеров кода: раскрывающийся список, несколько, настраиваемая стрелка и т. д.
Пользовательский стиль раскрывающегося окна выбора. сделано с помощью HTML / CSS
Демо и код загрузки
Демо и код загрузки
Поле выбора без использования JavaScript и собственных элементов.
демо и код
Отзывчивое настраиваемое поле выбора с настраиваемой прокруткой.
demo и код
Image Selection с ложной загрузкой.
demo и код
Custom CSS select wrapper.
демонстрация и код
Пользовательский выбор HTML, CSS и jQuery.
demo и код
Custom select, предназначенный для изменения типичного стиля выбора в браузерах, с использованием JS для отображения списка при щелчке и SCSS для придания ему стиля.Выбранный атрибут работает хорошо, проверьте его. Сделано Дэни Сантосом. Демо
и код
Material Design выберите раскрывающийся список с HTML, CSS и JavaScript. Сделано Sam Murphey
demo и code
Отличный пример чистой анимации. Создан с TweenMax GSAP. Сделано Бхакти Аль Акбаром
демо и код
Select-боксы с HTML, CSS и JS. Сделано Nipun Paradkar
demo и code
Select dropdown - стилизованы и фильтруются с использованием HTML, CSS и vanilla JS.Работает с использованием поля ввода для извлечения значения из раскрывающегося списка. Сделано Мари Йоханнесен.
demo и код
CSS only select (radio + checkbox). Сделано с помощью демонстрации Aoyue
и кода
Поле выбора HTML и CSS с заполнителем. Сделано Джеймсом Ноуландом
демо и код
Выберите вход с помощью радио входов. Сделано Николасом Уди
демо и код
Выберите ввод, только CSS. Сделано Раулем Баррерой
demo и code
Он по-прежнему использует входные данные для поддержки переменных отправки формы, полагаясь в основном на CSS.Сделано с помощью j0be
demo и кода
Custom select box с jQuery. Сделано Виджая Кумар Вулчи
демо и код
Материальный дизайн выберите версию jQuery. Сделано LukyVJ
demo и кодом
Простой горизонтальный выбор. Сделано Bharani
demo и code
Творческий способ стилизовать выпадающие списки с использованием только CSS.
демо и код
Простой способ настройки выбранных входов. Сделано Кристофом CORBALAN
демо и код
Выберите меню с HTML, CSS и JavaScript.Сделано Пьером Лораном
demo и code
Итак, очень простой пользовательский выбор. Сделано Юсуфом
демо и кодом
Пользовательский выбор с анимацией. Сделано Николаем Талановым.
demo и code
Proof of concept, для виджета с множественным выбором. Сделано Бенджамином
демо и
кодHTML, CSS и JS колода карт раскрываются. Сделано Тибором Кательбахом
демо и код
Vue Select
Vue Select предлагает множество API для настройки внешнего вида компонента.Ты можешь использовать слоты с заданной областью действия, настраиваемые дочерние компоненты или изменение встроенных Переменные SCSS.
СОВЕТ
Поддержка переменных CSS (настраиваемые свойства) в настоящее время находится на дорожной карте для тех, кто которые не используют sass в своих проектах.
Переменные SCSS
Переменные используются в максимально возможном количестве стилей компонентов. Если ты действительно хочешь копать
в SCSS файлы находятся в src / scss
. Перечисленные ниже переменные можно найти на src / scss / global / _variables
.
Все переменные реализованы с ! Default
, чтобы облегчить их переопределение в вашем
заявление.
Переопределение стилей по умолчанию
Vue Select использует подход с использованием селекторов с одним уровнем специфичности при использовании классы, которые очень специфичны для Vue Select, чтобы избежать конфликтов с вашим приложением.
Все классы в Vue Select используют префикс vs__
, а селекторы обычно представляют собой одно имя класса
- если к компоненту не применяется состояние.
Чтобы переопределить свойство по умолчанию в вашем приложении, вы должны добавить один уровень специфичности.
Самый простой способ сделать это - добавить .v-select
перед селектором vs __ *
, если вы хотите настроить
все экземпляры Vue Select или добавьте свое собственное имя класса, если вы просто хотите повлиять на него.
Переход раскрывающегося списка
По умолчанию переходы раскрывающегося списка с непрозрачностью ,15 с
кубической кривой Безье постепенно появляются / исчезают. Компонент
использует систему перехода VueJS.По умолчанию
имя перехода - vs__fade
. Есть несколько способов отменить или изменить этот переход.
- Используйте переход
- Вы также можете переопределить CSS по умолчанию для перехода
vs__fade
. Опять же, если вы хотел полностью исключить переход:
Стиль выделенного поля с использованием только CSS
Мне часто приходится использовать поле выбора, когда я составляю настраиваемую форму, для которой требуется раскрывающийся список.Мне потребовалось время, чтобы понять, как легко стилизовать поле выбора, используя только CSS, поскольку некоторые части зависят от браузера, например, стрелка раскрывающегося списка.
Вот как будет выглядеть поле выбора по умолчанию:
Вот первый вариант Второй вариант
Это HTML-код:
<выбрать>
Есть определенные элементы поля выбора, которые мы можем стилизовать, такие как шрифт, граница, цвет, отступ и цвет фона:
Вот первый вариант Второй вариант
Но эта раздражающая стрелка вниз всегда остается неизменной.Прямого способа стилизовать его нет, но обходной путь довольно прост.
Сначала нам нужно окружить наш элемент поля выбора контейнером div:
Вот первый вариант Второй вариант
Затем нам нужно добавить немного CSS, чтобы убедиться, что элементы поля выбора имеют определенный стиль:
.styled-select select { фон: прозрачный; ширина: 268 пикселей; отступ: 5 пикселей; размер шрифта: 16 пикселей; высота строки: 1; граница: 0; радиус границы: 0; height: 34px; -webkit-appearance: нет; }
Нам нужно убедиться, что наше поле выбора действительно охватывает шире, чем окружающий контейнер div, чтобы стрелка раскрывающегося списка по умолчанию исчезла.
Это новая стрелка раскрывающегося списка, которую я хочу использовать:
Наш контейнер div должен быть оформлен так, чтобы новая стрелка появилась там, где мы хотим:
.styled-select { ширина: 240 пикселей; height: 34px; переполнение: скрыто; фон: url (new_arrow.png) no-repeat right #ddd; граница: 1px solid #ccc; }
Наше поле выбора теперь должно выглядеть так:
Вот первый вариант Второй вариант
Знание этого небольшого обходного пути значительно упростит настройку вашего поля выбора именно так, как вы хотите, используя только CSS.