Bài 9. Biểu tượng và chế độ màu sáng/tối

Bootstrap Icons cung cấp hơn 2.000 biểu tượng miễn phí; Bootstrap 5.3 có sẵn chế độ màu sáng/tối chỉ bằng một thuộc tính. Bài này học cách dùng biểu tượng và xây nút chuyển giao diện tối nhớ lựa chọn người dùng.

35 phútCơ bản
Bạn sẽ học được
  • Nhúng và dùng Bootstrap Icons
  • Bật chế độ tối với data-bs-theme
  • Làm nút chuyển sáng/tối, theo hệ điều hành
  • Dùng màu ngữ nghĩa body, body-secondary, tertiary

Một số khái niệm

Thuộc tính data-bs-theme="dark" đặt trên <html> để cả trang chuyển tối, hoặc trên một phần tử để chỉ phần đó tối. Để chế độ tối đẹp, hãy dùng các lớp màu ngữ nghĩa như bg-body, bg-body-tertiary, text-body-secondary, border thay vì bg-white, text-dark cố định.

Bootstrap Icons

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/Địa chỉ email này đang được bảo vệ từ spam bots, bạn cần kích hoạt Javascript để xem nó. Bạn cần kích hoạt Javascript để xem nó..1/font/bootstrap-icons.min.css">
<i class="bi bi-house"></i>  <i class="bi bi-github"></i>  <i class="bi bi-check-circle-fill text-success fs-3"></i>
<div class="d-flex gap-3 fs-3 mb-2"><i class="bi bi-house"></i><i class="bi bi-book text-success"></i><i class="bi bi-code-slash text-primary"></i><i class="bi bi-database text-warning"></i><i class="bi bi-phone text-danger"></i><i class="bi bi-github"></i></div>
<button class="btn btn-outline-success"><i class="bi bi-play-circle me-1"></i>Bắt đầu học</button>
Kết quả hiển thị

Nút chuyển sáng/tối

<div class="p-3 rounded border bg-body" id="vung" data-bs-theme="light">
  <div class="d-flex justify-content-between align-items-center mb-2"><strong>Giao diện</strong>
    <button class="btn btn-sm btn-outline-secondary" onclick="const v=document.getElementById('vung');v.dataset.bsTheme=v.dataset.bsTheme==='dark'?'light':'dark'"><i class="bi bi-circle-half"></i> Đổi sáng/tối</button></div>
  <div class="card"><div class="card-body"><h6 class="card-title">Thẻ tự đổi màu</h6><p class="card-text text-body-secondary small">Không cần viết CSS cho chế độ tối.</p><span class="badge text-bg-success">Bootstrap 5.3</span></div></div>
</div>
Kết quả hiển thị
// Theo hệ điều hành và nhớ lựa chọn
const luu = localStorage.getItem('theme');
const he = matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
document.documentElement.dataset.bsTheme = luu || he;
function doiTheme() {
  const moi = document.documentElement.dataset.bsTheme === 'dark' ? 'light' : 'dark';
  document.documentElement.dataset.bsTheme = moi;
  localStorage.setItem('theme', moi);
}
Mẹo hay

Đặt đoạn mã đọc theme trong <head> (trước khi trang hiển thị) để tránh hiện tượng nháy trắng khi người dùng đang ở chế độ tối.

Lưu ý

Ảnh có nền trắng và logo màu tối có thể khó nhìn ở chế độ tối; chuẩn bị phiên bản logo sáng hoặc dùng SVG với currentColor.

Thực hành
  1. Thêm biểu tượng cho mọi mục menu và nút.
  2. Thêm nút chuyển sáng/tối ở navbar, lưu vào localStorage.
  3. Kiểm tra trang ở chế độ tối, thay các bg-white cố định bằng bg-body.
Tóm tắt bài học
  • Bootstrap Icons: lớp bi bi-*, chỉnh cỡ bằng fs-*.
  • data-bs-theme="dark|light" trên html hoặc từng phần.
  • Dùng màu ngữ nghĩa body, body-secondary, tertiary.
  • Đọc prefers-color-scheme và localStorage.