Вордпрес плагін для стилізації select. JQuery-плагін для стилізації селектів. CSS-класи, які використовуються для оформлення селекту

Головна / Google Play
Soldatov Nikolay
Стилізація selectСтилізація select на чистому CSS без використання сторонніх бібліотек або JavaScript коду. А також бонус: розглянемо як стилізувати select option за допомогою JavaScript та jQuery.

Структура буде стандартною

Слон Бегемот Жираф

Щоб у select відображається рядок один використовуємо атрибут size зі значенням 1.

Стилізація для нашого селекту

-webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; background : url ("path/img.png" ) no-repeat right center ; outline: 0;

Отримуємо

Слон Бегемот Жираф

У прикладі вище ми прописали чотири рядки ccs властивості appearance з вендорними префіксами, щоб властивість працювала однаково у всіх браузерах. Що за властивість читайте нижче.

Вся складність полягала лише у заміні стандартної стрілки прямокутнику, замість якої ми реалізували background. Таким чином можна вставити будь-яку картинку. Необхідно лише підігнати розмір за допомогою якості background-size

Appearance CSS

Реалізувати наше завдання допомогло css3 властивість appearance

Дана властивість дозволяє змінити вигляд елемента на: button, checkbox, radio, field, icon та багато іншого. У нашому випадку ми взагалі приховали елемент, використовуючи none та додали картинку за допомогою background

Стилізація select option

Для того, щоб стилізувати select option потрібно JavaScript

Вибрати HTML JavaScript PHP .select ( display : block ; max-width : 215px ; width : 100% ; position : relative ; ). relative ; ) .new-select__list ( border : 1px solid #ced4da ; cursor : pointer ; position : absolute ; top : 45px ; left : 0 ; width : 100% ; ) .new-select__list.on ( display : . new-select__item span (display: block; padding: 10px 15px;) .new-select__item span:hover (color: #12b223;) .new-select :after (content: ""; : 25px ; position : absolute ; right : 9px ; top : 9px ; -out , -o-transition : all .27s ease-in-out , transition : all .27s ease-in-out , -webkit-transform : rotate (0deg ); -ms-transform : rotate (0deg); -o-transform : rotate (0deg); transform : rotate (0deg); ) .new-select.on :after ( -webkit-transform : rotate (180deg ); -ms-transform : rotate (180deg ); -o-transform : rotate (180deg ); transform : rotate (180deg ); )

Перед JavaScript-кодом має бути підключений jQuery

$ (".select"). each (function () ( const _this = $ (this ), selectOption = _this . find ("option"), selectOptionLength = selectOption . length , selectedOption = selectOption . filter (" :selected " ), duration = 45 анімації _this . hide (); _this . wrap (" " ); $ (" " , ( class : " new-select " , text : _this . children (" option:disabled " ). text () )). _this ); const selectHead = _this . next (" .new-select " ); select__list "); for (let i = 1; i< selectOptionLength ; i ++ ) { $ (" " , { class : " new-select__item " , html : $ (" " , { text : selectOption . eq (i ). text () }) }) . attr (" data-value ", selectOption . eq (i). val()). appendTo (selectList); ) const selectItem = selectList. find (" .new-select__item " ); selectList . slideUp (0 ); selectHead . on (" click " , function () { if ( ! $ (this ). hasClass (" on " ) ) { $ (this ). addClass (" on " ); selectList . slideDown (duration ); selectItem . on (" click " , function () { let chooseItem = $ (this ). data (" value " ); $ (" select " ). val (chooseItem ). attr (" selected " , " selected " ); selectHead . text ( $ (this ). find (" span " ). text () ); selectList . slideUp (duration ); selectHead . removeClass (" on " ); }); } else { $ (this ). removeClass (" on " ); selectList . slideUp (duration ); } }); });

Останнім часом дизайнери стали все частіше малювати HTML форми у стилістиці HTML 2.0, ця тенденція триває вже кілька років і чим далі тим звичнішим стають красиві поля введення даних та select'и із закругленими краями та тінями. Можна тільки порадіти, адже все чудово і CSS3 вже використовується де тільки можна, дозволяючи надавати гарний вигляд формам, полям та селектам. На жаль, не завжди все так райдужно.

Незважаючи на те, що всі сучасні браузери підтримують HTML5 і CSS3, ними користуються далеко не всі, і як свідчить статистика половина користувачів всього інтернету, як і раніше, працюють у браузерах старих версій, багато з яких не підтримують повною мірою або взагалі CSS3. Тому стилізувати список (Select), що випадає, часто доводиться старими добрими засобами, а саме jQuery (js) і картинками PNG або GIF. Про один із таких способів я хочу розповісти.


Наведений нижче скрипт був випадково знайдений мною на сторінках рунету, на жаль, адреси я не запам'ятав і імені його автора. Тому просто передаю йому великий респект.

Перегляд коду JS

(function($)( $.fn.extend(( customStyle1: function(options) ( if(!$.browser.msie || ($.browser.msie&&$.browser.version>6))) ( return this.each (function() ( var currentSelected = $(this).find(":selected"); $(this).after(""+currentSelected.text()+")).css((position:"absolute", opacity:0,fontSize:$(this).next().css("font-size")));var selectBoxSpan = $(this).next();var selectBoxWidth = parseInt($(this).width( )) - parseInt(selectBoxSpan.css("padding-left")) -parseInt(selectBoxSpan.css("padding-right"));var selectBoxSpanInner = selectBoxSpan.find(":first-child"); selectBoxSpan.css( (display:"inline-block")); selectBoxSpanInner.css((width:selectBoxWidth, display:"inline-block")); -top")) + parseInt(selectBoxSpan.css("padding-bottom")); $(this).height(selectBoxHeight).change(function()( selectBoxSpanInner.text($("option:selected",this) .text()).parent().addClass("changed"); )); )); ) ) )); )) (jQuery);

