⚙️
Front-end patterns
  • Введение
  • Шаблоны
    • Эффекты CSS
      • Overlay
      • Анимация display:none
      • Текст
        • Фон текста градиент с анимацией
      • Элементы формы
        • Вертикальное выравнивание placeholder по вертикали
      • Ссылки
        • Градиент как основной цвет
        • Линия под ссылкой ездит слева направо при наведении
      • Скрывать блок .clipped
    • Модальное окно
      • Dialog
    • Элементы формы
      • Select
      • Radio
      • CheckBox
      • Ввод текста (input)
        • Телефон (tel)
        • Почта (email)
      • Кнопка
    • Вкладки/Списки
      • Вкладки или Табы (tabs)
      • Аккордеон (Accordion)
    • Навигация
      • Основная и дополнительная навигация на сайте
        • Анимирование основной навигации
      • Пропустить навигацию
      • Хлебные крошки (Breadcrumbs)
      • Кнопка основной навигации (Бургер)
    • Структуры
      • Контейнер
      • Столбцы
      • Прогресс
      • Горизонтальная прокрутка карточек
      • Цитата
    • Тэги (семантика)
      • Текст
      • Логика
    • Увеличить скорость загрузки страницы
    • Шрифты
  • JS
    • Прокрутка страницы
    • Анимация элементов
  • A11Y
    • Фокус с клавиатуры
    • No sort
  • WordPress
    • Решения и подсказки
    • Плагины
    • Натягиваем сайт
      • Пустая тема
      • Делаем главную (пустую) страницу
      • Подключаем стили и js
      • Заменяем содержимое файлов (header, footer, page)
    • Свой плагин
      • Шаблон
      • Административная часть
      • Пользовательская часть
      • Локализация плагина
  • Ghost
    • Создание своей темы
      • Фалы шаблона
        • Partials
          • footer.hbs
          • header.hbs
          • post_card.hbs
        • index.hbs
        • default.hbs
        • post.hbs
      • Переменные
      • Циклы, условия и функции
  • Visual Studio
  • Gulp
    • Deploy on GitHub
    • Плагин
    • Моя сборка
      • Изображения
  • Регулярные выражения
  • Алгоритмы
    • Поиск
    • Сортировка
    • Поиск в ширину (глубину)
    • Типы данных
  • Конструкторы сайтов
Powered by GitBook
On this page
  • Основные данные
  • Терминология
  • Параметры
  • Интерактивный дизайн
  • Управление клавиатурой
  • Screenreader
  • Руководство для разработчиков
  • Content (HTML)
  • Behaviour (JS)
  • ARIA

Was this helpful?

  1. Шаблоны
  2. Элементы формы

Select

Кастомизация стандартного Sel

PreviousЭлементы формыNextRadio

Last updated 2 years ago

Was this helpful?

Основные данные

Нативный select нет возможности полностью стилизовать, поэтому приходится создавать "кастомизированный". Но, для мобильных версий необходимо отображать стандартную версию, так как в болбольшенствебильных устройств нативный select хорошо реализован в браузере.

Терминология

  • select: оригинальный select, из которого будут копироваться все данные в кастомный

  • menu: кастомный select, корневая нода

  • button: нода, которая содержит информацию о выбранном пункте, так же является кнопкой вызова окна со списком доступных значений

  • popup: список доступных значений

  • option: значение (элемент списка)

Параметры

Параметры необходимо установить на нативный select (даже если он их не поддерживает)

  • multiple - позволяет одновременно выбирать сразу несколько элементов списка

  • name - имя элемента для отправки на сервер или обращения через скрипты, не переходит на кастомный select

  • open - определяет открыт ли select при загрузке

  • required - список обязателен для выбора перед отправкой формы, не переходит на кастомный select

  • selected - определяет выбранный пeyrn меню по умолчанию

  • size - количество отображаемых строк списка.

Интерактивный дизайн

Управление клавиатурой

Управление с клавиатуры в точности должны повторять аналогичные действия нативного select, а именно:

Находясь на button СТРЕЛКИ меняют значения, что сразу отражается на самой button

Находясь на button ENTER открывает popup

Находясь на любом элементе menu ESC или TAB закрывает popup, а фокус возвращается на button

При открытии popup фокус попадает на выбранный option, а СТРЕЛКИ меняют значения, что сразу отражается на button

Находясь на option ENTER закрывает popup, а фокус возвращается на button

Screenreader

Руководство для разработчиков

Content (HTML)

В данном примере кастомный select будет формировать через js, основой которому будет служить нативный вариант:

<div class="select-wrapper">
   <label class="options__item" for="date"></label>
   <select class="options__select" id="date" name="date">
      <option value="new">Сначала новые</option>
      <option value="old">Сначала старые</option>
      <option value="random">В случайном порядке</option>
   </select>
</div>

После применения JS:

<div class="select-wrapper">
   <label class="options__item" for="date"></label>
   <select class="options__select" id="date" name="date">
      <option value="new">Сначала новые</option>
      <option value="old">Сначала старые</option>
      <option value="random">В случайном порядке</option>
   </select>
   <div class="select__menu">
      <button class="select__button">Сначала новые</button>
      <ul class="select__popup">
         <li tabindex="0" class="select__option" data-value="new" selected="">Сначала новые</li>
         <li tabindex="-1" class="select__option" data-value="old">Сначала старые</li>
         <li tabindex="-1" class="select__option" data-value="random">В случайном порядке</li>
      </ul>
   </div>
</div>

Behaviour (JS)

Описание создание кастомного select описываться не будет, но следует отметить, что необходимо прописать связь между значениями кастомного и нативного select

ARIA

Так как role = select, то используется следующее:

role=menu

Сообщает вспомогательным технологиям, что это меню, содержащее элементы меню.

role=menuitem

Сообщает вспомогательным технологиям, что это элементы меню.

aria-checked

Сообщает вспомогательным технологиям, какие элементы меню выбраны.

aria-haspopup

Сообщает вспомогательным, что button имеет popup, который будет показан (вызван) при нажатии

aria-expanded

Сообщает вспомогательным технологиям состояние popup (открыт\закрыт)

При создании кастомного select в качестве примера был взят .

- реализовать нет возможности, так как необходимо отслеживать все аналогичные параметры на странице (нативно делает браузер)

- определяет доступность select

- cвязывает список с формой, не переходит на кастомный select

Open UI select
autofocus
disabled
form