Стилизации select в css крайне сильно ограничены. Но очень часто в дизайн стандартный select



жүктеу 32,07 Kb.
Дата21.04.2020
өлшемі32,07 Kb.
#29894
Урок 52

    Навигация по данной странице:
  • JavaScript

Стилизация select на JavaScript

Кто серьёзно занимается вёрсткой страниц, знает, что возможности стилизации select в CSS крайне сильно ограничены. Но очень часто в дизайн стандартный select не вписывается вообще никак, поэтому приходится делать стилизацию select через JavaScript. Фактически, в этой статье мы с Вами создадим свой собственный select с помощью JavaScript.

Есть масса готовых плагинов, в том числе и на jQuery, которые позволяют всё это сделать. Но если Вам не нужно что-то сверхсложное, то проще сделать всё самому с нуля на чистом JavaScript.

Первым делом, давайте создадим HTML-структуру нашего будущего select:




  
  
    
 data-value="1" onclick="select(this)" class="active">Элемент 1

    
 data-value="2" onclick="select(this)">Элемент 2

    
 data-value="3" onclick="select(this)">Элемент 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.

жүктеу 32,07 Kb.

Достарыңызбен бөлісу:




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау