Атрибуты <button>

Для стилизации обычно применяются классы, через которые можно задавать оформление отдельных кнопок. К примеру, чтобы изменить вид элемента <button>, к нему добавляем класс .btn. Чтобы увеличить размер кнопки, к ней ещё добавляем класс .medium. В итоге у кнопки может оказаться набор стилевых классов, каждый из которых выполняет свою роль.

<button class="btn medium">Кнопка</button>

Кроме добавления классов мы можем ориентироваться на наличие атрибутов элемента <button> и в зависимости от их значений менять стиль кнопок.

Атрибут type

Этот атрибут определяет роль кнопки: обычная, для отправки формы или для её очистки. В табл. 1 показаны возможные значения атрибута type.

Значение type Описание Пример
button Обычная кнопка.
<button type="button">Кнопка</button>
submit Кнопка для отправки формы.
<form action="handler.php">
  <button>Отправить</button>
</form>
reset Кнопка для очистки формы и возврату полей к исходным значениям.
<form action="handler.php">
  <input type="search" name="s">
  <button>Отправить</button>
  <button type="reset">Очистить</button>
</form>

По умолчанию к type применяется значение submit, поэтому внутри формы у кнопки атрибут type можно опустить.

По внешнему виду кнопки с разными ролями никак не различаются между собой, но через селекторы атрибутов кнопкам можно задать разный стиль. Селекторы для определения стилей кнопок будут следующими:

  • button[type="button"] {…}
  • button[type="submit"] {…}
  • button[type="reset"] {…}

Чтобы не повторять одинаковые стилевые правила, сперва добавляем свойства к селектору button, а затем уже к селекторам с button[type]. Свойства у button наследуются, поэтому переопределить нужно только различающиеся значения. В итоге все кнопки будут оформлены единообразно, различаясь друг с другом цветом.

В примере 1 показана форма для поиска с текстовым полем и двумя кнопками: первая кнопка отправляет введённую текстовую строку на сервер, а вторая очищает форму. Эти кнопки различаются цветом фона, текста и рамки.

