W3docs

Тег HTML <button>

Тег HTML <button> создаёт кликабельные кнопки. Атрибут type, стили, состояние disabled, доступность и примеры использования.

Тег <button> создаёт кликабельную кнопку на веб-странице. В отличие от кнопки, построенной на теге <input>, внутрь <button> можно помещать насыщенное содержимое — текст, изображения или другие строчные элементы HTML — между открывающим и закрывающим тегами. Именно поэтому сегодня <button> является предпочтительным элементом для большинства кнопок: его легче стилизовать, и он позволяет сочетать иконку с подписью.

На этой странице рассматриваются синтаксис <button>, важнейший атрибут type (и ошибка, возникающая при его отсутствии внутри формы), стилизация, состояние disabled, доступность, а также сравнение <button> с <input>.

Информация

В прошлом некоторые разработчики использовали <input type="button"> вместо <button>, поскольку очень старые версии Internet Explorer отображали <button> непоследовательно. Эта проблема давно устранена — в современных браузерах <button> является рекомендуемым вариантом.

Синтаксис

Тег <button> является парным. Содержимое записывается между открывающим (<button>) и закрывающим (</button>) тегами.

Пример тега HTML <button>:

Пример тега HTML <button>

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <h1>Here will be our button</h1>
    <button type="button">Click</button>
  </body>
</html>

Атрибут type

Атрибут type определяет, что делает кнопка. Существует три значения:

  • submit — отправляет родительскую форму.
  • reset — сбрасывает все элементы управления формой к исходным значениям.
  • button — сам по себе ничего не делает; поведение задаётся через JavaScript.

Самая распространённая ошибка: внутри <form> у <button> без атрибута type по умолчанию устанавливается type="submit". Поэтому кнопка, задуманная как обычная кнопка действия, отправит форму (зачастую перезагрузив страницу) в момент нажатия. Всегда явно указывайте type="button" для кнопок, не предназначенных для отправки формы.

Пример с submit, reset и button:

Пример трёх типов кнопок

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <form action="/submit">
      <label>Name: <input type="text" name="name"></label>
      <button type="submit">Submit</button>
      <button type="reset">Reset</button>
      <button type="button" onclick="alert('Just a button!')">Say hi</button>
    </form>
  </body>
</html>

Submit отправляет форму, Reset очищает текстовое поле, а Say hi только выполняет свой JavaScript, не затрагивая форму.

Использование CSS-стилей

К тегу <button> можно применять стили CSS, чтобы изменить внешний вид кнопки, её размер, цвет, шрифт текста и так далее.

Пример тега <button> с CSS-стилями:

Пример тега HTML <button> со свойствами цвета и шрифта CSS

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .red-text {
        color: red;
      }
      .big-text {
        font: bold 14px Arial;
      }
    </style>
  </head>
  <body>
    Ordinary button
    <button type="button">Add to the recycle bin</button>
    <hr />
    Button with red text
    <button type="button" class="red-text"><b>HTML Book</b></button>
    <hr />
    Button with increased font size
    <button type="button" class="big-text">Download the book</button>
  </body>
</html>

Результат

стили кнопки html

Состояние disabled

Кнопка с атрибутом disabled не может быть нажата или сфокусирована, не вызывает обработчики событий и не отправляет форму. Браузеры также отображают её серым цветом, чтобы пользователи видели, что она неактивна. Это удобно, когда действие временно недоступно — например, до корректного заполнения формы.

Пример отключённой кнопки

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <button type="button">Active button</button>
    <button type="button" disabled>Disabled button</button>
  </body>
</html>

Атрибуты

Совет

У тега <button> нет обязательных атрибутов, однако мы рекомендуем всегда указывать type="button", когда тег используется как обычная (не отправляющая) кнопка, поскольку внутри формы неустановленный type по умолчанию принимает значение submit.