Виклик скрипту для стилізації "селексту".

Перегляд коду JS

$(document).ready(function() ( $(".select1").customStyle1(); ));

HTML код «селекту», який буде стилізований

Перегляд коду HTML

Опція 1 Опція 2 Опція 3 Опція 4 Опція 5 Опція 6

Стиль який буде застосовано до селекту

Перегляд коду CSS

.select1 ( width : 410px ; height : 32px ; color : #909090 ; font : 12px Arial, Tahoma, Helvetica, Verdana; text-align : left ; background : url (images/sel1.png) для оформлення селекту * / line-height : 30px ; white-space : nowrap ; / * забороняємо перенесення * / padding : 0 22px 0 12px ; / * відступ праворуч з урахуванням стрілочки IE6 * / margin : 3px 0 5px 0 ; )

Замінивши фонове зображення, ви можете стилізувати select як вам завгодно і працювати даний приклад буде в більшості браузерів, навіть у найстаріших).

Часто натрапляю на великі сайти де використовується схожий принцип стилізації об'єктів форм, з чого можна зробити висновок, що поки більшість веб-майстрів схильні до застосування таких не дуже простих рішень, заради підтримки користувачів зі старими браузерами.

Доброго дня, хабраюзери і просто читають. Порівняно недавно запитав, як застосувати стилі до тега select. Усім хочеться, щоб стилізація форми відповідала дизайну сайту, а поки що не все можна описати чистим CSS. У цій статті ми розглянемо простий приклад написання свого select-списку, використовуючи CSS та бібліотеку мови JavaScript – jQuery. Думаю, особливо новачкам буде цікавий цей матеріал. Звичайно, краще було б краще написати на нативному JS, але всім відомо, що рядків коду було б більше, і навряд чи він був би зрозумілішим.

Чесно кажучи, перш ніж взятися за створення чергового велосипеда, я пробував знайти подібне рішення, але крім ефектних div-оберток для тега select нічого не знайшов. І я подумав, що буде непогано написати щось просте і потрібне. Ну що ж, почнемо!

У нашому гуртку ліплення з пластиліну беруть участь три файли:

  • selectbox.html
  • selectbox.css
  • selectbox.js
