Thiết kế ứng dụng

Chương này tập trung vào một số khía cạnh quan trọng của việc hiển thị nội dung bên ngoài thẻ trình duyệt.

Cửa sổ

Các hệ điều hành khác nhau có ý tưởng khác nhau về cửa sổ ứng dụng là gì. Ví dụ: trên iPhone, một ứng dụng luôn chiếm 100% màn hình. Trên Android và iPad, các ứng dụng thường chạy ở chế độ toàn màn hình nhưng có thể chia sẻ màn hình giữa hai ứng dụng. Tuy nhiên, chỉ có một phiên bản ứng dụng được mở tại một thời điểm. Ngược lại, trên thiết bị máy tính, một ứng dụng có thể mở nhiều phiên bản cùng một lúc. Ứng dụng này chia sẻ không gian màn hình có sẵn với tất cả các ứng dụng đang mở khác. Bạn có thể đổi kích thước và định vị từng phiên bản ứng dụng ở vị trí bất kỳ trên màn hình, thậm chí là chồng chéo các ứng dụng khác.

Biểu tượng

Chúng tôi nhận ra các ứng dụng qua biểu tượng của ứng dụng. Biểu tượng đó xuất hiện khi bạn tìm kiếm ứng dụng, trong phần cài đặt, ở bất cứ nơi nào bạn khởi chạy ứng dụng và ở nơi bạn thấy ứng dụng đang chạy.

Những quốc gia/khu vực này bao gồm:

  • Màn hình chính (iOS, iPadOS, Android).
  • Trình chạy ứng dụng (macOS, Android).
  • Trình đơn Khởi động hoặc Trình đơn ứng dụng (Windows, ChromeOS, Linux).
  • Thanh tác vụ, thanh tác vụ hoặc bảng điều khiển đa nhiệm vụ (tất cả hệ điều hành).

Khi tạo biểu tượng cho Ứng dụng web tiến bộ đảm bảo biểu tượng của ứng dụng không phụ thuộc vào nền tảng vì mỗi hệ điều hành đều có thể kết xuất biểu tượng và áp dụng các mặt nạ hình dạng riêng cho chúng, như trong hình dưới đây.

Biểu tượng PWA có nhiều hình dạng cho từng nền tảng.

Tuỳ chỉnh giao diện cho ứng dụng

Bạn có thể tuỳ chỉnh kiểu ứng dụng trong PWA của mình theo nhiều cách, trong đó có:

  • Màu giao diện: xác định màu của thanh tiêu đề của cửa sổ trên màn hình và màu của thanh trạng thái trên thiết bị di động. Khi sử dụng thẻ meta, bạn có thể có các giao thức khác nhau, chẳng hạn như chế độ tối hoặc sáng và các chế độ này sẽ được sử dụng dựa trên lựa chọn ưu tiên của người dùng.
  • Màu nền: xác định màu của cửa sổ trước khi ứng dụng và CSS của ứng dụng được tải.
  • Màu nhấn: xác định màu của các thành phần tích hợp sẵn trong trình duyệt, chẳng hạn như các thành phần điều khiển biểu mẫu.
Một ứng dụng web tiến bộ (PWA) trên máy tính hiển thị giao diện và màu nhấn, còn màn hình chờ của PWA Android hiển thị giao diện và màu nền.
Một ứng dụng web tiến bộ (PWA) trên máy tính hiển thị giao diện và màu nhấn, còn màn hình chờ của PWA Android hiển thị giao diện và màu nền.

Chế độ hiển thị

Bạn có thể xác định loại trải nghiệm cửa sổ mà mình muốn cho Ứng dụng web tiến bộ. Có ba cách để bạn lựa chọn:

  • Toàn màn hình
  • Độc lập
  • Giao diện người dùng tối thiểu

Trải nghiệm toàn màn hình

Chế độ toàn màn hình phù hợp với những trải nghiệm sống động, chẳng hạn như trò chơi, thực tế ảo hoặc thực tế tăng cường. Ứng dụng này hiện chỉ có trên các thiết bị Android và ẩn thanh trạng thái cũng như thanh điều hướng, để PWA của bạn chiếm 100% màn hình cho nội dung của bạn.

Trên máy tính và iPadOS, chúng tôi không hỗ trợ PWA toàn màn hình; tuy nhiên, bạn có thể dùng API toàn màn hình từ trong PWA để hiển thị ứng dụng ở chế độ toàn màn hình theo yêu cầu của người dùng.

Phiên bản độc lập

Đây là lựa chọn phổ biến nhất cho Ứng dụng web tiến bộ (chế độ độc lập) hiển thị PWA của bạn trong một cửa sổ tiêu chuẩn của hệ điều hành mà không có giao diện người dùng điều hướng trên trình duyệt nào. Cửa sổ này cũng có thể bao gồm trình đơn do trình duyệt điều khiển, nơi người dùng có thể:

  • Sao chép URL hiện tại.
  • Xem, áp dụng hoặc tắt các tiện ích cho trình duyệt.
  • Xem và thay đổi các quyền.
  • Kiểm tra máy chủ gốc hiện tại và chứng chỉ SSL.

Thanh tiêu đề cũng có thể cho thấy các quyền và mức sử dụng phần cứng thay thế thanh địa chỉ hoặc thanh URL khi PWA hiển thị trong thẻ.

Một PWA được cài đặt với Microsoft Edge trên máy tính đang hiển thị trình đơn của ứng dụng này. Một PWA được cài đặt với Google Chrome trên máy tính hiển thị trình đơn thả xuống và biểu tượng trình bổ trợ.
Những hình ảnh trên cho thấy cách PWA hiển thị ở chế độ độc lập trên máy tính trong Microsoft Edge và Chrome.

Trên thiết bị di động, một trải nghiệm PWA độc lập sẽ tạo một màn hình chuẩn hiển thị thanh trạng thái để người dùng vẫn có thể xem được thông báo, thời gian và mức pin. Thường thì trình duyệt không có trình đơn do trình duyệt kiểm soát, ví dụ như trải nghiệm độc lập trên máy tính.

Thiết bị iOS hiển thị một ứng dụng độc lập.

Một số trình duyệt trên Android tạo thông báo cố định và ở chế độ im lặng trong khi PWA đang chạy ở nền trước để người dùng có thể sao chép URL hiện tại hoặc các lựa chọn khác.

Thông báo Android do Chrome hiển thị, trong đó cho thấy một số thao tác đối với PWA đang hoạt động.

Giao diện người dùng tối giản

Chế độ này dành cho các Ứng dụng web tiến bộ trên hệ điều hành Android và máy tính. Khi bạn sử dụng, trình duyệt kết xuất PWA của bạn sẽ hiển thị một giao diện người dùng tối giản để giúp người dùng thao tác trong ứng dụng.

Trên Android, bạn sẽ thấy một thanh tiêu đề kết xuất phần tử <title> hiện tại và nguồn gốc kèm theo một trình đơn thả xuống nhỏ. Trên máy tính, bạn sẽ thấy một bộ nút trên thanh tiêu đề giúp bạn thao tác, bao gồm cả nút quay lại và một nút điều khiển hoán đổi giữa thao tác dừng và tải lại, dựa trên trạng thái tải hiện tại.

Giao diện người dùng tối thiểu trên máy tính để bàn trên Microsoft Edge có nút quay lại và nút tải lại
Trên Android, các trình duyệt sử dụng thanh điều hướng theo chủ đề chỉ đọc cho giao diện người dùng tối thiểu, như tại đây là Firefox và Chrome

Tối ưu hoá thiết kế cho máy tính

Khi bạn thiết kế một Ứng dụng web tiến bộ để hoạt động trên máy tính, bạn cần phải suy nghĩ về khả năng vô hạn cho kích thước cửa sổ so với việc ở trong thẻ của trình duyệt hoặc dưới dạng một ứng dụng trong hệ điều hành trên thiết bị di động.

Trong Chương 3, chúng tôi đã đề cập đến chế độ thu nhỏ: ứng dụng dành cho máy tính có thể có kích thước nhỏ tới 200 x 100 pixel. Cửa sổ này sẽ dùng nội dung của phần tử <title> trong HTML làm tiêu đề cho cửa sổ. Nội dung đó cũng được hiển thị khi bạn thay thế thẻ giữa các ứng dụng và ở những nơi khác.

Hãy chú ý đến phần tử <title> trong HTML và xem xét lại cách bạn sử dụng phần tử đó. <title> không chỉ phục vụ cho hoạt động SEO hay chỉ hiển thị các ký tự đầu tiên trong thẻ của trình duyệt; nó sẽ là một phần trong trải nghiệm người dùng của cửa sổ màn hình độc lập.

Các phương pháp hay nhất về CSS

Mọi trải nghiệm của bạn về bố cục, thiết kế và ảnh động của CSS đều hợp lệ khi nội dung của bạn hiển thị trong một giao diện độc lập. Tuy nhiên, có một số mẹo và thủ thuật giúp mang đến trải nghiệm tốt hơn cho một cửa sổ độc lập.

Truy vấn về nội dung nghe nhìn