АтрибутыЗначениеОписание
autofocusautofocusУказывает, что кнопка должна получить фокус после загрузки страницы.
disableddisabledДеактивирует кнопку. (Используется, когда кнопка должна стать активной после выполнения какого-либо действия.)
formform_idУказывает одну или несколько форм, к которым относится кнопка. Если кнопка принадлежит нескольким формам, их идентификаторы (form_id) разделяются пробелами.
formactionURLЗадаёт адрес, по которому будут отправлены данные формы после нажатия на кнопку. (Используется только для кнопок с атрибутом type="submit").
formenctypeapplication/x-www-form-urlencodedОпределяет способ кодирования данных формы при её отправке. (Используется только для type="submit"). Все символы кодируются перед отправкой формы (значение по умолчанию).
multipart/form-dataКодирует данные как составной MIME.
text/plainПробелы заменяются знаком «+», но символы не кодируются.
formmethodgetОпределяет метод HTTP-запроса, который будет использоваться при отправке формы (только для type="submit"). Передаёт данные формы в адресной строке («name = value»), которые добавляются к URL страницы после знака вопроса и разделяются амперсандом (&).
postБраузер взаимодействует с сервером и отправляет данные для обработки.
formnovalidateformnovalidateУказывает, что данные формы не должны проверяться при отправке (только для type="submit").
formtarget_blankУказывает, где будет отображён ответ после отправки формы (только для type="submit"). Открывает ответ в новом окне.
_selfОткрывает ответ в текущем окне.
_parentОткрывает ответ в родительском фрейме.
_topОткрывает ответ в окне на всю ширину.
namenameЗадаёт имя кнопки.
typebuttonЗадаёт обычную кнопку.
resetКнопка, очищающая форму от введённых данных.
submitКнопка для отправки данных формы.
valuetextЗадаёт значение кнопки.

Тег <button> также поддерживает глобальные атрибуты и атрибуты событий.

Доступность: задание доступного имени кнопки

Каждая кнопка должна иметь доступное имя — текст, который озвучивает программа чтения с экрана. Для обычной текстовой кнопки именем служит текст между тегами. Проблема возникает с кнопками, содержащими только иконку, где видимый текст отсутствует.

Если внутри кнопки находится только изображение, задайте тегу <img> атрибут alt, описывающий действие, а не картинку. Тогда кнопка возьмёт этот текст в качестве своего имени:

<button type="button">
  <img src="search.png" alt="Search">
</button>

Здесь alt="Search" описывает, что делает кнопка, поэтому программа чтения с экрана объявляет «Search, button».

Если в кнопке нет ни текста, ни изображения с alt — например, иконка нарисована шрифтом иконок или встроенным SVG — добавьте aria-label, чтобы у кнопки было имя:

<button type="button" aria-label="Close menu">
  <span class="icon-close" aria-hidden="true"></span>
</button>

aria-label является доступным именем кнопки; aria-hidden="true" не позволяет декоративной иконке озвучиваться. Обратите внимание, что aria-label и внутренний <img alt> — это разные механизмы; используйте тот, который подходит для разметки, и никогда не оставляйте кнопку с иконкой без одного из них.

Как добавить ссылку к кнопке?

Чтобы создать кликабельную ссылку, выглядящую как кнопка, используйте элемент <a>, стилизованный с помощью CSS. Вкладывать <button> внутрь <a> недопустимо в HTML5. Вот правильный подход:

Как добавить ссылку к кнопке?

<a href="https://example.com" class="button-link">
  Button Label
</a>

В этом примере элемент <a> стилизован под кнопку. При нажатии на него пользователь будет перенаправлен по указанному URL.

<button> и <input type="button">

Кнопку можно создать с помощью <button> или тега <input> (type="button", type="submit" или type="reset"). Они ведут себя похожим образом, но различаются по тому, что могут содержать:

<button><input type="button"> / <input type="submit">
Источник подписиСодержимое между тегамиАтрибут value (только обычный текст)
Насыщенное содержимоеДа — текст, изображения, иконки, другие строчные элементы HTMLНет — только текст
СтилизацияПроще (псевдоэлементы, вложенные элементы)Более ограничена
Закрывающий тегОбязателен (</button>)Отсутствует — это пустой элемент
<!-- Rich content is possible -->
<button type="submit"><img src="check.png" alt=""> Save</button>

<!-- Text-only, set through value -->
<input type="submit" value="Save">

Используйте <button>, когда нужна иконка, форматированный текст или более тонкий контроль над стилями; прибегайте к <input>, когда достаточно простой текстовой подписи.

Практика

Практика
Какой тип по умолчанию получает элемент button внутри формы, если атрибут type не указан?
Какой тип по умолчанию получает элемент button внутри формы, если атрибут type не указан?
Was this page helpful?