Кратко
Скопировано<button>
создаёт кликабельную кнопку.
Пример
Скопировано<button name="button">Нажми меня</button>
<button name="button">Нажми меня</button>
Как понять
СкопированоС помощью CSS можно настроить внешний вид кнопки <button>
и текста на ней: шрифт, размер, цвет фона и другие параметры. А если ничего не менять, то <button>
будет выглядеть, как стандартная браузерная кнопка.
На кнопку можно поместить любой HTML-элемент.
Как пишется
Скопировано<form> <button>...</button></form>
<form> <button>...</button> </form>
Атрибуты
СкопированоК тегу <button>
можно применить любой универсальный атрибут, а также специфические атрибуты кнопок:
autofocus
— делает так, чтобы при загрузке страницы кнопка уже была выбрана и подсвечена, так что её можно нажать с клавиатуры клавишей Enter.disabled
— делает кнопку неактивной: нажать на неё нельзя, по дефолту отображается серым цветом.form
— связывает кнопку с любой формой в документе через ID. Если ID не указан, то с предшествующей формой.formaction
— задаёт URL-адрес, на который отправляются данные после нажатия на кнопку.formenctype
— определяет формат файла, который пользователь может отправить при нажатии на кнопку. У него есть три значения:application
стандартное значение, вместо пробелов ставится +, а символы, вроде русских букв, кодируются их шестнадцатеричными значениями (например, %D0%9F%D0%B5%D1%82%D1%8F вместо Петя 🤡);/ x - www - form - urlencoded : multipart
— используется, чтобы отправлять файлы, данные при этом не кодируются;/ form - data text
— буквы и другие символы не кодируются, вместо пробелов появляется +./ plain
formmethod
— сообщает браузеру, каким HTTP-методом нужно передавать данные на сервер. Есть два метода:post
— упаковывает данные формы в тело сообщения и передаёт их на сервер, объём данных зависит от настроек сервера;get
— добавляет данные из формы прямо в URL-адрес после знака «?», напримерhttps
здесь пары «имя=значение» разделяются символом «&», а объём данных не может превышать 4 Кб. Если добавить этот атрибут в кнопку, он переопределит атрибут: / / site . ru / doc / ? name = Ivan&age = 27 method
у всей формы.
formnovalidate
— булевый атрибут, работает какnovalidate
для тега<form>
.formtarget
— показывает данные, которые ввёл пользователь. Где браузер откроет результат, зависит от ключевого слова:_self
: показывает данные в текущем окне. Это значение используется по умолчанию._blank
: показывает данные в новом окне браузера — его используют чаще всего._parent
: показывает данные внутри родительского элемента фрейма, а если такого нет, то загружает в текущем окне._top
: отменяет все родительские фреймы и загружает страницу в полном окне браузера. Если родительских фреймов нет, то показывает данные в текущем окне.
name
— уникальное имя кнопки. Передаётся вместе с данными, которые отправляет пользователь.type
— задаёт действие кнопки при нажатии:submit
: отправляет данные на сервер. Это также значение по умолчанию.reset
: удаляет введённые данные из формы.button
: просто кнопка. Действие для неё можно задать через скрипты.
value
— задаёт исходное значение кнопки, которое отправляется на сервер вместе с данными пользователя.
Подсказки
Скопировано💡 Если хочется, чтобы пользователь отправил данные вам на сервер по нажатию кнопки, то <button>
либо должен быть внутри контейнера <form>
, либо связан с формой при помощи атрибутов id
и form
:
<form id="login"> <label> Введите ваш email <input type="email" placeholder="Ваш email"> </label></form><button type="submit" form="login">Отправить</button>
<form id="login"> <label> Введите ваш email <input type="email" placeholder="Ваш email"> </label> </form> <button type="submit" form="login">Отправить</button>
💡 Тег <input>
с атрибутом type
тоже создаёт кнопку, но <button>
проще стилизовать, так как внутрь <button>
можно добавить любой HTML-контент, например, <em>
, <strong>
или <img>
.
💡 Если создаёте кнопку, которая не отправляет ничего на сервер, убедитесь, что задан атрибут type
, иначе может вылезти ошибка.
На практике
Скопированосоветует Скопировано
🛠 Но есть и другое мнение. Я вот использую <button>
крайне редко. Допустим, вам нужно отправить данные формы на сервер. Если нужна обычная квадратная кнопка с надписью «Отправить», то я ставлю <input type
, потому что <input>
проще верстать 🤷♂️
Единственный случай, когда я использую <button>
— это когда нужно отправить данные из формы на сервер, но кнопка нужна посложнее: с картинкой, заливкой или особым шрифтом, например. В обычный <input>
картинку не вставить. А с тегом <a>
не хочется извращаться, потому что он по умолчанию не отправляет данные формы.
🛠 Если вам нужна кнопка вне формы для отправки данных, то проще использовать тег <a>
, то есть обычную ссылку. В href
я прописываю #
, чтобы кнопка никуда не вела, если не надо. Потом навешиваю на неё всякие события: допустим, атрибут, который вызывает всплывающее окно. Тег <a>
намного проще использовать, чем <button>
, в нём больше возможностей по умолчанию, чтобы накидать внутрь каких-нибудь значений и условий, например, сделать не простую кнопку, с тремя картинками в определённой последовательности. У <button>
больше ограничений.
советует Скопировано
🛠 При выборе между кнопкой и ссылкой нужно смотреть исключительно на семантику, а не на внешний вид элемента в дизайне и уж точно не на простоту вёрстки.
В первую очередь вы должны понять, за что отвечает элемент: за перенаправление на другую страницу, раздел сайта, ресурс или выполняет какие-то действия на самой странице (например, отправляет данные формы).
🛠 Если мы по клику на элемент открываем новое окно или перенаправляем пользователя на другую страницу — выбираем тег <a>
, ссылку.
Если мы никуда пользователя не отправляем, а, например, открываем диалоговое окно или листаем слайдер, то это кнопки.
Вадим Макеев в своём докладе «Жми сюда!» сформулировал следующий способ выбора между кнопкой и ссылкой:
- В любой ситуации, где вам нужно выбирать, кнопка это или ссылка, выберите кнопку (
<button>
).- Если вы можете дать какой-то адрес для перенаправления — тогда это ссылка (
<a href
).= ""> - Всегда начинайте с кнопки.
На собеседовании
Скопировано отвечает
СкопированоОщутимая разница между ссылками и кнопками в том, что «активация» элемента при фокусе с клавиатуры происходит по-разному. Для ссылок — клавишей Enter, а для кнопок — пробелом или Enter. Пользователь, привыкший перемещаться по интерфейсу сайта и взаимодействовать с ним с клавиатуры, получит неожиданное поведение при попытке взаимодействия с ложной ссылкой или кнопкой.
Чтобы определить, какой тег использовать, ссылку или кнопку, нужно подумать про ожидаемое поведение при взаимодействии с элементом. Если при нажатии на элемент подразумевается переход на другую страницу, то в коде элемент нужно сделать тегом <a>
, то есть ссылкой. Если при нажатии произойдёт действие в рамках текущей страницы, например, откроется модальное окно с формой входа, то такой элемент нужно сделать тегом <button>
.
С точки зрения доступности у ссылок и кнопок разные роли. У ссылок — link
, у кнопок — button
. Скринридер перед озвучиванием содержимого элемента произносит его роль. Если используете неправильные теги, роли перемешаются и это запутает пользователей скринридеров.