Tùy chỉnh giao diện

Ngay cả việc xây dựng thương hiệu cũng có thể thích ứng. Bạn có thể điều chỉnh cách trình bày trang web của mình cho phù hợp với lựa chọn ưu tiên của người dùng. Nhưng trước tiên, hãy xem cách mở rộng hoạt động xây dựng thương hiệu của trang web để bao gồm cả trình duyệt.

Tuỳ chỉnh giao diện trình duyệt

Một số trình duyệt cho phép bạn đề xuất màu giao diện dựa trên bảng màu của trang web. Giao diện của trình duyệt sẽ điều chỉnh theo màu sắc mà bạn đề xuất. Thêm màu vào phần tử meta có tên là theme-color trong head của các trang.

<meta name="theme-color" content="#00D494">
Trang web Clearleft.com. Trang web Resilient Web Design dot com. Trang web Session.org.
Ba trang web được xem trong trình duyệt Safari. Mỗi hồ sơ có màu giao diện riêng và màu này sẽ xuất hiện trong giao diện trình duyệt.

Bạn có thể cập nhật giá trị của theme-color bằng JavaScript. Nhưng hãy sử dụng sức mạnh này một cách khôn ngoan. Người dùng có thể cảm thấy khó chịu nếu bảng phối màu của trình duyệt thay đổi quá thường xuyên. Hãy nghĩ đến những cách tinh tế để điều chỉnh màu giao diện. Nếu các thay đổi quá đột ngột, người dùng sẽ rời đi vì khó chịu.

Bạn cũng có thể chỉ định một màu chủ đề trong tệp tệp kê khai ứng dụng web. Đây là một tệp JSON chứa siêu dữ liệu về trang web của bạn.

Đường liên kết đến tệp kê khai từ head của tài liệu. Sử dụng phần tử link có giá trị relmanifest.

<link rel="manifest" href="/manifest.json">

Trong tệp kê khai, hãy liệt kê siêu dữ liệu bằng cách sử dụng các cặp khoá/giá trị.

{
  "short_name": "Clearleft",
  "name": "Clearleft design agency",
  "start_url": "/",
  "background_color": "#00D494",
  "theme_color": "#00D494",
  "display": "standalone"
}

Nếu khách truy cập quyết định thêm trang web của bạn vào màn hình chính, thì trình duyệt sẽ sử dụng thông tin trong tệp kê khai để hiển thị một lối tắt phù hợp.

Cung cấp chế độ tối

Nhiều hệ điều hành cho phép người dùng chỉ định lựa chọn ưu tiên cho bảng màu sáng hoặc tối. Vì vậy, bạn nên tối ưu hoá trang web theo lựa chọn ưu tiên về giao diện của người dùng. Bạn có thể truy cập vào lựa chọn ưu tiên này trong một tính năng đa phương tiện có tên là prefers-color-scheme.

@media (prefers-color-scheme: dark) {
  // Styles for a dark theme.
}

Chỉ định màu giao diện bằng tính năng nội dung nghe nhìn prefers-color-scheme trong phần tử meta.

<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#000000" media="(prefers-color-scheme: dark)">

Bạn cũng có thể dùng tính năng prefers-color-scheme cho nội dung nghe nhìn trong SVG. Nếu bạn sử dụng tệp SVG cho biểu tượng trang web, thì tệp này có thể được điều chỉnh cho chế độ tối. Thomas Steiner đã viết về prefers-color-scheme trong biểu tượng yêu thích SVG cho biểu tượng ở chế độ tối.

Tạo giao diện bằng các thuộc tính tuỳ chỉnh

Nếu bạn sử dụng cùng một giá trị màu ở nhiều nơi trong CSS, thì việc lặp lại tất cả các bộ chọn trong một truy vấn phương tiện prefers-color-scheme có thể khá tẻ nhạt.

body {
  background-color: white;
  color: black;
}
input {
  background-color: white;
  color: black;
  border-color: black;
}
button {
  background-color: black;
  color: white;
}
@media (prefers-color-scheme: dark) {
  body {
    background-color: black;
    color: white;
  }
  input {
    background-color: black;
    color: white;
    border-color: white;
  }
  button {
    background-color: white;
    color: black;
  }
}

Sử dụng các thuộc tính tuỳ chỉnh CSS để lưu trữ giá trị màu. Thuộc tính tuỳ chỉnh hoạt động giống như các biến trong ngôn ngữ lập trình. Bạn có thể cập nhật giá trị của một biến mà không cần cập nhật tên của biến đó.

Nếu cập nhật các giá trị của thuộc tính tuỳ chỉnh trong truy vấn nội dung nghe nhìn prefers-color-scheme, bạn sẽ không phải viết tất cả bộ chọn hai lần.

html {
  --page-color: white;
  --ink-color: black;
}
@media (prefers-color-scheme: dark) {
  html {
    --page-color: black;
    --ink-color: white;
  }
}
body {
  background-color: var(--page-color);
  color: var(--ink-color);
}
input {
  background-color: var(--page-color);
  color: var(--ink-color);
  border-color: var(--ink-color);
}
button {
  background-color: var(--ink-color);
  color: var(--page-color);
}

Hãy xem bài viết xây dựng bảng phối màu để biết thêm các ví dụ nâng cao về việc tạo giao diện bằng các thuộc tính tuỳ chỉnh.

Hình ảnh

Nếu đang sử dụng SVG trong HTML, bạn cũng có thể áp dụng các thuộc tính tuỳ chỉnh ở đó.

svg {
  stroke: var(--ink-color);
  fill: var(--page-color);
}

Giờ đây, các biểu tượng sẽ thay đổi màu sắc cùng với các phần tử khác trên trang của bạn.

Nếu muốn giảm độ sáng của hình ảnh chụp khi hiển thị ở chế độ tối, bạn có thể áp dụng bộ lọc trong CSS.

@media (prefers-color-scheme: dark) {
  img {
    filter: brightness(.8) contrast(1.2);
  }
}
Ba bức ảnh ở độ sáng bình thường. Ba bức ảnh có độ sáng thấp hơn một chút.
Hiệu ứng này không rõ rệt, nhưng bạn có thể giảm độ sáng của hình ảnh ở chế độ tối.

Đối với một số hình ảnh, bạn có thể muốn thay thế hoàn toàn hình ảnh đó ở chế độ tối. Ví dụ: bạn có thể muốn hiện một bản đồ có bảng phối màu tối hơn. Sử dụng phần tử <picture> chứa phần tử <source> có truy vấn nội dung nghe nhìn prefers-color-scheme.

<picture>
  <source srcset="darkimage.png" media="(prefers-color-scheme: dark)">
  <img src="lightimage.png" alt="A description of the image.">
</picture>
Hai bản đồ Brooklyn, một bản đồ sử dụng màu sáng và bản đồ còn lại sử dụng màu tối.
Hai phiên bản của cùng một bản đồ, một cho chế độ sáng và một cho chế độ tối.

Biểu mẫu

Các trình duyệt cung cấp một bảng màu mặc định cho các trường trong biểu mẫu. Cho trình duyệt biết rằng trang web của bạn cung cấp cả chế độ tối và chế độ sáng. Nhờ đó, trình duyệt có thể cung cấp kiểu mặc định phù hợp cho các biểu mẫu.

Thêm nội dung này vào CSS của bạn:

html {
  color-scheme: light;
}
@media (prefers-color-scheme: dark) {
  html {
    color-scheme: dark;
  }
}

Bạn cũng có thể dùng HTML. Thêm đoạn mã này vào head của tài liệu:

<meta name="supported-color-schemes" content="light dark">

Sử dụng thuộc tính accent-color trong CSS để tạo kiểu cho hộp đánh dấu, nút chọn và một số trường khác trong biểu mẫu.

html {
  accent-color: red;
}

Giao diện tối thường có màu thương hiệu dịu. Bạn có thể cập nhật giá trị accent-color cho chế độ tối.

html {
  accent-color: red;
}
@media (prefers-color-scheme: dark) {
  html {
    accent-color: pink;
  }
}

Bạn nên sử dụng một thuộc tính tuỳ chỉnh cho việc này để có thể giữ tất cả các khai báo màu ở cùng một nơi.

html {
  color-scheme: light;
  --page-color: white;
  --ink-color: black;
  --highlight-color: red;
}
@media (prefers-color-scheme: dark) {
  html {
    color-scheme: dark;
    --page-color: black;
    --ink-color: white;
    --highlight-color: pink;
  }
}
html {
  accent-color: var(--highlight-color);
}
body {
  background-color: var(--page-color);
  color: var(--ink-color);
}

Cung cấp chế độ tối chỉ là một ví dụ về việc điều chỉnh trang web cho phù hợp với lựa chọn ưu tiên của người dùng. Tiếp theo, bạn sẽ tìm hiểu cách điều chỉnh trang web của mình cho phù hợp với mọi loại yếu tố cần cân nhắc về khả năng hỗ trợ tiếp cận.

Kiểm tra kiến thức của bạn

Kiểm tra kiến thức của bạn về việc tạo giao diện

Để cung cấp màu giao diện ảnh hưởng đến trình duyệt bên ngoài trang web, hãy sử dụng:

CSS
Thông tin về giao diện CSS có thể gây ra hiện tượng nhấp nháy màu thông thường, đây là trải nghiệm không mong muốn của người dùng.
JavaScript
Chỉ khi bạn dùng thẻ này để cập nhật thẻ <meta> "theme-color".
Tệp kê khai ứng dụng web
manifest.json có thể được cung cấp và bao gồm các trường để chỉ định màu giao diện nhằm tạo sắc thái cho giao diện của ứng dụng khi được mở từ màn hình chính của thiết bị di động.
Thẻ <meta> "theme-color"
Ngay khi có thể, trình duyệt có thể nhận thấy màu giao diện này trong thẻ <head>, tránh được các màu sắc không mong muốn.

Để kết nối với lựa chọn ưu tiên của người dùng về giao diện sáng hoặc tối, hãy dùng:

Truy vấn nội dung nghe nhìn (prefers-color-scheme)
Truyền giá trị mà bạn muốn kiểm tra xem có phải là ánh sáng hay bóng tối hay không là bạn có thể bắt đầu.
JavaScript
Sau đó, sử dụng cú pháp truy vấn phương tiện CSS để yêu cầu trạng thái hiện tại của lựa chọn ưu tiên.

Vì vậy, bạn hỗ trợ giao diện tối, nhưng tất cả các thành phần đầu vào của biểu mẫu vẫn có giao diện sáng. Bạn có thể làm gì?

Thêm html { color-scheme: light dark; } vào CSS.
Tín hiệu này từ CSS cho biết các dữ liệu đầu vào của biểu mẫu phải khớp với bảng phối màu của hệ thống.
Thêm <meta name="supported-color-schemes" content="light dark"> vào thẻ <head> HTML.
Tín hiệu này từ HTML cho biết các dữ liệu đầu vào của biểu mẫu phải khớp với bảng phối màu của hệ thống.
Viết một loạt CSS để thay đổi tất cả các giá trị mặc định của đầu vào.
Cách này cũng được nhưng sẽ khó hơn một chút.