Розглянемо їх по черзі. Спочатку звернемо увагу на найпростіше в цьому прикладі - верстка списку або файл selectbox.html :

selectbox.html

Місяць

  • Січень
  • Лютий
  • Березень
  • Квітень
  • Травень
  • Червень
  • Липень
  • Серпень
  • Вересень
  • Жовтень
  • Листопад
  • грудень


Як видно з вихідного HTML-коду, наш список буде пропонувати нам вибрати місяць. Тепер розглянемо файл selectbox.css:

selectbox.css

div#selectBox ( width: 250px; position: relative; height: 50px; border-radius: 3px; border: solid 1px lightgrey; background-color: #fff; color: #333; cursor: pointer; overflow: hidden; transition: .3s; ) div#selectBox p.valueTag ( padding: 15px; cursor: pointer; transition: .2s; height: 40px; ) div#selectBox > img.arrow ( position: absolute; right: 0; width: 50px; padding : 15px; ) /* для користувачів Safari, Chrome та Opera приємний бонус - стилізований скролл-бар. */ ::-webkit-scrollbar ( background: transparent; width: 0.5em; position: absolute; ) ::-webkit-scrollbar-track ( background: transparent; position: absolute; z-index: -2; ) :: -webkit-scrollbar-thumb ( border-radius: 100px; background: #888; ) ul#selectMenuBox ( background: #fff; transition: .3s; width: 100%; height: 200px; overflow-y: auto; overflow- x: hidden !important; position: absolute; margin-top: 00px; display: block; ) ul#selectMenuBox > li ( display: block; li.option ( color: gray; padding: 10px; ) ul#selectMenuBox > li.option:hover ( color: #333; background: #e1e1e1; transition: .2s; )


Особливих труднощів тут немає, якщо ви володієте азами верстки і розмітки засобами HTML і CSS3 відповідно.

А тепер до смакота! Розглянемо вихідний код плагіна selectbox()для jQuery, файл selectbox.js :

selectbox.js

