Chuyển tới nội dung chính

Các biến global css trong H5 App

Tài liệu này mô tả các Global CSS variables (biến toàn cục) được tự động thêm vào trong Mini App. Các biến này giúp giao diện hiển thị đúng kích thước và không bị che khuất bởi notch (tai thỏ), status bar, hoặc gesture bar của thiết bị.

Giải thích một số khái niệm cơ bản

Thuật ngữGiải thích
Notch (tai thỏ)Là phần lõm hoặc bo tròn trên đầu màn hình (như trên iPhone X trở lên), nơi chứa camera và cảm biến. Nếu không chừa khoảng trống, nội dung có thể bị che khuất.
Status barThanh nhỏ ở đầu màn hình hiển thị các thông tin như giờ, pin, sóng...
Gesture bar (thanh điều hướng)Thanh mảnh ở cuối màn hình, dùng để vuốt chuyển app, về Home... Nếu không chừa khoảng trống, nút hoặc nội dung có thể nằm đè lên thanh này.
Safe area (vùng an toàn)Là vùng hiển thị đảm bảo không bị che bởi notch, status bar hoặc gesture bar. Giao diện nên nằm hoàn toàn trong vùng này để hiển thị đẹp trên mọi thiết bị.

Nhóm biến về kích thước thiết bị

Các biến này cung cấp thông tin về kích thước tổng thể và vùng hiển thị của thiết bị, giúp căn chỉnh bố cục giao diện.

Tên biếnMô tả
--vsf-device-widthChiều rộng tổng thể của thiết bị (tính cả vùng bo cong hoặc notch).
--vsf-device-heightChiều cao tổng thể của thiết bị, bao gồm luôn cả status bar và gesture bar.
--vsf-screen-widthChiều rộng của toàn bộ màn hình hiển thị mà người dùng nhìn thấy.
--vsf-screen-heightChiều cao của toàn bộ màn hình hiển thị mà người dùng nhìn thấy.
--vsf-window-widthChiều rộng vùng hiển thị nội dung trong ứng dụng (phần mà web có thể vẽ lên).
--vsf-window-heightChiều cao vùng hiển thị nội dung trong ứng dụng, không tính các thanh hệ thống bên trên hoặc bên dưới.
--vsf-title-bar-heightChiều cao của thanh tiêu đề (title bar) - bao gồm --safe-area-inset-top - thường là nơi hiển thị tiêu đề trang hoặc nút quay lại.
--vsf-status-bar-heightChiều cao của thanh trạng thái (status bar). Biến này giúp chừa khoảng trống phía trên để nội dung không bị đè lên đồng hồ hoặc icon pin.
--vsf-header-padding-rightKhoảng cách trống bên phải của header, để tránh nội dung đè lên nút hệ thống (ví dụ: nút menu hoặc avatar người dùng).
--vsf-header-padding-leftKhoảng cách trống bên trái của header, để tránh nội dung đè lên nút quay lại hoặc logo ứng dụng.

Nhóm biến về vùng an toàn (Safe Area Insets)

Những biến này giúp căn chỉnh giao diện trong vùng hiển thị an toàn, tránh bị che bởi notch hoặc thanh điều hướng.

Tên biếnMô tả
--safe-area-inset-topKhoảng cách từ mép trên màn hình đến vùng hiển thị an toàn — giúp chừa chỗ cho notch hoặc status bar.
--safe-area-inset-bottomKhoảng cách từ mép dưới đến vùng hiển thị an toàn — giúp tránh bị che bởi gesture bar hoặc thanh điều hướng.
--safe-area-inset-leftKhoảng cách an toàn từ mép trái, dùng cho thiết bị có bo cong hoặc notch nằm lệch.
--safe-area-inset-rightKhoảng cách an toàn từ mép phải, tương tự như trên.

Ví dụ cách sử dụng

Dưới đây là ví dụ minh họa cách các biến này giúp giao diện hiển thị chính xác trên thiết bị di động:

const HomePage = () => {
return (
<div>
<div className="header">...</div>
<div className="page">
<div className="page__content"></div>
</div>
</div>
)
}
.header {
height: var(--vsf-title-bar-height);
padding-top: var(--safe-area-inset-top);
padding-left: var(--vsf-header-padding-left);
padding-right: var(--vsf-header-padding-right);
}
.page {
padding-top: var(--vsf-title-bar-height);
padding-bottom: var(--safe-area-inset-bottom);
overflow-y: auto;
}

Kết quả:

  • Header sẽ tự động chừa khoảng trống phía trên cho notch.
  • Nội dung chính không bị đè lên gesture bar ở dưới.
  • Giao diện hiển thị cân đối trên mọi loại điện thoại.

Ngoài ra, bạn có thể sử dụng navigation bar được tích hợp sẵn tại Navigation Bar

// Layout
const MainLayout = () => {
return (
<Routes>
<Route
path="/"
element={<HomePage />}
navigationBar={{
title: 'Home Page',
backIcon: false,
}}
/>
</Routes>
)
}

// Page
const HomePage = () => {
return <Page className="page"></Page>
}