Для каждого компонента представлена его верстка, файлы стилей (исходники в SASS, скомпилированный CSS и минифицированный CSS), а также JavaScript обработчики, если они есть у компонента (исходный ES6+ файл source.js для использования в ваших сборках, готовый к production внедрению файл .js и его минифицированная версия min.js)
Атрибуты data-role в верстке компонент являются кастомными и служат для указания JavaScript на компонент.
Важно
Визуальное отображение представленных компонент завязано на предоставленую нами конфигурацию панели, но вы все равно можете использовать их в своих проектах, адаптировав CSS под ваши нужды.
Хлебные крошки
Озаглавьте тег <nav>, добавив ему атрибут aria-label.
Используйте упорядоченный список, так как порядок ссылок в данном случае очень важен.
Для текущей страницы используйте ссылку с атрибутом aria-current="page", либо используйте просто текст. Это позволит пользователям, использующим экранные чтецы, корретно разделять текущую страницу и ссылки на другие разделы сайта.
Информация для вложенного списка в хлебных крошках:
Для ссылки с выпадающим списком добавьте атрибуты aria-haspopup="true", aria-expanded="false", aria-controls="{dropdown-id}".
Для выпадающего списка добавьте атрибуты id="{dropdown-id}", aria-hidden="true".
В конце текста ссылки добавьте элемент , который будет отображать декоративную стрелку и участвовать в переключении меню на сенсорных экранах.
Чтобы переключить отображение выпадающего списка для ссылки в фокусе, нажмите клавишу стрелка вниз или пробел.
Меню автоматически появляется и скрывается при hover эффектах мыши.
Для сенсорных экранов переключение отображения выпадающего списка происходит при клике на декоративную стрелку или фокусировке ссылки.
Клик вне пункта хлебных крошек или покидание фокуса закрывает текущий выпадающий список.
Если вместо ссылки в хлебных крошках нужно указать просто текст, содержащий выпадающий список, то используйте для этого тег , добавив к нему атрибут tabindex="0", чтобы тег был достижим с клавиатуры.
Атрибут data-wcag="alternative-background" служит для декоративного выделения выпадающего списка альтернативным фоном.
Аккордеон представляет собой неупорядоченный список, где у каждого элемента есть триггер и контент.
Триггер является кнопкой и имеет следующие атрибуты:
aria-expanded со значениями true/false для указания экранным чтецам на то, раскрыт контент или нет.
aria-controls - id элемента, который контролируется триггером.
data-trigger - собственный атрибут для однозначной идентификации триггера средствами JavaScript.
У блока контента обязательным атрибутом является id и aria-hidden="true" для скрытого по-умолчанию состояния.
Если вам нужно по-умолчанию раскрыть определнный элемент, уберите у контента атрибут aria-hidden, а триггеру выставите значение атрибута aria-expanded="true".
На улице жара стояла страшная, к тому же духота, толкотня, всюду известка, леса, кирпич, пыль и та особенная летняя вонь, столь известная каждому петербуржцу, не имеющему возможности нанять дачу, — всё это разом неприятно потрясло и без того уже расстроенные нервы юноши. Нестерпимая же вонь из распивочных, которых в этой части города особенное множество, и пьяные, поминутно попадавшиеся, несмотря на буднее время, довершили отвратительный и грустный колорит картины. Чувство глубочайшего омерзения мелькнуло на миг в тонких чертах молодого человека. Кстати, он был замечательно хорош собою, с прекрасными темными глазами, темно-рус, ростом выше среднего, тонок и строен. Но скоро он впал как бы в глубокую задумчивость, даже, вернее сказать, как бы в какое-то забытье, и пошел, уже не замечая окружающего, да и не желая его замечать. Изредка только бормотал он что-то про себя, от своей привычки к монологам, в которой он сейчас сам себе признался. В эту же минуту он и сам сознавал, что мысли его порою мешаются и что он очень слаб: второй день как уж он почти совсем ничего не ел.
Но у него недоставало характера явно признать учение добра и уважения к невинности. Тихонько он упивался ее ароматом, но явно иногда приставал к хору циников, трепетавших даже подозрения в целомудрии или уважении к нему, и к буйному хору их прибавлял и свое легкомысленное слово.
Напившись кофею, Нехлюдов пошел в кабинет, чтобы справиться в повестке, в котором часу надо быть в суде, и написать ответ княжне. В кабинет надо было пройти через мастерскую. В мастерской стоял мольберт с перевернутой начатой картиной и развешаны были этюды. Вид этой картины, над которой он бился два года, и этюдов, и всей мастерской напомнили ему испытанное с особенной силой в последнее время чувство бессилия идти дальше в живописи. Он объяснял это чувство слишком тонко развитым эстетическим чувством, но все-таки сознание это было очень неприятно.
Стук рессорного экипажа, тот стук, который так особенно заметен в деревенской глуши, внезапно поразил его слух. Ближе, ближе катились легкие колеса; вот уже послышалось фырканье лошадей... Василий Иванович вскочил и бросился к окошку. На двор его домика, запряженная четверней, въезжала двуместная карета. Не отдавая себе отчета, что бы это могло значить, в порыве какой-то бессмысленной радости, он выбежал на крыльцо... Ливрейный лакей отворял дверцы кареты; дама под черным вуалем, в черной мантилье, выходила из нее...
На улице жара стояла страшная, к тому же духота, толкотня, всюду известка, леса, кирпич, пыль и та особенная летняя вонь, столь известная каждому петербуржцу, не имеющему возможности нанять дачу, — всё это разом неприятно потрясло и без того уже расстроенные нервы юноши. Нестерпимая же вонь из распивочных, которых в этой части города особенное множество, и пьяные, поминутно попадавшиеся, несмотря на буднее время, довершили отвратительный и грустный колорит картины. Чувство глубочайшего омерзения мелькнуло на миг в тонких чертах молодого человека. Кстати, он был замечательно хорош собою, с прекрасными темными глазами, темно-рус, ростом выше среднего, тонок и строен. Но скоро он впал как бы в глубокую задумчивость, даже, вернее сказать, как бы в какое-то забытье, и пошел, уже не замечая окружающего, да и не желая его замечать. Изредка только бормотал он что-то про себя, от своей привычки к монологам, в которой он сейчас сам себе признался. В эту же минуту он и сам сознавал, что мысли его порою мешаются и что он очень слаб: второй день как уж он почти совсем ничего не ел.
Но у него недоставало характера явно признать учение добра и уважения к невинности. Тихонько он упивался ее ароматом, но явно иногда приставал к хору циников, трепетавших даже подозрения в целомудрии или уважении к нему, и к буйному хору их прибавлял и свое легкомысленное слово.
Напившись кофею, Нехлюдов пошел в кабинет, чтобы справиться в повестке, в котором часу надо быть в суде, и написать ответ княжне. В кабинет надо было пройти через мастерскую. В мастерской стоял мольберт с перевернутой начатой картиной и развешаны были этюды. Вид этой картины, над которой он бился два года, и этюдов, и всей мастерской напомнили ему испытанное с особенной силой в последнее время чувство бессилия идти дальше в живописи. Он объяснял это чувство слишком тонко развитым эстетическим чувством, но все-таки сознание это было очень неприятно.
Стук рессорного экипажа, тот стук, который так особенно заметен в деревенской глуши, внезапно поразил его слух. Ближе, ближе катились легкие колеса; вот уже послышалось фырканье лошадей... Василий Иванович вскочил и бросился к окошку. На двор его домика, запряженная четверней, въезжала двуместная карета. Не отдавая себе отчета, что бы это могло значить, в порыве какой-то бессмысленной радости, он выбежал на крыльцо... Ливрейный лакей отворял дверцы кареты; дама под черным вуалем, в черной мантилье, выходила из нее...
Если при создании аккордеона указать параметр multiple: true, то можно раскрывать более одно элемента.
На улице жара стояла страшная, к тому же духота, толкотня, всюду известка, леса, кирпич, пыль и та особенная летняя вонь, столь известная каждому петербуржцу, не имеющему возможности нанять дачу, — всё это разом неприятно потрясло и без того уже расстроенные нервы юноши. Нестерпимая же вонь из распивочных, которых в этой части города особенное множество, и пьяные, поминутно попадавшиеся, несмотря на буднее время, довершили отвратительный и грустный колорит картины. Чувство глубочайшего омерзения мелькнуло на миг в тонких чертах молодого человека. Кстати, он был замечательно хорош собою, с прекрасными темными глазами, темно-рус, ростом выше среднего, тонок и строен. Но скоро он впал как бы в глубокую задумчивость, даже, вернее сказать, как бы в какое-то забытье, и пошел, уже не замечая окружающего, да и не желая его замечать. Изредка только бормотал он что-то про себя, от своей привычки к монологам, в которой он сейчас сам себе признался. В эту же минуту он и сам сознавал, что мысли его порою мешаются и что он очень слаб: второй день как уж он почти совсем ничего не ел.
Но у него недоставало характера явно признать учение добра и уважения к невинности. Тихонько он упивался ее ароматом, но явно иногда приставал к хору циников, трепетавших даже подозрения в целомудрии или уважении к нему, и к буйному хору их прибавлял и свое легкомысленное слово.
Напившись кофею, Нехлюдов пошел в кабинет, чтобы справиться в повестке, в котором часу надо быть в суде, и написать ответ княжне. В кабинет надо было пройти через мастерскую. В мастерской стоял мольберт с перевернутой начатой картиной и развешаны были этюды. Вид этой картины, над которой он бился два года, и этюдов, и всей мастерской напомнили ему испытанное с особенной силой в последнее время чувство бессилия идти дальше в живописи. Он объяснял это чувство слишком тонко развитым эстетическим чувством, но все-таки сознание это было очень неприятно.
Стук рессорного экипажа, тот стук, который так особенно заметен в деревенской глуши, внезапно поразил его слух. Ближе, ближе катились легкие колеса; вот уже послышалось фырканье лошадей... Василий Иванович вскочил и бросился к окошку. На двор его домика, запряженная четверней, въезжала двуместная карета. Не отдавая себе отчета, что бы это могло значить, в порыве какой-то бессмысленной радости, он выбежал на крыльцо... Ливрейный лакей отворял дверцы кареты; дама под черным вуалем, в черной мантилье, выходила из нее...
Ссылки в пунктах меню дополняются атрибутом role="menuitem".
Если у пункта должно быть подменю, то добавьте внурть пункта списка.
Используйте тег для триггера выпадающего меню только в том случае, если пункт сам является самостоятельной ссылкой. Для пункта меню, основная задача которого лишь содержание подменю, используйте текстовый тег, например . Для текстовых пунктов меню не забудьте добавить атрибут tabindex="0", чтобы разрешить фокус на элементе.
Для элемента, который содержит подменю, используйте атрбуты aria-haspopup="true", aria-expanded, чтобы сообщить экранным чтецам о том, что в пункте содержится подменю и оно сейчас скрыто/раскрыто.
Для ссылки меню, которая ведет на текущую страницу, добавьте атрибут aria-current="page".
Функциональные возможности меню
Навигация меню доступна с клавиатуры. Воспользуйтесь клавишей tab, чтобы перейти к следующему пункту меню и сочетанием клавиш shift + tab, чтобы вернуться к предыдущему.
Нажатие клавиши enter или spacebar (пробел) на пункте, содержащим подменю, раскроет его. Повторное нажатие скроет.
Важно! Пункты с подменю, которые являются ссылками, при нажатии клавиши enter переведут вас по этой ссылке. Мы рекомендуем проектировать структуру меню таким образом, чтобы пункты с подменю являлись текстовыми, а не ссылками, во избежание незапланированных переходов по ним при работе с клавиатурой.
Нажатие клавиши стрелка вниз на пункте раскроет его подменю, нажатие стрелка вверх скроет.
Клик вне меню закрывает все его пункты.
Уход клавишей tab с раскрытого пункта меню закрывает его подменю.
Меню поддерживает дополнительные параметры. Так, если при создании виджета указать ему disabledHover: true, то меню отключит раскрытие при hover. Раскрыть подменю можно будет кликом по пункту.
const menu = document.getElementById('#menu');
new Menu(menu, {
disabledHover: true
})
Пример ниже демонстрирует фунционирование меню с такой настройкой:
Вы можете задать время, по прошествии которого меню будет скрыто при hover эфектах.
Обратите внимание, что данная настройка не работает, если выбрано disabledHover: true.
const menu = document.getElementById('#menu');
new Menu(menu, {
hideTimeout: 300
})
Например, hideTimeout: 300 заставит меню закрываться только спустя 300 милисекунд. В некоторых интерфейсах это существенно облегчит работу пользователям с нарушением опорно-двигательного аппарата. Пример:
Необходимо для списка вкладок, элементов вкладок и содержимого вкладок расставить соответствующие роли role="tablist", role="tab", role="tabpabel".
Для вкладок расставить aria-selected атрибуты со значением true у активной вкладки и значнием false у остальных вкладок. Атрибут aria-selected подсказывает браузеру и экранным читалкам, выбрана вкладка или нет.
Для вкладок расставить aria-controls атрибуты со значением атрибута id панели содержимого вкладки. Атрибут aria-controls показывает взимосвязь между вкладкой и ее содержимым.
Для панелей содержимого вкладок установить значение атрибута aria-hidden в true/false в зависимости от того, скрытый ли контент сейчас или нет.
Атрибут aria-labelledby у панелей с содерждимым вкладок озаглавливает эту панель текстом соответствующей вкладки.
Навигация по владкам возможна с помощью клика по нужной вкладке, нажатием клавиши «Enter» по текущей вкладке в фокусе, нажатие стрелок «Влево»/«Вправо» на клавиатуре, когда любой элемент вкладок в фокусе.
Файл стилей оформленный в препроцессоре SASS
–
alert.scss
Сообщение
Сообщение
Скрытый контент
Для того, чтобы пользователь с помощью экранных читалок мог «услышать» изменение состояния скрытого контента, используется атрибут aria-expanded равный true для раскрытого состояния контента и false для закрытого.
Атрибут aria-expanded указывает, что сам элемент или его контент, id которого указан в aria-controls, раскрыт или скрыт.
У контента нужно указать уникальный id.
У элемента, который будет раскрывать контент, нужно указать атрибут aria-controls равный значению id скрываемого контента.
Для раскрытого по-умолчанию контента установите атрибут aria-expanded="true" и уберите hidden утрибут у контента.
Атрибут data-role="collapse" является кастомным и обязателен. По нему JavaScript определяет, что это раскрывающийся список и навешивает обработчики.
Атрибут aria-disabled для тега не является обязательным, так как имеет место быть базовый атрибут disabled, но мы все же рекомендуем указывать его для совместимости с экранными читалками.
Вы можете стилизовать ссылку как кнопку, но в этом случае для disabled состояния атрибут aria-disabled является обязательным.