Согласно HTML 5.2 :
При указании в элементе [атрибут
hidden
] указывает, что элемент еще не имеет или больше не имеет прямого отношения к текущему состоянию страницы или что он используется для объявления содержимого, которое будет повторно использоваться другими частями страницы, в отличие от прямого доступа пользователя.
Примеры включают список вкладок, где некоторые панели не отображаются, или экран входа в систему, который исчезает после входа пользователя в систему. Мне нравится называть эти вещи “temporally relevant”, т. е. они актуальны в зависимости от времени.
С другой стороны, ARIA 1.1 говорит:
[Состояние
aria-hidden
] указывает, является ли элемент доступным для API.
Другими словами, элементы с aria-hidden="true"
удаляются из дерева доступности , которое уважает большинство вспомогательных технологий, и элементы с
определенно будут доступны дереву. Элементы без атрибута aria-hidden
находятся в состоянии «undefined (default)», что означает, что агенты пользователей должны предоставить его дереву на основе его визуализации. E.g. агент пользователя может решить удалить его, если цвет текста совпадает с цветом фона.
Теперь давайте сравним семантику. Уместно использовать hidden
, но не aria-hidden
, для элемента, который еще не “временно релевантен”, но может стать релевантным в будущем (в этом случае вы будете использовать динамические сценарии для удаления атрибута hidden
). И наоборот, уместно использовать
, но не hidden
, для элемента, который всегда релевантен, но с помощью которого вы не хотите загромождать доступность API; такие элементы могут включать “визуальное чутье”, например значки и/или изображения, которые не являются существенными для пользователя.
Семантика имеет предсказуемые эффекты в браузерах/пользовательских агентах. Причина , по которой я делаю различие, заключается в том, что поведение агента пользователя рекомендуется, но не требуется спецификациями.
Атрибут hidden
должен скрывать элемент от всех презентаций, включая принтеры и программы чтения с экрана (при условии, что эти устройства соответствуют спецификациям HTML). Если вы хотите удалить элемент из дерева специальных возможностей, hidden
сделает свое дело. Однако не используйте hidden
только потому , что вам нужен этот эффект. Сначала спросите себя, является ли hidden
семантически правильным (см. Выше). Если hidden
не является семантически правильным, но вы все равно хотите визуально скрыть элемент, вы можете использовать другие методы, такие как CSS.
Элементы с aria-hidden="true"
не отображаются в дереве специальных возможностей, поэтому, например, программы чтения с экрана не будут их объявлять. Этот метод следует использовать осторожно, так как он обеспечит разные возможности для разных пользователей: доступные агенты пользователей не будут объявлять/отображать их, но они все равно отображаются на визуальных агентах. Это может быть хорошо, если все сделано правильно, но это может привести к злоупотреблению.
Наконец, существует разница в синтаксисе между этими двумя атрибутами.
hidden
—это логический атрибут , то есть, если атрибут присутствует, он является истинным—независимо от того, какое значение он может иметь, — а если атрибут отсутствует, он является ложным. В истинном случае лучше всего либо вообще не использовать значение (
), либо использовать пустое строковое значение ( <div hidden="">...</div>
). Я бы не рекомендовал hidden="true"
, потому что кто-то, читающий/обновляющий ваш код, может сделать вывод, что hidden="false"
будет иметь противоположный эффект, что просто неверно.
aria-hidden
, напротив, является перечисляемым атрибутом , допускающим одно из конечного списка значений. Если атрибут aria-hidden
присутствует, его значение должно быть либо "true"
, либо "false"
. Если вам нужно состояние «undefined (default)», удалите атрибут полностью.
Дальнейшее чтение: https://github.com/чхарвей/chharvey.github.io/wiki/Скрытый контент
Модальное окно. Компоненты · Bootstrap. Версия v4.0.0
Используйте модальный плагин Bootstrap для добавления диалогов на ваш сайт для лайтбоксов, уведомлений пользователей или полностью настраиваемого контента.
Как это работает
До того как начать работу с модальными компонентами Bootstrap, ознакомьтесь со следующей информацией, т.к. параметры недавно изменились.
- Модальные окна сделаны на HTML, CSS и JavaScript. Они располагаются поверх всего документа и блокируют прокрутку тела документа
<body>
, вместо него прокручивая модальные окна - Клик вне модального элемента автоматически закрывает его.
- Bootstrap позволяет активировать лишь один модальный элемент за раз. Вложенные модальные элементы не поддерживаются, т.к. мы думаем, что они принесли бы неудобства.
- Модальные элементы имеют
position: fixed
, что может вызвать иногда их частичную отрисовку. Мы рекомендуем размещать модальные элементы на самом верху страницы, когда возможно, для избегания сбоев и влияния других элементов на корректную работу модальных элементов.modal
. - Опять же – из-за
position: fixed
есть некоторые сложности при использовании их на мобильных устройствах. Смотри документацию поддержки в браузерах. - Из-за семантики HTML5 атрибут
autofocus
не работает с модальными элементами Bootstrap. Чтобы добиться такого же эффекта, используйте собственный JavaScript:
$('#myModal').on('shown.bs.modal', function () {
$('#myInput').trigger('focus')
})
Далее – использование и примеры.
Примеры
Модальные компоненты
Ниже – пример статичного модального компонента (это значит, что его position
и display
«преодолены»). В примере есть заголовок модального компонента, тело (требуется для padding
Modal body text goes here.
<div tabindex="-1" role="dialog"> <div role="document"> <div> <div> <h5>Modal title</h5> <button type="button" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div> <p>Modal body text goes here.</p> </div> <div> <button type="button">Save changes</button> <button type="button" data-dismiss="modal">Close</button> </div> </div> </div> </div>
«Живое» демо
Изменяйте (скрывайте\показывайте) рабочий пример модального элемента по клику на кнопку ниже. Окно сползет вниз и возникнет в верху страницы.
Woohoo, you’re reading this text in a modal!
Запустить модальное окно
<!-- Button trigger modal --> <button type="button" data-toggle="modal" data-target="#exampleModal"> Запустить модальное окно </button> <!-- Modal --> <div tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div role="document"> <div> <div> <h5>Modal title</h5> <button type="button" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div> ... </div> <div> <button type="button" data-dismiss="modal">Close</button> <button type="button">Save changes</button> </div> </div> </div> </div>
Прокрутка длинного содержимого
Когда модальные элементы становятся слишком длинными для зоны видимости девайса, они прокручиваются независимо от самой страницы. Попробуйте пример ниже.
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.
Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.
Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.
Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.
Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.
Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.
Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.
Запустить модальное окно
<!-- Button trigger modal -->
<button type="button" data-toggle="modal" data-target="#exampleModalLong">
Запустить модальное окно
</button>
<!-- Modal -->
<div tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
<div role="document">
<div>
<div>
<h5>Modal title</h5>
<button type="button" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div>
...
</div>
<div>
<button type="button" data-dismiss="modal">Close</button>
<button type="button">Save changes</button>
</div>
</div>
</div>
</div>
Вертикальное центрирование
Добавьте .modal-dialog-centered
в .modal-dialog
чтобы вертикально центрировать модальное окно.
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
Запустить модальное окно
<!-- Button trigger modal -->
<button type="button" data-toggle="modal" data-target="#exampleModalCenter">
Запустить модальное окно
</button>
<!-- Modal -->
<div tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div role="document">
<div>
<div>
<h5>Modal title</h5>
<button type="button" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div>
...
</div>
<div>
<button type="button" data-dismiss="modal">Close</button>
<button type="button">Save changes</button>
</div>
</div>
</div>
</div>
Всплывающие подсказки и возникающие подсказки
Всплывающие подсказки и возникающие подсказки можно размещать как необходимо. Когда модальные элементы закрыты, любые всплывающие подсказки и возникающие подсказки внутри них также автоматически отменяются.
Popover in a modal
This button triggers a popover on click.
Tooltips in a modal
This link and that link have tooltips on hover.
Запустить модальное окно
<div>
<h5>Popover in a modal</h5>
<p>This <a href="#" role="button" title="Popover title" data-content="Popover body content is set in this attribute.">button</a> triggers a popover on click.</p>
<hr>
<h5>Tooltips in a modal</h5>
<p><a href="#" title="Tooltip">This link</a> and <a href="#" title="Tooltip">that link</a> have tooltips on hover.</p>
</div>
Использование сетки
Используйте систему сеток Bootstrap внутри модального элемента, расположив .container-fluid
внутри .modal-body
. После этого используйте обычную систему сеток обычным образом.
.col-md-4
.col-md-4 .ml-auto
.col-md-3 .ml-auto
.col-md-2 .ml-auto
Level 1: .col-sm-9Level 2: .col-8 .col-sm-6
Level 2: .col-4 .col-sm-6
Запустить модальное окно
<div>
<div>
<div>
<div>.col-md-4</div>
<div>.col-md-4 .ml-auto</div>
</div>
<div>
<div>.col-md-3 .ml-auto</div>
<div>.col-md-2 .ml-auto</div>
</div>
<div>
<div>.col-md-6 .ml-auto</div>
</div>
<div>
<div>
Level 1: .col-sm-9
<div>
<div>
Level 2: .col-8 .col-sm-6
</div>
<div>
Level 2: .col-4 .col-sm-6
</div>
</div>
</div>
</div>
</div>
</div>
Комбинируйте содержимое модальных элементов
Есть много кнопок, которые все запускают один модальный элемент со слегка разным содержимым? Используйте event.relatedTarget
и атрибуты data-*
(возможно через jQuery) для изменения содержимого в зависимости от нажатой кнопки.
Ниже – пример демо с кодом HTML и JavaScript. Для информации по relatedTarget
читайте инфо по событиям модальных элементов.
<button type="button" data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo">Open modal for @mdo</button>
<button type="button" data-toggle="modal" data-target="#exampleModal" data-whatever="@fat">Open modal for @fat</button>
<button type="button" data-toggle="modal" data-target="#exampleModal" data-whatever="@getbootstrap">Open modal for @getbootstrap</button>
<div tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div role="document">
<div>
<div>
<h5>New message</h5>
<button type="button" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div>
<form>
<div>
<label for="recipient-name">Recipient:</label>
<input type="text">
</div>
<div>
<label for="message-text">Message:</label>
<textarea></textarea>
</div>
</form>
</div>
<div>
<button type="button" data-dismiss="modal">Close</button>
<button type="button">Send message</button>
</div>
</div>
</div>
</div>
$('#exampleModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget) // Button that triggered the modal
var recipient = button.data('whatever') // Extract info from data-* attributes
// If necessary, you could initiate an AJAX request here (and then do the updating in a callback).
// Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.
var modal = $(this)
modal.find('.modal-title').text('New message to ' + recipient)
modal.find('.modal-body input').val(recipient)
})
Анимация при удалении
Для модальных элементов, которые возникают простым способом, а не появляются плавно, удалите из кода модального элемента класс .fade
.
<div tabindex="-1" role="dialog" aria-labelledby="..." aria-hidden="true">
...
</div>
Динамическая высота
Если высота модального элемента изменяется при его открытии, вам следует вызвать $('#myModal').modal('handleUpdate')
для обновления позиции модального элемента в случае, если возникнет полоса прокрутки.
Доступность
Удостоверьтесь, что добавили в .modal
role="dialog"
и aria-labelledby="..."
, привязанные к названию модального элемента, и role="document"
в .modal-dialog
. Дополнительно вы можете описать диалог модального элемента атрибутом aria-describedby
, добавленным в .modal
.
Встраивание видео из YouTube
Встраивание видео в модальные элементы требует дополнительного JavaScript для запрета автоматического воспроизведения и т.д. Дополнительная информация здесь.
Дополнительные размеры
У модальных элементов есть два размера, доступных к изменению через классы-модификаторы, которые надо размещать в элементе .modal-dialog
. Эти размеры включаются на определенных брейкпойнтах, чтобы избежать появления горизонтальных полос прокрутки на более узких зонах просмотра.
Большое модальное окно Малое модальное окно
<!-- Большое модальное окно -->
<button type="button" data-toggle="modal" data-target=".bd-example-modal-lg">Большое модальное окно</button>
<div tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
<div>
<div>
...
</div>
</div>
</div>
<!-- Малое модальное окно -->
<button type="button" data-toggle="modal" data-target=".bd-example-modal-sm">Малое модальное окно</button>
<div tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div>
<div>
...
</div>
</div>
</div>
Использование
Плагин модальных элементов переключает состояние вашего скрытого содержимого по требованию с помощью атрибутов или JavaScript. Он также добавляет в <body>
класс .modal-open
для преодоления поведения при прокрутке по умолчанию, и создает зону для клика вне модального элемента, нужную для закрытия открытых модальных элементов, класс .modal-backdrop
.
Через атрибуты
Активируйте модальный элемент без JavaScript. Установите data-toggle="modal"
в контролирующем элементе, таком как кнопка, наряду с data-target="#foo"
или href="#foo"
, для обращения к функциональности “toggle” для частного модального элемента.
<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>
Через JavaScript
Вызовите модальный элемент с id=”myModal”
одной строкой JavaScript:
$('#myModal').modal(options)
Параметры
Параметры можно передавать атрибутами или JavaScript. Для использования атрибутов добавьте имя параметра в data-
, например data-backdrop=""
.
Название | Тип | По умолч. | Описание |
---|---|---|---|
backdrop | boolean or the string 'static' |
true | Подключает модальный элемент с затемненным фоном. Еще – задает static для фона, который не закрывает модальный элемент по клику на фоне. |
keyboard | boolean | true | Закрывает модальный элемент по нажатию ESC. |
focus | boolean | true | Фокусируется на модальном элементе по инициализации. |
show | boolean | true | Показывает модальный элемент по инициализации. |
Методы
Асинхронные методы и переходы
Все методы API асинхронны и запускают переход. Они возвращаются функции, вызвавшей их, с началом перехода, но до его конца. Плюс, вызов метода к компоненту, выполняющему переход, будет проигнорирован.
Смотрите документацию JavaScript
.modal(options)
Активирует содержимое как модальный элемент. Принимает object
параметров.
$('#myModal').modal({
keyboard: false
})
.modal('toggle')
Вручную изменяет состояние модального элемента. Возвращается к функции-вызову до того, как модальный элемент показан или скрыт. (т.е. до того, как произойдет событие shown.bs.modal
или hidden.bs.modal
).
$('#myModal').modal('toggle')
.modal('show')
Вручную открывает модальный элемент. Возвращается к функции-вызову до того, как модальный элемент показан. (т.е. до того, как произойдет событие shown.bs.modal
).
$('#myModal').modal('show')
.modal('hide')
Вручную прячет модальный элемент. Возвращается к функции-вызову до того, как модальный элемент показан. (т.е. до того, как произойдет событие hidden.bs.modal
).
$('#myModal').modal('hide')
.modal('handleUpdate')
Вручную обновляет позицию модального элемента, если высота его изменяется во время открытия (т.е. в случае возникновения полосы прокрутки).
$('#myModal').modal('handleUpdate')
.modal('dispose')
Уничтожает модальный элемент.
События
Модальный элемент в Bootstrap имеет несколько событий для встраивания в функциональность. Все события модальных элементов запускаются внутри самих элементов (т.е. в <div>
).
Тип события | Описание |
---|---|
show.bs.modal | Это событие запускается немедленно, когда экземпляр метода show вызван. Если оно вызвано кликом, элемент, на который кликнули, доступен как свойство события relatedTarget . |
shown.bs.modal | Это событие запускается, когда модальный элемент сделан видимым юзеру (будет ждать завершения переходов CSS). Если оно вызвано кликом, элемент, на который кликнули, доступен как свойство события relatedTarget . |
hide.bs.modal | Это событие запускается немедленно, когда экземпляр метода hide вызван. |
hidden.bs.modal | Это событие запускается, когда модальный элемент больше не является скрытым (будет ждать завершения переходов CSS). |
$('#myModal').on('hidden.bs.modal', function (e) {
// do something...
})
Правила использования ARIA в HTML
От автора: Web Accessibility Initiative Accessible Rich Internet Applications Suite или WAI-ARIA, или просто ARIA – набор инструментов и руководящих принципов по повышению доступности контента и приложений. В частности технология включает набор атрибутов для HTML элементов, которые вставляют в них семантическую информацию, считываемую вспомогательными технологиями.
ARIA может быть очень полезным инструментом, однако нужно знать, как и когда использовать ее. Поэтому я составил 5 правил, которые стоит учесть при использовании ARIA в HTML.
1. Используйте семантический HTML5 вместо ARIA
«Если есть возможность использовать встроенный HTML элемент или атрибут с семантикой и нужным вам поведением, используйте его. Не меняйте назначение элементов и не добавляйте ARIA роли, состояния или свойства для достижения доступности.»
Первое правило использования ARIA в HTML – постарайтесь не использовать ARIA в HTML (если в нем нет крайней необходимости). Есть широкий ряд семантических HTML5 элементов с неявным значением, схожих с явно прописанными значениями через ARIA.
По возможности необходимо использовать семантические HTML элементы вместо ARIA атрибутов.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнееНе создавайте кнопку с помощью div и ARIA роли:
<div role=»button»>Click Me</div>
<div role=»button»>Click Me</div> |
Это неправильно. Нужно использовать тег button:
<button>Click Me</button>
<button>Click Me</button> |
2. Не меняйте значение семантических элементов с помощью ARIA ролей
«Не меняйте нативную семантику, если в этом нет крайней необходимости.»
Как я уже говорил, множество семантических HTML элементов имеют неявно заданные значения. Если мы используем button, например, то юзер агент понимает, что это интерактивный элемент (взаимодействие происходит через клик, клавишу enter или пробел), запускающий некое взаимодействие на странице. С другой стороны, если мы используем тег <a>, юзер агент поймет, что взаимодействие с этим элементом (клик или клавиша enter) приведет на другую страницу или в другую часть страницы.
Множество элементов имеют неявную семантику, которую не рекомендуется менять с помощью ARIA ролей.
<h2 role=»button»>Heading Button</h2>
<h2 role=»button»>Heading Button</h2> |
Неправильный метод. Вместо изменения семантики элемента нужно использовать подходящий тег:
<h2><button>Heading Button</button></h2>
<h2><button>Heading Button</button></h2> |
Предпочтительный способ. В крайнем случае, можно применить ARIA роль к элементу без значения.
<h2><span role=»button»>Heading Button</span></h2>
<h2><span role=»button»>Heading Button</span></h2> |
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнее3. Интерактивные ARIA элементы должны быть доступными во всех смыслах
«Все интерактивные ARIA элементы должны иметь управление с клавиатуры.»
ARIA роль на элементе не меняет его смысла. Если нам нужно превратить div в button, необходимо вручную добавить возможности взаимодействия, присущие button.
В руководстве к ARIA есть список возможностей для каждого элемента. Например, правильная кнопка должна удовлетворять следующим требованиям:
должна нажиматься курсором;
должна нажиматься с помощью клавиши enter;
должна нажиматься с помощью пробела.
При работе с ARIA необходимо знать эти требования. Если элемент выглядит, как кнопка, он ей не становится. Нужно принять во внимание все аспекты взаимодействия пользователя с элементом.
4. Используйте подходящие роли для видимых элементов с фокусом
«Не используйте role=»presentation» или aria-hidden=»true» на видимых элементах с фокусом.»
ARIA атрибут role=»presentation» указывает, что элемент можно использовать только в визуальных целях, с ним нельзя взаимодействовать. Атрибут aria-hidden=»true» говорит, что элемент должен быть невидимым.
Нужно знать, к каким элементам применяются данные атрибуты, а также состояния видимости и интерактивности данных элементов. Например, пользователь попробует нажать на обе кнопки в коде ниже, хотя они не могут получить фокус.
<button role=»presentation»>Click Me</button> <button aria-hidden=»true»>Click Me</button>
<button role=»presentation»>Click Me</button> <button aria-hidden=»true»>Click Me</button> |
Неправильный метод. Эти атрибуты необходимо применять к невидимым элементам, а также к элементам без взаимодействия.
<button role=»presentation» tabindex=»-1″>Don’t Click Me</button> <button aria-hidden=»true»>Don’t Click Me</button>
<button role=»presentation» tabindex=»-1″>Don’t Click Me</button> <button aria-hidden=»true»>Don’t Click Me</button> |
5. Интерактивные элементы должны иметь доступные имена
«Все интерактивные элементы должны иметь доступные имена.»
Элементы, с которыми можно взаимодействовать, например, кнопки и ссылки должны иметь «доступные имена». Доступные имена определяются свойством accessible name в Accessibility API. Если значение валидное, значит, имя доступно.
Доступное имя элемента можно задать, исходя из его типа. Например, инпуты формы обычно получают доступное имя из связанного с ними лейбла label (см. добавление лейблов к элементам форм).
<label> Username <input type=»text»> </label> <label for=»password»>Password</label> <input type=»password»>
<label> Username <input type=»text»> </label>
<label for=»password»>Password</label> <input type=»password»> |
Другие элементы, например, кнопки и ссылки могут получить доступные имена из своего текстового контента или атрибута label (см. HTML для скринридеров).
Источник: //bitsofco.de/
Редакция: Команда webformyself.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнееPSD to HTML
Верстка сайта на HTML5 и CSS3 с нуля
СмотретьТираж
Эта страница не завершена.
Этот метод демонстрирует, как использовать атрибут aria-hidden
. Атрибут aria-hidden
может либо раскрывать, либо скрывать неинтерактивный контент из API специальных возможностей.
Добавление aria-hidden = "true"
к элементу удаляет этот элемент и все его дочерние элементы из дерева доступности. Это может улучшить работу пользователей вспомогательных технологий, скрыв:
- чисто декоративное содержание, такое как значки или изображения
- дублированный контент, например повторяющийся текст
- закадровый или свернутый контент, например меню
Согласно четвертому правилу ARIA, aria-hidden = "true"
не следует использовать для фокусируемого элемента.Кроме того, поскольку этот атрибут наследуется дочерними элементами элемента, его не следует добавлять к родительскому элементу или предку фокусируемого элемента.
Использование aria-hidden = "false"
не будет повторно подвергать элемент вспомогательной технологии, если какой-либо из его родительских элементов указывает aria-hidden = "true".
Выбор между
aria-hidden = "true"
, role = "presentation"
и role = "none"
На первый взгляд aria-hidden = "true"
, role = " Presentation "
и role =" none "
атрибуты кажутся похожими, потому что они:
- скрыть контент от вспомогательных технологий
- нельзя использовать на фокусируемом элементе
- нельзя использовать в родительском элементе интерактивного элемента
Несмотря на это сходство, цель каждого атрибута разная.
-
aria-hidden = "true"
удалит весь элемент из API специальных возможностей. -
role = "presentation"
иrole = "none"
удалит семантическое значение элемента, но при этом оставит его доступ к вспомогательным технологиям.
Значения
-
ложь
- (по умолчанию) Элемент предоставляется API специальных возможностей.
-
правда
- Элемент не предоставляется API специальных возможностей.
-
неопределенный
- (по умолчанию) Пользовательский агент определяет, является ли элемент доступным или скрытым от API специальных возможностей.
В приведенном ниже примере абзац не предоставляется API специальных возможностей (например, не будет прочитан вслух программой чтения с экрана).
Дочерние элементы могут быть опущены в API специальных возможностей:
Это не скрыто
!
aria-hidden = "true"
не следует добавлять, если:
- присутствует атрибут HTML
, скрытый
- элемент или предок элемента скрыт с дисплеем
: нет
- Элемент или предок элемента скрыт с видимостью
: скрыто
Во всех трех сценариях нет необходимости добавлять атрибут, поскольку элемент уже удален из дерева доступности.
Согласно HTML 5.2:
Если указано в элементе, [атрибут
hidden
] указывает, что элемент еще не имеет или больше не имеет прямого отношения к текущему состоянию страницы или что он используется для объявления содержимого, которое будет повторно использоваться другими частями. страницы, в отличие от прямого доступа пользователя.
Примеры включают список вкладок, в котором некоторые панели не отображаются, или экран входа в систему, который исчезает после входа пользователя в систему.Мне нравится называть эти вещи «релевантными во времени», то есть они актуальны в зависимости от времени.
С другой стороны, ARIA 1.1 говорит:
[Состояние
aria-hidden
] указывает, доступен ли элемент API специальных возможностей.
Другими словами, элементы с aria-hidden = "true"
удаляются из дерева доступности , что учитывается большинством вспомогательных технологий, а элементы с aria-hidden = "false"
обязательно будут доступны дереву. .Элементы без атрибута aria-hidden
находятся в состоянии «undefined (по умолчанию)», что означает, что пользовательские агенты должны предоставлять его дереву на основе его визуализации. Например. пользовательский агент может решить удалить его, если цвет текста соответствует цвету фона.
Теперь сравним семантику. Уместно использовать hidden
, но , а не aria-hidden
, для элемента, который еще не «актуален во времени», но может стать актуальным в будущем (в этом случае вы должны использовать динамические сценарии для удаления скрытый атрибут
).И наоборот, целесообразно использовать aria-hidden
, но не hidden
, для элемента, который всегда актуален, но которым вы не хотите загромождать API специальных возможностей; такие элементы могут включать в себя «визуальное чутье», например значки и / или изображения, которые пользователю не нужны.
Семантика имеет предсказуемые эффекты в браузерах / пользовательских агентах. Причина, по которой я делаю различие, заключается в том, что поведение пользовательского агента рекомендуется , но не требуется по спецификациям.
Атрибут hidden
должен скрывать элемент из всех презентаций , включая принтеры и программы чтения с экрана (при условии, что эти устройства соответствуют спецификациям HTML). Если вы хотите удалить элемент из дерева доступности , а также из визуальных носителей , подойдет , скрытый
. Однако не используйте hidden
только потому, что вам нужен этот эффект. Сначала спросите себя, является ли hidden
семантически правильным (см. Выше).Если hidden
не является семантически правильным, но вы все равно хотите визуально скрыть элемент, вы можете использовать другие методы, такие как CSS.
Элементы с aria-hidden = "true"
не отображаются в дереве специальных возможностей, поэтому, например, программы чтения с экрана не будут их объявлять. Эту технику следует использовать осторожно, так как она предоставит разным пользователям различный опыт: доступные пользовательские агенты не будут их анонсировать / отображать, но они по-прежнему обрабатываются визуальными агентами. Это может быть хорошо, если все сделано правильно, но есть вероятность злоупотребления.
Наконец, существует разница в синтаксисе между двумя атрибутами.
Дополнительная литература:
https://github.com/chharvey/chharvey.github.io/wiki/Hidden-Content Пример использования Атрибут В большинстве случаев, если контент скрывается от пользователей, этот контент должен быть скрыт от всех пользователей. В этих сценариях Например, следующее скрыто для вспомогательных технологий, но не скрыто визуально с использованием только Использование Для сравнения, следующие примеры полностью скрыты для всех пользователей: ... ... ... Если намерение состоит в том, чтобы использовать Экземпляры, в которых Простым примером может служить ссылка, содержащая значок SVG или шрифта вместе с визуально визуализированным текстом. Значок в этой ситуации будет дублировать текст, поэтому его лучше скрыть для вспомогательных технологий. Если Примечание. В ARIA 1.1 рабочая группа ввела До тех пор, пока реализации не будут включать достаточную поддержку В идеале вам не нужно использовать эти роли слишком часто, поскольку они полностью отрицают семантику любого элемента, к которому они прикреплены, и, надеюсь, не используется элемент со значимой семантикой для целей макета (возможно, используйте Например, используя Чтобы смягчить подобное неправильное использование, из таблиц макетов можно удалить их семантику, установив В качестве альтернативы, использование Приведенная выше разметка показывает, как выглядел бы список из Однако, если неупорядоченный список имеет дочерний элемент С набором ARIA может быть невероятно полезным в обеспечении доступности документов и интерфейсов, особенно при заполнении семантических пробелов в собственном HTML. Однако нужно снова и снова упоминать, что никакая ARIA лучше плохой ARIA. Если вы собираетесь использовать ARIA для расширения своего HTML, вам следует обеспечить его правильное использование. Например, ни Иногда он может просто сделать быстрый шаг назад, чтобы подумать о том, что вы пытаетесь сделать.Для получения дополнительной информации о том, как скрыть контент для всех пользователей, ознакомьтесь с моей предыдущей статьей «Inclusively Hidden». Указывает, доступен ли элемент API специальных возможностей. См. Связанные с отключенной арией. Пользовательские агенты определяют скрытый статус элемента в зависимости от того, отображается ли он, и отображение обычно контролируется CSS. Например, элемент, для свойства display которого установлено значение none, не отображается. Элемент считается скрытым, если он или любой из его предков не отображаются или для их атрибута aria-hidden установлено значение true. Авторы МОГУТ с осторожностью использовать aria-hidden, чтобы скрыть визуально отображаемый контент от вспомогательных технологий, только если действие сокрытия этого контента предназначено для улучшения взаимодействия с пользователями вспомогательных технологий путем удаления избыточного или постороннего контента. Авторы, использующие aria-hidden для скрытия видимого содержимого от программ чтения с экрана, ДОЛЖНЫ гарантировать, что идентичное или эквивалентное значение и функциональность доступны вспомогательным технологиям. Примечание. Авторам рекомендуется проявлять особую осторожность и учитывать широкий спектр ограничений при сокрытии визуально отображаемого контента от вспомогательных технологий.Например, зрячий человек с ограниченными возможностями может использовать вспомогательные технологии с голосовым управлением для доступа к визуальному интерфейсу. Если автор скрывает видимый текст ссылки «Перейти к оформлению» и предоставляет аналогичный, но не идентичный текст ссылки «Проверить сейчас» для API специальных возможностей, пользователь может быть не в состоянии получить доступ к интерфейсу, который он воспринимает с помощью голосового управления. Аналогичные проблемы могут возникнуть и у пользователей программ чтения с экрана. Например, зрячий специалист службы поддержки по телефону может попытаться заставить слепого пользователя программы чтения с экрана щелкнуть ссылку «Перейти к оформлению заказа», которую он не сможет найти с помощью поиска по элементам с опережающим вводом («Перейти к…»). Примечание. На момент написания этой статьи известно, что aria-hidden = ”false” работает в браузерах непоследовательно. По мере улучшения будущих реализаций проявляйте осторожность и тщательно тестируйте, прежде чем полагаться на этот подход. Примечание. Рекомендуется, чтобы авторы определяли видимость элементов вне этого атрибута, а не изменяли видимость и отдельно обновляли это свойство. CSS 2 представил способ выбора значений атрибутов ([css3-selectors]). Пользователи программ чтения с экрана и других вспомогательных технологий нуждаются в информации о поведении и назначении элементов управления в вашем Интернете страница.Встроенные элементы управления HTML, такие как кнопки и радиогруппы, имеют встроенную информацию. Однако для создаваемых вами пользовательских элементов управления вы должны предоставить информацию с помощью ролей и атрибутов ARIA. (Дополнительные сведения см. Во введении в ARIA.) Программы чтения с экрана и другие вспомогательные технологии не объявляют контент, помеченный как скрытый. Применение атрибута Lighthouse отмечает страницы, чей элемент Remove атрибут Одна из причин, по которой разработчики по ошибке скрывают основной элемент, заключается в том, что вспомогательные технологии не могут объявлять основное содержимое страницы, пока открыто модальное диалоговое окно.Однако при скрытии основного текста скрывается все содержимое страницы от пользователей вспомогательных технологий, включая диалог. Лучшее решение — применить атрибут Содержание главной страницы Образец содержимого диалогового окна Язык разметки гипертекста (HTML) — мощный инструмент веб-разработки в сочетании с CSS и JavaScript.Помимо этого, HTML также использует доступное полнофункциональное интернет-приложение (ARIA) , чтобы сделать веб-контент доступным для людей с ограниченными возможностями. Хотя ARIA полезен, есть ключевые слова, общие как для HTML, так и для ARIA, что создает недоумение среди учащихся-любителей. HTML «скрытый»: Атрибут HTML «скрытый» используется, когда часть содержимого устарела и больше не нужна. Он полностью скрывает детали от пользователя. Это семантический индикатор состояния в HTML-коде.Если этот атрибут используется, браузеры не будут отображать элементы, для которых указан атрибут hidden. Скрытый атрибут можно увидеть с помощью некоторого условия или JavaScript, используемого для просмотра скрытого содержимого. Синтаксис: Пример: Вывод: aria-hidden: Использование 'aria-hidden = ”true”' удаляет элемент и его дочерние элементы из дерева доступности в некоторых браузерах вспомогательной технологии, но содержимое будет отображаться на экране. браузер.Согласно четвертому правилу ARIA , использование скрытых характеристик не допускается для фокусируемого элемента, потому что это заставляет пользователя ни на чем не сосредотачиваться. Не используйте aria-hidden = ”true” внутри тега , вся страница будет недоступна для вспомогательных технологий. Синтаксис: Пример: Примечание: Все дочерние элементы aria и hidden указывают на то, что все его дочерние элементы являются скрытыми. не видны ни одному пользователю, как это реализовано разработчиком. Разница между скрытым HTML и скрытым aria: Вниманию читателя! Не прекращайте учиться сейчас. Получите все важные концепции конкурентного программирования с Web Design for Beginners | HTML курс. Это правило применяется к любому элементу со значением атрибута Примечание: Использование Ни один из целевых элементов не является частью последовательной навигации по фокусу, и у них нет потомков в плоском дереве, которые являются частью последовательной навигации по фокусу. В настоящее время нет предположений Некоторые пользовательские агенты обрабатывают значение атрибута Добавляя к элементу Фокусируемый элемент с Контент по умолчанию недоступен. Контент скрыт через CSS. Контент взят из последовательного фокуса с использованием Контент стал нефокусируемым с помощью Контент взят из последовательного фокуса с использованием Фокусируемая ссылка вне экрана. Фокусируемое поле формы, неправильно отключено. Контент, доступный для фокусировки, через Фокусируемый Немного подробностей Игнорировать скрытый
— это логический атрибут , означающий, что если атрибут присутствует, он является истинным, независимо от того, какое значение он может иметь, а если атрибут отсутствует, он является ложным. В истинном случае лучше всего либо вообще не использовать никакого значения (
), либо пустое строковое значение ( hidden = "true"
, потому что кто-то, читающий / обновляющий ваш код, может сделать вывод, что hidden = "false"
будет иметь противоположный эффект, что просто неверно. aria-hidden
, напротив, является перечислимым атрибутом , допускающим одно из конечного списка значений. Если присутствует атрибут aria-hidden
, его значение должно быть либо «true»
, либо «false»
. Если вы хотите состояние «undefined (по умолчанию)», полностью удалите атрибут. Знай свою ARIA: «Скрытый» против «Нет»
aria-hidden = 'true'
и role = 'none / presentation'
.Каждый из них делает с элементами разные вещи, но разработчики иногда путают их цели. Что делает
aria-hidden
? aria-hidden
указывает, доступен ли элемент доступу API .
Если для элемента aria-hidden
установлено значение «истина», элемент и любой из его дочерних элементов, не должен подвергаться доступу API , независимо от того, визуализируется элемент визуально или нет.Установка для атрибута значения «false» должна раскрыть элемент, но, как указано в спецификации ARIA 1.1, могут возникнуть проблемы с использованием aria-hidden = "false
. Установка aria-hidden
без значения по умолчанию приведет к текущему состояние элемента, что означает, что если он в настоящее время подвергается доступности API , то он будет продолжать делать это, где, как если бы элемент не был открыт, он не будет отображаться, если aria-hidden
с пустой строкой. Когда использовать
aria-hidden = "true"
aria-hidden = "true"
может не быть подходящим атрибутом. Например, вместо этого можно использовать CSS, чтобы установить для элемента значение display: none
или visibility: hidden
. Это позволит визуально скрыть контент, а также уберечь его от обнаружения вспомогательными технологиями.В качестве альтернативы можно использовать атрибут HTML hidden
, который будет скрывать контент даже в тех случаях, когда CSS может стать недоступным (например, в режиме чтения в браузере). aria-hidden
самого по себе недостаточно, чтобы полностью скрыть элемент от всех пользователей, если это конечная цель. aria-hidden
.
aria-hidden
таким образом может сбивать с толку зрячих или слабовидящих пользователей, которые также могут полагаться на вспомогательные технологии. Там явно есть контент … почему его не анонсируют?
aria-hidden
, чтобы скрыть контент от всех пользователей, рекомендуется сочетать его использование с одним из методов CSS, показанных выше, или просто использовать вместо него атрибут hidden
. aria-hidden = "true"
следует использовать без визуального скрытия элемента, на котором он установлен, — это когда элемент содержит контент, который можно считать декоративным или дублирующим, для одинаково доступного контента, который отображается. на странице.
Дом
Что делают
role = "none"
и role = "presentation"
? aria-hidden
может использоваться для полного скрытия контента от вспомогательных технологий, изменение роли элемента
на «нет» или «презентация» удаляет семантику элемента, но не скрывает контент от вспомогательных технологий . Кроме того, установка одного из этих значений для роли родительского элемента
не изменяет семантику любого элемента, который может быть дочерним с измененной ролью
, где установка aria-hidden = "true"
для родительского элемента приведет к скрыть всех дочерних элементов этого элемента. role = "presentation"
и role = "none"
предназначены для того же самого. «Нет» — это просто синоним роли
, который был введен в ARIA 1.1. Как указано в спецификации ARIA 1.1: none
как синоним роли презентация
из-за путаницы автора в отношении предполагаемого значения слова «презентация» или «презентационный». Многие люди ошибочно считают role = "presentation"
синонимом aria-hidden = "true"
, и мы полагаем, что role = "none"
передает реальное значение более однозначно. role = "none"
, веб-авторам рекомендуется использовать только роль презентации role = "presentation"
или избыточно в качестве запасного варианта к роли none role = "none presentation"
. Когда использовать
role = "none / presentation"
div
вместо?).Но есть вполне законные случаи, когда нужно использовать эти роли, чтобы отрицать семантику, которая может быть неуместной. элементов таблицы
для целей макета. К счастью, это в значительной степени практика, которая была искоренена из современных веб-практик. Однако это не означает, что до сих пор нет некоторых устаревших веб-приложений, которые были настроены как table
s, хотя на самом деле их не должно было быть. role = "presentation"
в элементы table
, что делает такое содержимое (надеюсь) менее запутанным для синтаксического анализа пользователей программ чтения с экрана. role = "presentation"
можно использовать при постепенном улучшении соответственно размеченного шаблона, если JavaScript не доступен, до ожидаемого шаблона для использования в определенных шаблонах ARIA. Например, панель вкладок:
вкладок
, если бы JavaScript был недоступен, поскольку в такой ситуации это содержимое могло бы отображаться как оглавление. li
, который затем содержит действующий элемент a
, список tablist
предназначен только для использования в качестве элемента оболочки, а затем дочерние элементы tab
предназначены для выполнения самих действий. . Что касается предыдущего примера разметки, это оставляет li
s как ненужное и фактически неподходящее для tablist
. Но именно здесь role = "presentation / none"
становится полезным, так как шаблон разметки можно изменить до следующего:
role = "presentation"
семантика li
не отображается, а вкладки
доступны для доступа API в ожидаемом формате для списка таблиц
. Завершение
aria-hidden = "true"
, ни role = "presentation"
не подходят для скрытия элементов img
. Чтобы скрыть изображение от вспомогательных технологий, все, что нужно сделать, это установить для атрибута img
‘s alt
пустую строку. aria-hidden = "true"
к вашему элементу
скрывает всю вашу веб-страницу от пользователей вспомогательных технологий. Как Lighthouse определяет скрытые элементы тела #
имеет атрибут aria-hidden = "true"
: Как сделать вашу страницу доступной для пользователей вспомогательных технологий #
aria-hidden = "true"
из элемента
вашей страницы. aria-hidden
к элементу контейнера нижнего уровня, когда диалоговое окно открыто. Например, в этом примере скрывается элемент
, который предшествует диалогу в HTML:
…
Заголовок страницы
< / html> Ресурсы #
Последнее обновление: Улучшение статьи Разница между атрибутами «скрытый» и «скрытый» в HTML
<элемент скрыт>
HTML
90 751
000
<
голова
>
<
заголовок
> скрытый атрибут
заголовок
>
<
стиль
{
выравнивание текста: по центру;
}
h2 {
цвет: зеленый;
}
стиль
>
головка
>
0007
<
h2
> GeeksforGeeks
h2
>
<
h3
> скрытый атрибут
000
000
0008 000 9000
<
p
скрыто> Портал информатики для вундеркиндов
p
>
html
>
HTML
>
<
глава
>
<
title
> aria-hidden = "true / flase"
title
>
<
style
>
body {
text-align: center;
}
h2 {
цвет: зеленый;
}
стиль
>
головка
>
<
h2
> GeeksforGeeks
h2
>
<
h5
> aria-hidden
000
000
00080008 / true / flase
<
p
arie-hidden
=
"true"
ks>
портал для компьютерной науки
p
>
body
>
html
>
HTML скрытым aria-hidden Скрытый HTML скрывает все от пользователя. ARIA-hidden, скрывает контент от вспомогательной технологии. Используя HTML hidden, вы можете удалить доступный для фокусировки контент из навигации браузера. При использовании скрытого ARIA мы не удаляем контент из браузера. Вы можете применить стиль CSS для отображения : нет в HTML скрыто. ARIA's aria-hidden, такой сценарий не применяется. Применимость
aria-hidden
true
. aria-hidden = "false"
для потомка элемента с aria-hidden = "true"
не раскрывает этот элемент . aria-hidden = "true"
скрывает себя и все свое содержимое от вспомогательных технологий. Ожидание
Предположения
Поддержка специальных возможностей
aria-hidden
как чувствительное к регистру. Фон
aria-hidden = "true"
, авторы контента гарантируют, что вспомогательные технологии будут игнорировать элемент. Это можно использовать, чтобы скрыть части веб-страницы, которые являются чистым украшением, например шрифты значков, которые не предназначены для чтения с помощью вспомогательных технологий. aria-hidden = "true"
игнорируется как часть порядка чтения, но по-прежнему является частью порядка фокуса, что делает его состояние видимым или скрытым нечетким. Тестовые наборы
Прошло
tabindex
.
отключенного атрибута
.
<ввод отключен aria-hidden = "true" />
aria-hidden
нельзя сбросить, если для предка установлено значение true.
tabindex
.
Ошибка
aria-hidden
нельзя сбросить, если для предка установлено значение true.
tabindex
.
сводный элемент
.
<подробности aria-hidden = "true">
неприменимо
aria-hidden
с нулевым значением.