Темизация <select>

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

Имеем HTML:

<div id="wrapper">
    <select id="langSelect">
        <option value="ua">Українська</option>
        <option value="ru">Русский</option>
        <option value="en">English</option>
        <option value="ge">Deutsch</option>
    </select>
</div>

Если слоя-обёртки нет — надо его создать, т.к. ему отводится важная роль в сокрытии стандарной кнопки списка.
Прежде всего определяемся с изображениями. Для флагов целесообразно сделать спрайт — flagSprite.png, ну, и кнопку взять покрасивее (у меня — selectBg.png — не очень хорошо получилось).

1. Элементы списка
Тут всё просто и понятно: задаём для элементов списка в качестве background‘а наш флаговый спрайт со смещением в зависимости позиции элемента. Если планируется в дальнейшем изменение порядка option‘ов — рекомендую привязываться к классам.

#langSelect {
	background: url("flagSprite.png") no-repeat scroll 1px 6px transparent;
	border: medium none;
	color: #000088;
	font: 18px/30px Verdana;
	height: 31px;
	padding: 3px 0 0 26px;
        width: 183px;
}
#langSelect option {
	background: url("flagSprite.png") no-repeat scroll 1px 5px transparent;
	padding: 3px 18px 0 27px;
}
#langSelect option+option {
	background-position: 1px -21px;
}
#langSelect option+option+option {
	background-position: 1px -49px;
}
#langSelect option+option+option+option {
	background-position: 1px -77px;
}

2. Меняем кнопку
На самом деле кнопку мы не меняем, а скрываем с помощью overflow:hidden у родительского слоя и за счёт того, что размеры этого слоя несколько меньше, чем у select‘а.
Добавляем немного css и в результате получаем нечто похожее на то, что изображено на первом скрине.

#wrapper {
	background: url("selectBg.png") no-repeat scroll right 0 transparent;
	border: 1px solid #000088;
	height: 30px;
	overflow: hidden;
	padding: 0;
	width: 166px;
}

3.Всё?
Почти. После выбора языка в видимой части select находится флажок по умолчанию. Чтобы сменить его, нам понадобиться немного jquery-магии:

$('#langSelect').change(function()
{
    $(this).css('backgroundPosition', $(':selected', this).css('backgroundPosition'));
});

Итого

Автор:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *