Bài 4. Nút, badge, alert và card

Bài này học bốn thành phần dùng nhiều nhất: nút với các màu, kích thước, nhóm nút; huy hiệu (badge); hộp thông báo (alert) có nút đóng; và thẻ (card) để trình bày sản phẩm, bài viết, khóa học.

50 phútCơ bản
Bạn sẽ học được
  • Tạo nút đặc, nút viền, kích thước, trạng thái
  • Nhóm nút, nút có biểu tượng
  • Dùng badge, alert và alert có thể đóng
  • Dựng card: ảnh, tiêu đề, nội dung, chân thẻ; lưới card đều nhau

Một số khái niệm

Thành phần Bootstrap theo quy ước lớp gốc + lớp biến thể: btn + btn-primary + btn-lg; alert + alert-warning; card với các phần card-body, card-title, card-text, card-footer.

Nút

<div class="container">
  <div class="mb-2"><button class="btn btn-primary">Primary</button> <button class="btn btn-success">Success</button> <button class="btn btn-danger">Danger</button> <button class="btn btn-link">Link</button></div>
  <div class="mb-2"><button class="btn btn-outline-primary">Viền</button> <button class="btn btn-outline-success btn-sm">Nhỏ</button> <button class="btn btn-warning btn-lg">Lớn</button> <button class="btn btn-secondary" disabled>Vô hiệu</button></div>
  <div class="btn-group mb-2"><button class="btn btn-outline-dark">Ngày</button><button class="btn btn-outline-dark active">Tuần</button><button class="btn btn-outline-dark">Tháng</button></div>
  <div><button class="btn btn-success"><i class="bi bi-download"></i> Tải xuống</button> <button class="btn btn-primary" type="button" disabled><span class="spinner-border spinner-border-sm"></span> Đang lưu...</button></div>
  <div class="d-grid gap-2 mt-2"><button class="btn btn-dark">Nút rộng hết hàng (d-grid)</button></div>
</div>
Kết quả hiển thị

Badge và alert

<div class="container">
  <h5>Tin nhắn <span class="badge bg-danger rounded-pill">4</span></h5>
  <div class="alert alert-success"><i class="bi bi-check-circle"></i> Đã lưu bài làm thành công.</div>
  <div class="alert alert-warning alert-dismissible fade show" role="alert">
    <strong>Lưu ý!</strong> Hạn nộp bài còn 2 ngày.
    <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Đóng"></button>
  </div>
</div>
Kết quả hiển thị

Nút đóng hoạt động nhờ tệp JS bundle và thuộc tính data-bs-dismiss="alert", không cần viết JavaScript.

Card và lưới card

<div class="container">
  <div class="row row-cols-1 row-cols-sm-3 g-3">
    <div class="col"><div class="card h-100 shadow-sm">
      <img src="https://picsum.photos/seed/c1/400/220" class="card-img-top" alt="">
      <div class="card-body"><span class="badge text-bg-success mb-2">Cơ bản</span><h6 class="card-title">HTML và CSS</h6><p class="card-text small text-body-secondary">Dựng trang web đầu tiên.</p></div>
      <div class="card-footer bg-transparent d-flex justify-content-between align-items-center"><small>22 bài</small><a href="#" class="btn btn-sm btn-success">Học</a></div></div></div>
    <div class="col"><div class="card h-100 shadow-sm border-primary">
      <img src="https://picsum.photos/seed/c2/400/220" class="card-img-top" alt="">
      <div class="card-body"><span class="badge text-bg-primary mb-2">Phổ biến</span><h6 class="card-title">Bootstrap 5</h6><p class="card-text small text-body-secondary">Giao diện nhanh, responsive, có sẵn thành phần.</p></div>
      <div class="card-footer bg-transparent d-flex justify-content-between align-items-center"><small>12 bài</small><a href="#" class="btn btn-sm btn-primary">Học</a></div></div></div>
    <div class="col"><div class="card h-100 shadow-sm">
      <img src="https://picsum.photos/seed/c3/400/220" class="card-img-top" alt="">
      <div class="card-body"><span class="badge text-bg-info mb-2">Mới</span><h6 class="card-title">Tailwind CSS</h6><p class="card-text small text-body-secondary">Thiết kế bằng lớp tiện ích.</p></div>
      <div class="card-footer bg-transparent d-flex justify-content-between align-items-center"><small>12 bài</small><a href="#" class="btn btn-sm btn-success">Học</a></div></div></div>
  </div>
</div>
Kết quả hiển thị

h-100 trên card giúp các thẻ cùng hàng cao bằng nhau; card-footer luôn nằm đáy.

Mẹo hay

Liên kết trông như nút: dùng <a class="btn btn-primary" href="/...">; còn hành động trên trang (mở modal, gửi form) dùng thẻ button.

Lưu ý

Màu nút cần có ý nghĩa nhất quán: primary cho hành động chính, danger cho xóa; tránh trang có quá nhiều nút cùng màu chính.

Thực hành
  1. Tạo thanh công cụ gồm nhóm nút Ngày/Tuần/Tháng và nút Xuất có biểu tượng.
  2. Hiện alert thành công có nút đóng sau khi gửi form.
  3. Dựng lưới 6 thẻ khóa học đều nhau, responsive.
  4. Tạo thẻ hồ sơ giảng viên có ảnh tròn, tên, học vị, nút liên hệ.
Tóm tắt bài học
  • btn + màu + kích thước; btn-outline-*, btn-group, d-grid.
  • badge, alert, alert-dismissible với data-bs-dismiss.
  • card-img-top, card-body, card-title, card-footer.
  • row-cols + h-100 cho lưới thẻ đều nhau.