(function($) ( $.fn.selectbox = function() ( // початкові параметри // задаємо стандартну висоту div"a. var selectDefaultHeight = $("#selectBox").height(); // кут повороту зображення в div"e var rotateDefault = "rotate(0deg)"; // після натискання кнопки спрацьовує функція, в якій // обчислюється вихідна висота нашого div"a. // дуже зручно для порівняння з вхідними параметрами (те, що задається на початку скрипту ) $("#selectBox > p.valueTag").click(function() ( // обчислення висоти об'єкта методом height() var currentHeight = $("#selectBox").height(); // перевірка умови на збіг/ не збіг із заданою висотою спочатку, // щоб зрозуміти, що робити далі if (currentHeight< 100 || currentHeight == selectDefaultHeight) { // если высота блока не менялась и равна высоте, заданной по умолчанию, // тогда мы открываем список и выбираем нужный элемент. $("#selectBox").height("250px"); // «точка остановки анимации» // здесь стилизуем нашу стрелку и делаем анимацию средствами CSS3 $("img.arrow").css({borderRadius: "1000px", transition: ".2s", transform: "rotate(180deg)"}); } // иначе если список развернут (высота больше или равна 250 пикселям), // то при нажатии на абзац с классом valueTag, сворачиваем наш список и // и присваиваем блоку первоначальную высоту + поворот стрелки в начальное положение if (currentHeight >= 250) ( $("#selectBox").height(selectDefaultHeight); $("img.arrow").css((transform: rotateDefault)); ) )); // так само згортаємо список при виборі потрібного елемента // і змінюємо текст абзацу на текст елемента у списку $("li.option").click(function() ( $("#selectBox").height(selectDefaultHeight); $ ("img.arrow").css((transform: rotateDefault)); $("p.valueTag").text($(this).text()); )); ); )) (jQuery);


Кода було більше, але вдалося стиснути завдяки методам css() та height(). Оформив у вигляді плагіна для зручності та багаторазового використання. Можна зробити так, як вам подобається, аби працювало, так що я не ображусь, якщо хтось оптимізує мою милицю. Для виклику достатньо підключити зовнішній файл скрипту та викликати плагін таким чином:

$("selector").selectbox();
Попередньо, включивши дзвінок у метод ready() об'єкта document, щоб плагін завантажувався після повноцінного завантаження документа. Докладніше, що таке плагін на jQuery, можна ознайомитись

Хто серйозно займається версткою сторінок, знає, що можливості стилізації select в CSS дуже обмежені. Але дуже часто в дизайн стандартний select не вписується взагалі ніяк, тому доводиться робити стилізацію select через JavaScript. Фактично, у цій статті ми з Вами створимо свій власний select за допомогою JavaScript.

Є багато готових плагінів, у тому числі і на jQuery, які дозволяють все це зробити. Але якщо Вам не потрібно щось надскладне, то простіше зробити все з нуля на чистому JavaScript.

Насамперед, давайте створимо HTML-структуру нашого майбутнього select :




Елемент 1
Елемент 2
Елемент 3



Елемент 1


Елемент 2


Елемент 3




Як бачите, тега select тут і близько немає. Тепер ми можемо як завгодно стилізувати наш власний select за допомогою CSS:

Select (
background-color: #0ee;
border-radius: 10px;
padding: 10px 0;
width: 200px;
}
.select p (
cursor: pointer;
margin: 0;
padding: 5px 20px;
}
.select p.active (
background-color: #ee0;
}

Безумовно, Ви можете зробити все, що забажаєте. І, нарешті, треба перетворити зовнішній вигляд на функціональність select , тобто вибір і підсвічування лише одного елемента з декількох, а також подальше відправлення разом з формою. Для цього ми скористаємося JavaScript :

Function select(element) (
var value = element.getAttribute("data-value"); // Зчитуємо значення обраного елемента
var nodes = element.parentNode.childNodes; // Отримуємо всі інші елементи
for (var i = 0; i< nodes.length; i++) {
/* Відфільтровуємо сторонні елементи text та input */
if (nodes[i] instanceof HTMLParagraphElement) (
/* Додаємо active у вибраного елемента, стираючи даний клас у всіх інших */
if (value == nodes[i].getAttribute("data-value")) nodes[i].className = "active";
else nodes[i].className = "";
}
}
document.getElementById("my_select").value = value; // Встановлюємо у hidden-полі обране значення
}

Ключовим моментом реалізації функціональності select є hidden-поле , яке записується значення з нашого select . І саме це значення буде надіслано під час відправлення форми.

Ось таким нехитрим чином робиться абсолютно будь-яка стилізація select JavaScript. Якщо використовувати jQuery, код буде ще простіше.

Безумовно, стандартний select має більшу функціональність. Наприклад, він реагує на tab, також можна в ньому перебирати елементи стрілками на клавіатурі. Але все це Ви також можете реалізувати при необхідності на JavaScript.

І остання рекомендація. У коді був використаний тег noscript, і це було невипадково. Оскільки не у всіх JavaScript включено, і щоб форма була взагалі робочою для таких користувачів, потрібно вивести хоча б стандартний select. А всі, у кого JavaScript включений, побачать наш гарний select.

Увага! Подальший розвиток та підтримка плагіна зупинені у зв'язку з тим, що тепер він є частиною .

Одна з найнеприємніших (і я навіть сказав жахливих) речей у веб-розробці — це верстка html-форм. На жаль, немає єдиного стандарту відображення елементів форм, незалежно від браузера та операційної системи, так само, як і немає можливості довільно оформити деякі з цих елементів, використовуючи каскадні таблиці стилів.

Не піддаються повній стилізації такі елементи html-форм:

  • список, що розкривається;
  • прапорець;
  • перемикач.
  • поле для надсилання файлу.

Як уже зрозуміло із заголовка посту, тут йтиметься лише про селективи.

Існує чимало готових рішень у вигляді jQuery-плагінів для стилізації списків, що розкриваються. Але я (через те, що жоден із плагінів мене не влаштував з тих чи інших причин) вирішив піти шляхом винаходу свого колеса і написав власний плагін, яким і поділяюся в цій статті.

Відразу хочу зауважити, що цей плагін не підходить для всіх можливих випадків застосування селектів (читайте недоліки).

Демонстрація роботи плагіна

Ви можете подивитися приклад стилізації селектів за допомогою мого плагіна. Їхнє оформлення я зробив без використання зображень.

Переваги
  • При вимкненому JavaScript з'являються стандартні селективи.
  • Невеликий розмір скрипту, приблизно 4 кілобайти.
  • Працює в IE6+ та всіх сучасних десктопних браузерах.
  • Виводиться внутрішньорядково.
  • Легко піддається оформленню через CSS.
  • Дозволяє задати максимальну висоту для списку (CSS-властивістю max-height).
  • Автоматично налаштовує ширину, якщо вона не вказана.
  • Підтримує прокручування колесом миші.
  • Має «розумне позиціонування», тобто. при відкритті списку не йде за видиму частину сторінки.
  • Вміє "ловити" натискання клавіші Tab і перемикатися стрілками на клавіатурі.
  • Підтримує атрибут "disabled".
  • Працює і з селектами, що динамічно додаються/змінюються.
Недоліки
  • Чи не підтримує атрибут multiple , тобто. не дозволяє вибирати кілька пунктів (мультиселект).
  • Не підтримує угрупування елементів списку (тег).
  • Не підтримує перемикання стрілками на клавіатурі, коли список розкритий клацанням миші.
завантажити

Плагін недоступний, т.к. він не актуальний.

jQuery-плагін «SelectBox Styler»

Версія: 1.0.1 | Завантажень: 11103 | Розмір: 7 Кб | Останнє оновлення: 07.10.2012

Оновлення 22.09.2012 Переробив скрипт у плагін (у тому числі зробив мінімізований варіант), а також додав підтримку динамічного додавання/зміни селектів. 07.10.2012 Виправлено поведінку скрипта при використанні методу onchange у тега. Підключення плагіна

Якщо на сайті ще не підключено jQuery, додайте наступний рядок перед тегом :

Відразу після jQuery підключіть файл зі скриптом:

(function($) ( $(function() ( $("select").selectbox(); )) ))(jQuery)

Цей код розмістіть перед тегом після вказаних вище файлів.

При динамічній зміні селектів необхідно запустити тригер refresh, наприклад:

(function($) ( $(function() ( $("button").click(function() ( $("select").find("option:nth-child(5))).attr("selected ", true); $("select").trigger("refresh"); )) )) ))(jQuery)

HTML-код після виконання плагіна

Його структура виглядає так:

-- Виберіть --

  • -- Виберіть --
  • Пункт 1
  • Пункт 2
  • Пункт 3
-- Виберіть -- Пункт 1 Пункт 2 Пункт 3

CSS-класи, які використовуються для оформлення селекту

Щоб оформити селективи за допомогою CSS, використовуйте такі класи:

.selectboxбатьківський контейнер для всього селекту
.selectbox .selectселект у згорнутому стані
.selectbox.focused .selectфокус на селекті, коли натиснута клавіша Tab
.selectbox .select .textвкладений тег для згорнутого селекту на випадок вставки фонового зображення за технікою «розсувних дверей»
.selectbox .triggerправа частина згорнутого селекту (умовний перемикач)
.selectbox .trigger .arrowвкладений тег для перемикача (стрілка)
.selectbox .dropdownобгортка для списку
.selectbox .dropdown ulвипадаючий список
.selectbox liпункт (опція) селекту
.selectbox li.selectedвибраний пункт селекту
.selectbox li.disabledвимкнений (недоступний для вибору) пункт селекту
Висновок

Створення подібного скрипта — досить копітке заняття, оскільки доводиться враховувати багато різних моментів. Дуже сподіваюся, що жодних серйозних багів не вилізе. Але, якщо що, повідомляйте у коментарях.

© 2024 androidas.ru - Все про Android