Кнопки, бейджи, ссылки
Кнопки
Базовый класс:
<button type="button" class="btn btn-primary">Кнопка</button>
Что даёт: готовый стиль с padding, радиусом, hover.
Варианты цветов
<button class="btn btn-primary">Primary</button>
<button class="btn btn-secondary">Secondary</button>
<button class="btn btn-success">Success</button>
<button class="btn btn-danger">Danger</button>
<button class="btn btn-warning">Warning</button>
<button class="btn btn-info">Info</button>
<button class="btn btn-light">Light</button>
<button class="btn btn-dark">Dark</button>
<button class="btn btn-link">Link</button>
Правило:
- Primary — основное действие.
- Secondary — второстепенное.
- Danger — удаление.
- Success — подтверждение.
Outline-варианты
<button class="btn btn-outline-primary">Primary</button>
<button class="btn btn-outline-secondary">Secondary</button>
<button class="btn btn-outline-danger">Danger</button>
Что даёт: прозрачный фон, рамка цвета.
Правило: outline — для второстепенных действий.
Размеры
<button class="btn btn-primary btn-sm">Маленькая</button>
<button class="btn btn-primary">Обычная</button>
<button class="btn btn-primary btn-lg">Большая</button>
Что даёт:
btn-sm— компактная.btn-lg— крупная.
Кнопки-ссылки
<a href="#" class="btn btn-primary">Ссылка</a>
Правило: <a class="btn"> — визуально кнопка, но переход. Для действий — <button>.
Block-кнопка
<button class="btn btn-primary w-100">На всю ширину</button>
Что даёт: на всю ширину контейнера.
В Bootstrap 5 нет btn-block — используйте w-100.
Активное состояние
<button class="btn btn-primary active">Активная</button>
<button class="btn btn-primary" disabled>Отключена</button>
Правило:
active— визуально нажата.disabled— недоступна.
⚠️ Для <a> используйте aria-disabled="true" и .disabled.
Группа кнопок
<div class="btn-group" role="group">
<button class="btn btn-primary">Левая</button>
<button class="btn btn-primary">Средняя</button>
<button class="btn btn-primary">Правая</button>
</div>
Что даёт: склеенные кнопки без отступов.
Вертикально:
<div class="btn-group-vertical">
<button class="btn btn-primary">Первая</button>
<button class="btn btn-primary">Вторая</button>
</div>
Toolbar
<div class="btn-toolbar" role="toolbar">
<div class="btn-group me-2">
<button class="btn btn-secondary">1</button>
<button class="btn btn-secondary">2</button>
</div>
<div class="btn-group">
<button class="btn btn-secondary">3</button>
</div>
</div>
Что даёт: группы кнопок с разделителями.
Кнопка с иконкой
<button class="btn btn-primary">
<i class="bi bi-check"></i> Сохранить
</button>
<button class="btn btn-icon-only">
<i class="bi bi-x"></i>
</button>
Что даёт: иконка + текст.
Кнопка с dropdown
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown">
Меню
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Действие 1</a></li>
<li><a class="dropdown-item" href="#">Действие 2</a></li>
</ul>
</div>
Что даёт: кнопка с выпадающим меню.
Бейджи
<span class="badge bg-primary">Новый</span>
<span class="badge bg-success">Активен</span>
<span class="badge bg-danger">Ошибка</span>
<span class="badge bg-warning text-dark">Внимание</span>
Что даёт: метка-плашка.
Позиционирование бейджа
На кнопке:
<button class="btn btn-primary position-relative">
Уведомления
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">
5
</span>
</button>
Что даёт: бейдж в углу кнопки.
Pill-бейдж
<span class="badge rounded-pill bg-primary">Пилюля</span>
Бейдж в заголовке
<h1>Заголовок <span class="badge bg-secondary">New</span></h1>
Полезные списки
Список с бейджами:
<ul class="list-group">
<li class="list-group-item d-flex justify-content-between align-items-center">
Входящие
<span class="badge bg-primary rounded-pill">14</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
Отправленные
<span class="badge bg-secondary rounded-pill">2</span>
</li>
</ul>
Классический inbox-паттерн.
Ссылки
Обычная:
<a href="#">Ссылка</a>
Утилиты:
<a href="#" class="link-primary">Primary</a>
<a href="#" class="link-secondary">Secondary</a>
<a href="#" class="link-success">Success</a>
<a href="#" class="link-danger">Danger</a>
<a href="#" class="link-warning">Warning</a>
<a href="#" class="link-info">Info</a>
<a href="#" class="link-dark">Dark</a>
Что даёт: цвет ссылки без CSS.
Убрать подчёркивание
<a href="#" class="text-decoration-none">Без подчёркивания</a>
Hover с underline:
<a href="#" class="text-decoration-none hover-underline">Ссылка</a>
Что даёт: по умолчанию без подчёркивания, при наведении — с.
Ссылка-кнопка
<a href="#" class="btn btn-primary">Кнопка-ссылка</a>
<a href="#" class="btn btn-outline-primary btn-sm">Маленькая</a>
Правило: переход — <a class="btn">. Действие — <button>.
Пример: карточка с действиями
<div class="card">
<div class="card-body">
<h5 class="card-title">
Заголовок
<span class="badge bg-success">Новое</span>
</h5>
<p class="card-text">Описание карточки.</p>
<a href="#" class="btn btn-primary">Открыть</a>
<a href="#" class="btn btn-outline-secondary">В избранное</a>
</div>
</div>
Пример: пагинация
<nav>
<ul class="pagination">
<li class="page-item disabled">
<a class="page-link" href="#">Назад</a>
</li>
<li class="page-item active">
<a class="page-link" href="#">1</a>
</li>
<li class="page-item">
<a class="page-link" href="#">2</a>
</li>
<li class="page-item">
<a class="page-link" href="#">3</a>
</li>
<li class="page-item">
<a class="page-link" href="#">Вперёд</a>
</li>
</ul>
</nav>
Практика
1. Набор кнопок:
<div class="d-flex gap-2">
<button class="btn btn-primary">Сохранить</button>
<button class="btn btn-outline-secondary">Отмена</button>
<button class="btn btn-danger">Удалить</button>
</div>
2. Кнопка с бейджем-уведомлением.
3. Список как inbox с бейджами.
4. Карточка с двумя действиями.
5. Группа кнопок для редактора (Bold, Italic, Underline).
Частые ошибки
1. btn-block:
<button class="btn btn-block"> <!-- Bootstrap 4 -->
Решение: w-100 (Bootstrap 5).
2. <a> без href:
<a class="btn btn-primary">Кнопка</a>
Решение: использовать <button>.
3. data-toggle вместо data-bs-toggle:
dropdown не работает
Решение: data-bs-toggle="dropdown".
4. btn-default:
Устарел
Решение: btn-secondary.
5. Badge без bg:
<span class="badge">New</span> <!-- серый на сером -->
Решение: badge bg-primary.
6. Слишком много кнопок одного цвета:
Пользователь не понимает, где главное
Решение: primary + outline для второстепенных.
7. disabled на <a>:
<a disabled> <!-- не работает -->
Решение: <button> или класс .disabled.
8. <button> без type:
<button> <!-- по умолчанию submit -->
Решение: type="button" внутри форм.
Итог
btn+btn-{variant}— кнопка.btn-outline-*— прозрачный фон.btn-sm,btn-lg— размеры.w-100— на всю ширину.disabled— недоступна.btn-group— группа.badge bg-*— бейдж.rounded-pill— пилюля.link-*— цвет ссылки.text-decoration-none— без подчёркивания.<a>для переходов,<button>для действий.
Дальше — формы и валидация.