<button>: Елемент кнопки
{{HTMLSidebar}}
Елемент HTML <button>
(кнопка) – інтерактивний елемент, що активується користувачем за допомогою миші, клавіатури, пальця, голосової команди чи іншої допоміжної технології. Бувши активованою, кнопка виконує дію, наприклад, подання форми чи відкриття діалогу.
Усталено кнопки HTML подаються в стилі, що нагадує стиль платформи, на котрій працює користувацький агент, але вигляд кнопок можна змінити за допомогою CSS.
Спробуйте його в дії
Attributes
Атрибути цього елемента включають глобальні атрибути.
autofocus
Цей булів атрибут вказує, що кнопка повинна отримати фокус введення, коли сторінка завантажилась. Лише один елемент в документі може мати такий атрибут.
autocomplete
Цей атрибут
<button>
є нестандартним, специфічним для Firefox. На відміну від інших браузерів, Firefox зберігає динамічний стан вимкненості (англ.) елемента<button>
між завантаженнями сторінки. Встановлення на кнопціautocomplete="off"
вимикає цю функціональність; дивіться ваду Firefox 654072.disabled
Цей булів атрибут не дає користувачеві взаємодіяти з кнопкою: вона не може бути натиснута чи отримати фокус.
Firefox, на відміну від решти браузерів, зберігає динамічний стан вимкненості елемента
<button>
між завантаженнями сторінки. Використовуйте атрибутautocomplete
, щоб контролювати цю функціональність.form
Елемент
<form>
, з яким кнопка повинна бути пов'язана (її форма-власник). Значення цього атрибута мусить дорівнювати значенню атрибутаid
елемента<form>
у тому самому документі. (Якщо цей атрибут не вказаний, то<button>
пов'язується з елементом<form>
, що є її предком, якщо такий є.)Цей атрибут дає змогу пов'язувати елементи
<button>
з елементами<form>
, що знаходяться будь-де в елементі, а не лише тими, в котрих<button>
знаходиться. Також таке пов'язування відкидає зв'язок з елементом<form>
, що є предком<button>
.formaction
URL, що обробляє інформацію, подану кнопкою. Відкидає атрибут
action
форми-власника кнопки. Нічого не робить, якщо форми-власника немає.formenctype
Якщо кнопка є кнопкою подання (вона знаходиться всередині
<form>
чи пов'язана з формою в інакший спосіб, а також не маєtype="button"
), то цей атрибут вказує, як кодувати дані форми при її поданні. Можливі значення:application/x-www-form-urlencoded
: Усталене значення, якщо атрибут не залучено.multipart/form-data
: Використовується для подання елементів<input>
, що мають атрибутtype
зі значеннямfile
.text/plain
: Вказується як поміч при налагодженні; не повинно використовуватись для реального подання форми.
Якщо вказаний цей атрибут, він відкидає атрибут
enctype
форми-власника кнопки.formmethod
Якщо кнопка є кнопкою подання (вона знаходиться всередині
<form>
чи пов'язана з формою в інакший спосіб, а також не маєtype="button"
), то цей атрибут задає метод HTTP, що використовується для подання форми:post
: Дані з форми при надсиланні на сервер включені в тіло запиту HTTP. Використовується, коли форма містить інформацію, котра не повинна бути публічною, типу даних для входу.get
: Дані форми додаються в кінець URLaction
форми, відділені?
, і результівний URL надсилається на сервер. Цей метод слід використовувати, коли форма не має побічних ефектів, наприклад, коли це форма пошуку.
Коли вказаний, то відкидає атрибут
method
форми-власника кнопки.formnovalidate
Якщо кнопка є кнопкою подання, то цей булів атрибут вказує, що форма не повинна бути перевірена при поданні. Якщо вказаний цей атрибут, то він відкидає атрибут
novalidate
форми-власника кнопки.Цей атрибут також доступний на елементах
<input type="image">
й<input type="submit">
.formtarget
Якщо кнопка є кнопкою подання, то цей атрибут є визначеним автором іменем чи стандартизованим ключовим словом, що починається з підкреслення, котре вказує, де показувати відповідь на подання форми. Це
name
чи ключове слово на позначення контексту перегляду (вкладки, вікна чи<iframe>
). Якщо цей атрибут вказаний, то він відкидає атрибутtarget
форми-власника кнопки. Наступні ключові слова мають особливі значення:_self
: Завантажує відповідь у той самий контекст перегляду, що й поточний. Це значення є усталеним, коли атрибут не заданий._blank
: Завантажує відповідь у новий безіменний контекст перегляду – зазвичай нову вкладку чи вікно, залежно від налаштувань браузера користувача._parent
: Завантажує відповідь у контекст перегляду, що є батьківським відносно поточного. Якщо батьківського контексту немає, то результат такий самий, як при використанні значення_self
._top
: Завантажує відповідь у контекст перегляду вищого рівня (тобто такий контекст перегляду, що є предком відносно поточного, а сам батьківського контексту не має). Якщо батьківського контексту немає, то результат такий самий, як при використанні значення_self
.
name
Ім'я кнопки, котре подається в парі зі значенням атрибута
value
як частина даних форми, коли ця кнопка використовується для її подання.popovertarget
Перетворює елемент
<input type="button">
на контрольну кнопку спливного віконця; приймає ідентифікатор елемента спливного елемента, котрим керуватиме, як своє значення. Детальніше дивіться на сторінці Popover API.popovertargetaction
Задає дію, котра буде виконана над спливним елементом, котрим керує контрольний елемент
<input type="button">
. Можливі значення:"hide"
Ця кнопка приховує показане спливне віконце. Якщо спробувати приховати вже приховане спливне віконце, то ніяких дій не буде виконано.
"show"
Ця кнопка показує приховане спливне віконце. Якщо спробувати показати вже показане спливне віконце, то ніяких дій не буде виконано.
"toggle"
Ця кнопка перемикає спливне віконце між показом і приховуванням. Якщо спливне віконце приховане, то воно буде показано; якщо спливне віконце показане, то воно буде приховано. Якщо
popovertargetaction
відсутній, то"toggle"
є усталеною дією, котра буде виконана контрольною кнопкою.
type
Усталена поведінка кнопки. Можливими значеннями є:
submit
: Кнопка подає дані форми на сервер. Це усталена поведінка для пов'язаних з<form>
кнопок, коли цей атрибут не вказаний, або ж якщо він має пусте чи недійсне значення.reset
: Кнопка скидає усі контрольні елементи до їх початкових значень, подібно до <input type="reset">. (Така логіка має тенденцію дратувати користувачів.)button
: Кнопка не має усталеної поведінки й нічого не робить, коли на неї натискають. Можуть бути клієнтські сценарії, що слухають події елемента.
value
Визначає значення, асоційоване з
name
кнопки, коли вона подається разом з даними форми. Це значення передається серверу в параметрах, коли форма подається за допомогою цієї кнопки.
Примітки
Кнопка подання з атрибутом formaction
, але без пов'язаної з нею форми – нічого не робить. Треба задати їй форму-власника, або обгорнувши в <form>
, або задавши її атрибуту form
значення ідентифікатора форми.
Елементи <button>
набагато простіше оформлювати, ніж елементи <input>
. Можна додати HTML всередину (припустімо, <i>
, <br>
чи навіть <img>
), а також використати для складної візуалізації псевдоелементи ::after
і ::before
.
Якщо кнопки не призначені для подання даних форми на сервер, слід пересвідчитись, що вони мають атрибут type
зі значенням button
. Інакше вони спробують подати дані форми й завантажити (відсутню) відповідь, можливо, руйнуючи поточний стан документа.
Хоч <button type="button">
не має усталеної поведінки, сценарії можуть додавати обробники подій, котрі реалізують якусь логіку. Активована кнопка може виконувати програмовані дії, описані мовою JavaScript, як то усунення елемента зі списку.
Приклади
<button name="button">Натисніть мене</button>
Занепокоєння щодо доступності
Кнопки-піктограми
Кнопки, що показують своє призначення лише піктограмою, не мають доступної назви. Доступні назви надають інформацію допоміжним технологіям, наприклад, читачам з екрана, для розбору сторінки та генерування дерева доступності. Потім допоміжні технології використовують дерево доступності для орієнтування та маніпулювання вмістом сторінки.
Щоб надати кнопці-піктограмі доступне ім'я, слід додати всередину елемента <button>
текст, що влучно опише функціональність кнопки.
Приклади
<button name="favorite">
<svg aria-hidden="true" viewBox="0 0 10 10">
<path d="M7 9L5 8 3 9V6L1 4h3l1-3 1 3h3L7 6z" />
</svg>
Додати до улюблених
</button>
Результат
При потребі візуально приховати текст кнопки доступним способом це зробити є використання для її візуального усунення з екрана, але збереження в доступності для допоміжних технологій – комбінації властивостей CSS (англ.).
Проте варто зазначити, що якщо залишити текст кнопки візуально видимим, то це допоможе людям, котрі можуть не бути знайомими зі значенням піктограми чи призначенням кнопки. Це особливо доречно для людей, котрі не є технологічно досвідченими, або тих, хто може мати інакші культурні інтерпретації піктограми, котру використовує кнопка.
- Що таке доступна назва? | The Paciello Group (англ.)
- MDN Розуміння WCAG, пояснення Настанов 4.1
- Розуміння критерію успіху 4.1.2 | W3C розуміння WCAG 2.0 (англ.)
Розмір та суміжність
Розмір
Інтерактивні елементи, як то кнопки, повинні надавати достатньо велику область, щоб їх легко було активувати. Це допомагає різним людям, в тому числі тим, хто має розлади контролю рухів, та тим, хто використовує засоби введення невисокої точності, наприклад, стилус чи пальці. Рекомендований мінімальний інтерактивний розмір – 44×44 пікселів CSS (англ.).
- Розуміння критерію успіху 2.5.5: розмір мішені | W3C розуміння WCAG 2.1 (англ.)
- Розмір мішені та 2.5.5 | Адріан Розеллі (англ.)
- Швидка перевірка: Великі мішені дотику - The A11Y Project (англ.)
Суміжність
Велика кількість інтерактивного вмісту – включно з кнопками – бувши розташованою в тісній суміжності елемент відносно елемента, повинна мати розділовий простір. Такі відступи корисні для людей, котрі мають розлади контролю руху, що можуть випадково активувати не той інтерактивний вміст.
Відступи можуть бути створені за допомогою властивостей CSS, наприклад, margin
.
Інформація про стан ARIA
Щоб описати стан кнопки, коректним атрибутом ARIA є aria-pressed
, а не aria-checked
чи aria-selected
. Щоб дізнатися більше, читайте інформацію про роль кнопки ARIA.
Firefox
Firefox додасть кнопці, що має фокус, дрібний пунктирний контур. Такий контур оголошується за допомогою CSS в списку стилів браузера, але його можна відкинути, щоб додати власний стиль кнопки з фокусом за допомогою button::-moz-focus-inner { }
.
Коли такий вбудований стиль відкинутий, важливо пересвідчитися, що зміни стану при переведенні фокуса на кнопку достатньо значні, щоб люди з розладами зору могли його помітити.
Співвідношення колірного контрасту визначається порівнянням світності тексту кнопки й кольору тла зі тлом, на котрому розташована кнопка. Для виконання нинішніх Настанов з доступності вебвмісту (WCAG) (англ.) потрібне співвідношення 4.5:1 для текстового вмісту і 3:1 для великого тексту. (Великий текст – визначений як 18.66px і грубий
чи більший, або 24px чи більший.)
- WebAIM: Перевірка колірного контрасту (англ.)
- MDN розуміння WCAG, пояснення Настанов 1.4
- Розуміння критерію успіху 1.4.3 | W3C Розуміння WCAG 2.0 (англ.)
Клацання й фокус
Те, чи передасть клацання кнопки <button>
або <input>
цій кнопці фокус, залежить від браузера й операційної системи. Більшість браузерів – це робить, але Safari – ні, і це не помилка.
Технічний підсумок
Категорії вмісту | Потоковий вміст, оповідальний вміст, інтерактивний вміст, перелічений, підписуваний та подаваний пов'язаний з формою елемент, відчутний вміст. |
---|---|
Дозволений вміст | Оповідальний вміст, але не повинно бути інтерактивного вмісту |
Упускання тегів | Немає, обидва: і початковий, і кінцевий теги — обов\'язкові. |
Дозволені батьківські елементи | Будь-який елемент, що приймає оповідальний вміст. |
Неявна роль ARIA |
button
|
Дозволені ролі ARIA |
checkbox , combobox , link , menuitem , menuitemcheckbox , menuitemradio , option , radio , switch , tab
|
Інтерфейс DOM | HTMLButtonElement |
Специфікації
Специфікація |
---|
HTML Standard (HTML) # the-button-element |
Сумісність із браузерами
desktop | mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
button
|
Chrome Full support Yes | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
autocomplete
|
Chrome No support No | Edge No support No | Firefox Full support Yes | Internet Explorer No support No | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Firefox for Android Full support Yes | Opera Android No support No | Safari on iOS No support No | Samsung Internet No support No |
disabled
|
Chrome Full support Yes | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
form
|
Chrome Full support Yes | Edge Full support 16 | Firefox Full support Yes | Internet Explorer No support No | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
formaction
|
Chrome Full support 9 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 10 | Opera Full support 15 | Safari Full support 5.1 | WebView Android Full support 37 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Compatibility unknown; please update this. ? | Safari on iOS Full support 5 | Samsung Internet Full support 1.0 |
formenctype
|
Chrome Full support 9 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 10 | Opera Full support 10.6 | Safari Compatibility unknown; please update this. ? | WebView Android Full support 37 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Compatibility unknown; please update this. ? | Safari on iOS Compatibility unknown; please update this. ? | Samsung Internet Full support 1.0 |
formmethod
|
Chrome Full support 9 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 10 | Opera Full support 15 | Safari Compatibility unknown; please update this. ? | WebView Android Full support 37 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Compatibility unknown; please update this. ? | Safari on iOS Compatibility unknown; please update this. ? | Samsung Internet Full support 1.0 |
formnovalidate
|
Chrome Full support Yes | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
formtarget
|
Chrome Full support Yes | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
name
|
Chrome Full support Yes | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
type
|
Chrome Full support Yes | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |
value
|
Chrome Full support Yes | Edge Full support 12 | Firefox Full support Yes | Internet Explorer Full support Yes | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox for Android Full support Yes | Opera Android Full support Yes | Safari on iOS Full support Yes | Samsung Internet Full support Yes |