Truy vấn nội dung nghe nhìn đầu tiên mà bạn có thể tận dụng trong PWA là thuộc tính display-mode chấp nhận các giá trị browser, standalone, minimal-ui hoặc fullscreen.

Truy vấn đa phương tiện này áp dụng các kiểu khác nhau cho từng chế độ. Ví dụ: bạn có thể chỉ hiển thị lời mời cài đặt khi ở chế độ trình duyệt hoặc chỉ hiển thị một phần thông tin cụ thể khi người dùng sử dụng ứng dụng của bạn từ biểu tượng hệ thống. Điều này có thể bao gồm việc thêm nút quay lại để sử dụng khi ứng dụng của bạn chạy ở chế độ độc lập.

/* It targets only the app used within the browser */
@media (display-mode: browser) {
}
/* It targets only the app used with a system icon in standalone mode */
@media (display-mode: standalone) {
}
/* It targets only the app used with a system icon in all mode */
@media (display-mode: standalone), (display-mode: fullscreen), (display-mode: minimal-ui) {
}

Trải nghiệm trong ứng dụng

Khi sử dụng PWA đã cài đặt, người dùng mong đợi hoạt động của ứng dụng. Mặc dù không dễ xác định ý nghĩa, nhưng hành vi mặc định của web không mang lại trải nghiệm tốt nhất trong một số trường hợp.

Lựa chọn của người dùng

Người dùng thường có thể chọn nội dung bằng chuột hoặc con trỏ hay cử chỉ chạm và giữ. Mặc dù hữu ích cho nội dung, nhưng chế độ này không mang lại trải nghiệm tốt nhất cho các mục điều hướng, trình đơn và nút trong PWA của bạn.

Một PWA tính toán để bạn có thể chọn mọi nút tương tác, chẳng hạn như số.

Do đó, bạn nên tắt lựa chọn của người dùng trên các phần tử này bằng user-select: none và phiên bản tiền tố -webkit- của đó:

.unselectable {
   user-select: none;
}

Màu nhấn

Trong PWA, bạn có thể xác định màu sắc phù hợp với thương hiệu trong các thành phần điều khiển biểu mẫu HTML bằng cách sử dụng tài sản accent-color.

Phông chữ hệ thống

Nếu muốn một phần tử (chẳng hạn như hộp thoại hoặc thông báo) khớp với phông chữ mặc định trên nền tảng của người dùng, thì bạn có thể sử dụng bộ phông chữ sau:

selector {
  font-family: -apple-system, BlinkMacSystemFont,
    "Segoe UI", system-ui, Roboto, Oxygen-Sans, Ubuntu, Cantarell,
    "Helvetica Neue", sans-serif;
}

Kéo để làm mới

Các trình duyệt hiện đại dành cho thiết bị di động (chẳng hạn như Google Chrome và Safari) có tính năng làm mới trang khi người dùng kéo xuống. Trên một số trình duyệt, chẳng hạn như Chrome trên Android, hành vi đó cũng được bật trên các PWA độc lập.

Bạn có thể muốn vô hiệu hoá tác vụ này. Ví dụ: khi bạn cung cấp tính năng quản lý cử chỉ hoặc thao tác làm mới của riêng mình, hoặc nếu có khả năng người dùng vô tình kích hoạt thao tác đó.

Bạn có thể tắt hành vi này bằng cách sử dụng overscroll-behavior-y: contain:.

  body {
    overscroll-behavior-y: contain;
  }

Khu vực an toàn

Một số thiết bị không có màn hình hình chữ nhật không bị che khuất; thay vào đó, màn hình của thiết bị có thể có hình dạng khác, chẳng hạn như hình tròn hoặc chứa một số phần của màn hình không sử dụng được, chẳng hạn như tai thỏ của iPhone 13. Trong những trường hợp này, một số trình duyệt sẽ hiển thị các biến môi trường cùng với các vùng an toàn có thể hiển thị nội dung.

Ở trên cùng là một thiết bị dạng rãnh nằm ngang với khung nhìn tiêu chuẩn cho thấy các khu vực chưa được kết xuất ở hai bên; ở dưới cùng, một thiết bị có quyền truy cập toàn bộ khung nhìn nhờ ViewModel-fit=Cover.

Nếu bạn muốn toàn quyền truy cập vào màn hình, thậm chí cả khu vực vô hình để kết xuất màu hoặc hình ảnh của mình, hãy thêm viewport-fit=cover vào nội dung của thẻ <meta name="viewport">. Sau đó, hãy dùng các biến môi trường safe-area-inset-* để mở rộng nội dung của bạn một cách an toàn vào những khu vực đó.

Tài nguyên