Кнопки в HTML: button, input и ссылка-кнопка — что выбрать
Поисковый запрос «как сделать кнопку в HTML» кажется элементарным, но на практике за ним скрывается важный выбор: использовать <button>, <input type='button'> или ссылку <a>, стилизованную под кнопку. От этого зависит доступность, поведение формы, удобство клавиатурной навигации и даже качество кода.
Короткий ответ: что выбрать
В большинстве случаев используйте <button>. Это современный, гибкий и семантически правильный элемент для действий на странице: открыть меню, отправить форму, показать модальное окно, переключить вкладку.
<button>— для действий: отправить, открыть, закрыть, добавить, удалить.<input type='button'>— устаревающий, менее гибкий вариант кнопки.<a href='...'>— для переходов на другую страницу или к разделу страницы.
Базовая кнопка через button
Самый правильный способ сделать кнопку в HTML — использовать тег <button>. Внутрь можно помещать текст, иконки, <span> и другие строчные элементы.
<button type='button'>
Открыть меню
</button>
Обратите внимание на type='button'. Это важная привычка. Если кнопка находится внутри формы и у неё не указан тип, браузер по умолчанию считает её кнопкой отправки формы.
Атрибут type: button, submit и reset
У <button> есть три основных типа:
button— обычная кнопка для JavaScript-действий;submit— отправляет форму;reset— сбрасывает поля формы к исходным значениям.
<form action='/search' method='get'>
<input type='search' name='q' placeholder='Поиск'>
<button type='submit'>Найти</button>
<button type='reset'>Очистить</button>
<button type='button'>Подсказка</button>
</form>
Совет: всегда явно указывайте type. Это избавит от ошибки, когда кнопка «Открыть фильтр» внезапно отправляет форму.
Почему button лучше input type='button'
Кнопку можно создать и через <input>:
<input type='button' value='Открыть меню'>
Но у этого варианта есть минус: содержимое задаётся только через атрибут value. Нельзя удобно добавить иконку, выделить часть текста или вложить дополнительный элемент.
<button type='button'>
<span aria-hidden='true'>☰</span>
<span>Меню</span>
</button>
Поэтому для современной вёрстки почти всегда лучше использовать <button>.
Когда нужна ссылка, а не кнопка
Если элемент ведёт пользователя на другую страницу, к файлу, внешнему сайту или якорю на странице — это ссылка, даже если визуально она выглядит как кнопка.
<a class='button-link' href='/catalog'>
Перейти в каталог
</a>
Не стоит делать переход через кнопку с JavaScript, если можно использовать обычный <a>. Ссылка понятна браузеру, поисковым системам, скринридерам и пользователям, которые открывают страницу в новой вкладке.
Правило выбора: действие или переход
Запомните простую проверку:
- «Что-то происходит на текущей странице?» — используйте
<button>. - «Пользователь куда-то переходит?» — используйте
<a>.
<!-- Правильно: действие -->
<button type='button'>Открыть корзину</button>
<!-- Правильно: переход -->
<a href='/cart'>Перейти в корзину</a>
Доступность: как сделать кнопку понятной
Хорошая HTML-кнопка должна быть понятна не только визуально. Если внутри есть только иконка, добавьте текст для вспомогательных технологий через aria-label.
<button type='button' aria-label='Закрыть окно'>
<span aria-hidden='true'>×</span>
</button>
Если текст уже есть внутри кнопки, aria-label обычно не нужен:
<button type='button'>
Закрыть окно
</button>
Важно: не убирайте видимый фокус через CSS без замены. Пользователь клавиатуры должен видеть, какая кнопка активна.
Отключённая кнопка: disabled
Чтобы сделать кнопку неактивной, используйте атрибут disabled. Такая кнопка не получает фокус и не отправляет форму.
<button type='submit' disabled>
Отправка недоступна
</button>
Не имитируйте отключение только CSS-классом. Если кнопка действительно недоступна, это должно быть отражено в HTML.
Минимальная стилизация кнопки
HTML отвечает за смысл, но на практике кнопку почти всегда стилизуют. Вот простой пример CSS, который не ломает доступность:
.button {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 16px;
border: 0;
border-radius: 8px;
background: #2563eb;
color: #fff;
font: inherit;
cursor: pointer;
}
.button:focus-visible {
outline: 3px solid #93c5fd;
outline-offset: 2px;
}
.button:disabled {
opacity: 0.6;
cursor: not-allowed;
}
<button class='button' type='button'>
Добавить в избранное
</button>
Типичные ошибки новичков
- Использовать ссылку без href как кнопку. Если это действие, нужен
<button>. - Не указывать type у button внутри формы. Кнопка может случайно отправить форму.
- Делать кликабельный div.
<div onclick='...'>не является кнопкой и плохо работает с клавиатурой. - Скрывать focus outline. Это ухудшает доступность.
- Писать непонятный текст. «ОК» хуже, чем «Сохранить изменения».
Плохой и хороший пример
Плохой вариант: элемент выглядит как кнопка, но семантически ей не является.
<div class='button' onclick='openModal()'>
Открыть окно
</div>
Хороший вариант: браузер сразу понимает, что это кнопка.
<button class='button' type='button' onclick='openModal()'>
Открыть окно
</button>
В реальных проектах лучше подключать обработчики из JavaScript-файла, а не писать onclick в HTML, но для короткого примера такой вариант понятен.
Практическая рекомендация
Если вы только осваиваете HTML и вёрстку, заведите правило: сначала определяйте смысл элемента, а уже потом внешний вид. Кнопка — для действия, ссылка — для перехода. Такой подход помогает писать код, который проще поддерживать и развивать.
Если хочется не просто читать отдельные статьи, а собрать прочную систему знаний по HTML, CSS и адаптивной вёрстке, посмотрите практический курс «Вёрстка сайта с нуля 2.0» — он хорошо подходит тем, кто хочет научиться верстать полноценные страницы с нуля.
Итог
Чтобы правильно сделать кнопку в HTML, используйте <button> для действий, <a> для переходов и почти не используйте <input type='button'> без особой причины. Всегда указывайте type, не забывайте про доступность и не превращайте <div> в кнопку. Эти простые правила сразу делают разметку профессиональнее.
-
Создано 26.06.2026 17:01:56
-
Михаил Русаков

Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.