Пример 1. Кнопки разных цветов

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Кнопки</title> <style> input[type="search"] { padding: 0.5em; /* Поля вокруг текста */ } button { padding: 0.5em 1.5em; /* Поля по вертикали и горизонтали */ font-size: 0.9em; /* Размер текста */ border: 1px solid #bc8e5c; /* Параметры рамки */ background-color: #fff; /* Цвет фона кнопки */ } button[type="submit"] { background-color: #bc8e5c; /* Цвет фона кнопки */ color: #fff; /* Цвет текста */ } button[type="reset"] { border-color: #676767; /* Цвет рамки */ color: #444; /* Цвет текста */ } </style> </head> <body> <form action="/example/handler.php"> <p><input type="search" placeholder="Поиск по сайту"></p> <p><button type="submit">Искать</button> <button type="reset">Очистить</button></p> </form> </body> </html>

Здесь вокруг кнопки с type="reset" добавлена рамка, что несколько увеличивает размер кнопки. Чтобы все кнопки получились одинаковой высоты, к ним добавляется рамка, цвет которой совпадает с цветом фона.

Вместо изменения цвета, рядом с надписью на кнопке можно показать соответствующую иконку. Элемент <button> позволяет комбинировать изображения с текстом.

<p><button><img src="image/button-cart.svg">Добавить в корзину</button></p>

Альтернативный путь состоит в использовании ::before, он создаёт псевдоэлемент до содержимого самого элемента, в нашем случае, <button>. Для этого псевдоэлемента иконку выводим как фоновую картинку через свойство background (пример 2).

Пример 2. Использование ::before

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Кнопки</title> <style> input[type="search"] { padding: 0.5em; /* Поля вокруг текста */ } button { padding: 0.5em 1.5em; /* Поля по вертикали и горизонтали */ background-color: #f8f7f7; /* Цвет фона кнопки */ color: #202020; /* Цвет текста */ font-size: 0.9em; /* Размер текста */ border: 1px solid #e9e8e8; /* Параметры рамки */ } button[type="submit"]::before, button[type="reset"]::before { content: ''; /* Выводим псевдоэлемент */ display: inline-block; /* Строчно-блочный элемент */ vertical-align: middle; /* Выравнивание по вертикали */ width: 16px; height: 16px; /* Размеры иконки */ margin-right: 1em; /* Расстояние справа */ } button[type="submit"]::before { /* Иконка для кнопки Submit */ background: 0/cover url(/example/image/button-search.svg); } button[type="reset"]::before { /* Иконка для кнопки Reset */ background: 0/cover url(/example/image/button-reset.svg); } </style> </head> <body> <form action="/example/handler.php"> <p><input type="search" placeholder="Поиск по сайту"></p> <p><button type="submit">Искать</button> <button type="reset">Очистить</button></p> </form> </body> </html>

У свойства background из примера указано три параметра:

  • 0 — картинка располагается в левом верхнем углу;
  • cover — картинка масштабируется и вписывается в размеры иконки (они определяются свойствами width и height);
  • url() — адрес картинки.

Атрибут disabled

Атрибут disabled, добавленный к <button>, блокирует кнопку, после чего по такой кнопке нельзя щёлкнуть и она отображается бледнее обычной.

Для управления стилем блокированной кнопкой можно воспользоваться селектором button[disabled], а также более современным методом — псевдоклассом :disabled.

В примере 3 у блокированной кнопки меняется цвет фона, текста и вид курсора при наведении на кнопку.

Пример 3. Использование :disabled

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Кнопки</title> <style> .field { padding: 0.5em; /* Расстояние от текста до края */ } .btn-next { padding: 0.5em 1em; /* Расстояние от текста до края */ } .btn-next { background-color: #0174da; /* Цвет фона */ color: #fff; /* Цвет текста */ border: none; /* Убираем рамку */ border-radius: 0.4em; /* Скругление уголков */ } .btn-next:disabled { background-color: #e5e5e5; /* Цвет фона */ color: #737373; /* Цвет текста */ cursor: not-allowed; /* Меняем вид курсора */ } </style> </head> <body> <p><input class="field" placeholder="Введите своё имя"></p> <p><button disabled class="btn-next">Продолжить</button></p> <script> var field = document.querySelector('.field'); // Поле для ввода имени var next = document.querySelector('.btn-next'); // Кнопка field.addEventListener('input', function() { // Проверяем, что поле не пустое // Если поле пустое, то блокируем кнопку if(field.value != '') next.disabled = false; // Если поле не пустое, то кнопка разблокируется else next.disabled = true; }); </script> </body> </html>

Здесь изначально кнопка заблокирована через атрибут disabled и становится доступной после написания любого символа в текстовом поле. Если текст стереть, то кнопка вернётся к своему заблокированному состоянию.

Итоги

  • У элемента <button> есть два часто используемых атрибута: type и disabled.
  • Атрибут type определяет роль кнопки: обычная кнопка, кнопка для отправки формы и кнопка для возврата введённых в форму данных к исходным значениям.
  • Для стилизации кнопок с разными значениями type применяются селекторы button[type="submit"], button[type="reset"], button[type="button"].
  • Атрибут disabled блокирует кнопку от нажатия — по такой кнопке нельзя щёлкнуть. С помощью JavaScript атрибут можно убирать или добавлять, в зависимости от заданных условий.
  • Стиль заблокированной кнопки меняется через псевдокласс :disabled, для этого используется селектор button:disabled.

Перейти к заданиям

Автор: Влад Мержевич
Последнее изменение: 25.05.2023

Создайте набор кнопок для разных ситуаций: кнопка по умолчанию, кнопка для отправки формы, кнопка для очистки формы, заблокированная кнопка. Их вид показан на рис. 1.

Рис. 1. Кнопки разных типов

<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Кнопки</title> <style> button { padding: 0.5em 1em; /* Расстояние от текста до края */ background-color: #323e4e; /* Цвет фона */ color: #fff; /* Белый цвет текста */ border: none; /* Убираем рамку */ border-radius: 0.3em; /* Радиус скругления */ font-size: 0.9em; /* Размер шрифта */ margin-bottom: 1em; /* Расстояние снизу */ } button[type="submit"] { background-color: #de3a31; /* Кнопка Submit */ } button[type="reset"] { background-color: #bed4df; /* Кнопка Reset */ } button:disabled { background-color: #dfdfdf; /* Заблокированная кнопка */ } </style> </head> <body> <p> <button>Кнопка по умолчанию</button> <button type="submit">Кнопка Submit</button> <button type="reset">Кнопка Reset</button> <button disabled>Заблокированная кнопка</button> </p> </body> </html>

Создайте кнопку с иконкой корзины, показанную на рис. 1.

Рис. 1

Файлы
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Кнопка</title> <style> .btn { padding: 1em 2em; /* Расстояние от текста до края */ background-color: #2d2d2d; /* Цвет фона */ color: #fff; /* Белый цвет текста */ border: none; /* Убираем рамку */ border-radius: 3em; /* Кнопка в виде пилюли */ font-size: 0.8em; /* Размер шрифта */ text-transform: uppercase; /* Все буквы заглавные */ } .btn-cart::before { content: ''; /* Выводим псевдоэлемент */ display: inline-block; /* Строчно-блочный элемент */ vertical-align: middle; /* Выравнивание по вертикали */ width: 16px; height: 16px; /* Размеры иконки */ margin-right: 1em; /* Расстояние справа */ background: 0/cover url(/example/image/button-cart-white.svg); /* Иконка для кнопки Submit */ } </style> </head> <body> <p><button class="btn btn-cart">Добавить в корзину</button></p> </body> </html>