Chế độ light on dark on là gì

Dark Mode đang là một xu hướng ngày càng được ưa chuộng và sử dụng phổ biến. Cũng chính vì lý do đó iOS và Android vừa qua đã đều cập nhật giao diện tối [Dark Mode] cho hệ điều hành của mình. 

I am a link, don't click me!

Ý tưởng của phương pháp này là style như bình thường và gọi nó là kiểu mặc định, ví dụ set light-mode là chế độ mặc định, ngoài ra, tạo thêm 1 tập hợp các style cho chế độ còn lại [trong trường hợp này là dark-mode] để trong class mà ta set cho thẻ body.

body {
  color: #222;
  background: #fff;
}
a {
  color: #0033cc;
}

/* Dark Mode styles */
body.dark-theme {
  color: #eee;
  background: #121212;
}
body.dark-theme a {
  color: #809fff;
}

Sau đó dùng thêm JS để chuyển giữa 2 chế độ

const btn = document.querySelector['.btn-toggle'];

// Lắng nghe sự kiện click vào button
btn.addEventListener['click', function[] {
  // Thêm hoặc xóa class dark-theme ở body
  document.body.classList.toggle['dark-theme'];  
}]

Vậy là xong, đơn giản nhỉ!

DEMO

Tách biệt CSS

Thay vì giữ tất cả CSS trong cùng 1 file, chúng ta có thể tách ra 2 file cho 2 chế độ. Ví dụ chế độ light-mode có file light-theme.scss

/* light-theme.css */
body {
  color: #222;
  background: #fff;
}
a {
  color: #0033cc;
}

Và tương tự chúng ta có dark-mode trong dark-theme.css

/* dark-theme.css */
body {
  color: #eee;
  background: #121212;
}
body a {
  color: #809fff;
}

Giờ hãy liên kết kiểu mặc định vào file HTML, ví dụ là light-mode



    
          
          
    

Ta sử dụng ID #theme-link để chuyển giữa 2 chế độ trong JS

const btn = document.querySelector[".btn-toggle"];
const theme = document.querySelector["#theme-link"];

// Lắng nghe sự kiện click vào button
btn.addEventListener["click", function[] {
  // Nếu URL đang là "ligh-theme.css"
  if [theme.getAttribute["href"] == "light-theme.css"] {
    // thì chuyển nó sang "dark-theme.css"
    theme.href = "dark-theme.css";
  } else {
    // và ngược lại
    theme.href = "light-theme.css";
  }
}];

DEMO

Sử dụng CSS custom properties

Chúng ta có thể tận dụng sức mạnh của custom properties trong CSS để tạo chế độ dark-mode. Nó giúp chúng ta tránh phải viết cả bộ style cho từng chế độ, việc thay đổi style cũng dễ và nhanh hơn. Trong file HTML chúng ta vẫn sẽ chuyển class giống như cách đầu tiên.

Còn trong file CSS, hãy xác định các giá trị của chế độ light-mode bằng custom properties

body {
  --text-color: #222;
  --bkg-color: #fff;
  --anchor-color: #0033cc;
}

Giờ đến các giá trị của chế độ dark-mode

body.dark-theme {
  --text-color: #eee;
  --bkg-color: #121212;
  --anchor-color: #809fff;
}

Cuối cùng sử dụng các giá trị mà chúng ta vừa tạo

body {
  color: var[--text-color];
  background: var[--bkg-color];
}
a {
  color: var[--anchor-color];
}

Chúng ta cũng có thể set tất cả các giá trị cho chế độ mặc định trong :root {} và các thuộc tính cho chế độ dark-mode trong :root.dark-mode {}.

Sử dụng Server-side script

Nếu chúng ta đang làm việc với một ngôn ngữ Serer-side, ví dụ như PHP, thì chúng ta có thể sử dụng nó thay vì JS.








  










  

Chủ Đề