tastySelect

Плагин для стилизации select без зависимостей.

И сразу же пример!

На мобилках будет вызван нативный обработчик, а на компьютерах нормальный, красивый селект.
Запуск плагина в этом случае выглядит так:

tastySelect({ defaultText: "Можешь выбрать покушать! (Ctrl+Click)", });

Стилизовать можно вообще как угодно!

Структура одна, я просто меняю класс! Прекрасно стилизуется :з
Вообще-то хотел сделать больше стилей, но стало лень.


Скачивай скорее прямо из печи! Достаточно всего лишь подключить скрипт на страницу и вызвать функцию! Где такое видано? (тссс.. Я знаю что везде)

Скачать :зОтправиться на GitHub!

Структура HTML

На самом деле не представляю как нормально объяснить структуру)
classes.whatever - Это класс, который мы передали в настройках. Например для classes.outer по умолчанию задано "style-select". Все классы указанные по умолчанию можно посмотреть здесь

<div class=classes.outer>
Оболочка для стилизации и селекта
	<div class=classes.title></div>
	Видимая часть (если выпадашка скрыта)
	<div class=classes.options>
	Общий блок для элементов
		<ul class=classes.list>
			Такой список используется для элементов без подгруппы
			<li class=classes.option attributes.value attributes.index></li>
			Сам элемент. attributes.index - позиция элемента в select, attributes.value - значение оригинального option
		</ul>
		<ul class=classes.optgroup>
		Такой список используется для элементов подгруппы
			<li class=classes.label></li>
			Заголовок для подгруппы. Значение берется из атрибута label тега optgroup
			<li class=classes.option attributes.value attributes.index></li>
			Сам элемент. attributes.index - позиция элемента в select, attributes.value - значение оригинального option
		</ul>
	</div>
	<select>...</select>
	Оригинальный select. Разумеется его стоит скрыть в css.
</div>

Мобильный фолбэк

На мобилках все дурацко. Пропадает смысл такой стилизации и я предлагаю накладывать прозрачный select на нашу стилизацию. Селект продолжит работать, только вместо выпадашки будет нативный выбор. Дело ваше.

(classes.outer).(classes.mobile) select{
	position: absolute;
	width: 100%;
	height: 100%;
	top: 0;
	left: 0;
	z-index: 10;
	opacity: 0;
}

При тестах заметил интересное. Мобилка не дает выбрать первый option при множественном выборе. Написал решалку для этой штуки, по умолчанию она чинится. Что бы отключить нужно передать в настройках следующее:

tastySelect({ mobileFix: false, });

APIшечка

Вообще все настройки передаются при вызове в объекте.

Свойство Значение
selector

String

Селектор элементов, которые надо обработать

Значение по умолчанию: 'select'

mobileFix

Boolean

Данный флаг позволяет сделать первый элемент активным для выбора. Обычно на мобилках это не работает

Значение по умолчанию: true

mask

String

Это маска для отображения выбранных элементов.
Знак $ - количество элементов, % - перечисление выбранных элементов

Значение по умолчанию: '%'

maskJoin

String

Если у нас в маске указано перечисление, то соединяться оно будет этой строкой

Значение по умолчанию: ', '

defaultText

Sctring

Если поле не выбрано, то отображаться будет этот текст

Значение по умолчанию: 'Select item...'

classes

Object

В данный объект передаются классы по ключам, объяснение дальше

Значение по умолчанию: {..Перечисление классов..}

attributes

Object

В данный объект передаются атрибуты по ключам, объяснение дальше

Значение по умолчанию: {..Перечисление атрибутов..}

Классы настраиваются именно так:

Свойство Значение
outer

String

Родитель всех родителей, внутри него все ( структура + select )

Значение по умолчанию: 'style-select'

title

String

"Кнопка" селекта. В общем это видимая часть селекта без выпадашки

Значение по умолчанию: 'style-select-title'

options

String

Выпадашка

Значение по умолчанию: 'style-select-options'

optgroup

String

Если в select есть группы optgroup, то элементы группы попадут в список с этим классом

Значение по умолчанию: 'style-select-optgroup'

list

String

Если элементы висят без группы, то у списка будет этот класс

Значение по умолчанию: 'style-select-list'

label

String

Если есть группа, то ее заголовок поместится в li с этим классом

Значение по умолчанию: 'style-select-label'

item

String

Класс для элемента списка

Значение по умолчанию: 'style-select-option'

open

String

Данный класс добавляется к родительскому блоку, если выпадашка открыта

Значение по умолчанию: 'st_open'

selected

String

Этот класс добавляется к элементу списка, если он выбран

Значение по умолчанию: 'st_selected'

mobile

String

Класс добавляется к родительскому блоку, если это мобилка

Значение по умолчанию: 'is_mobile'

Атрибуты, вдруг пригодятся:

Свойство Значение
index

String

Атрибут добавляется к элементу списка, а значением будет его оригинальная позиция в select

Значение по умолчанию: 'data-index'

value

String

Атрибут добавляется к элементу списка, значение - оригинальный value

Значение по умолчанию: 'data-value'

Fork me on GitHub