Кратко
Скопировано<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. Скринридер перед озвучиванием содержимого элемента произносит его роль. Если используете неправильные теги, роли перемешаются и это запутает пользователей скринридеров.