Hướng dẫn di chuyển từ cạnh sang cạnh trên Chrome cho Android

Ngày xuất bản: 28 tháng 2 năm 2025

Tràn viền là một tính năng của Android cho phép các ứng dụng trải rộng toàn bộ chiều rộng và chiều cao của màn hình bằng cách vẽ phía sau thanh hệ thống Android.

Trước Chrome 135, Chrome trên Android không vẽ tràn viền. Hướng dẫn này giải thích ảnh hưởng của thay đổi này đối với các trang web và những việc mà bạn có thể làm với tư cách là nhà phát triển để thích ứng với thay đổi này.

Quán bar ở mọi nơi

Android đi kèm với thanh hệ thống do chính hệ điều hành cung cấp.

Thanh trạng thái, thanh chú thích và thanh điều hướng được gọi chung là thanh hệ thống. Các tiện ích này hiển thị thông tin quan trọng như mức pin, thời gian và cảnh báo thông báo, đồng thời cho phép tương tác trực tiếp với thiết bị ở mọi nơi.

Ở đầu màn hình, bạn có thể thấy thanh trạng thái. Thanh này chứa các biểu tượng thông báo và biểu tượng hệ thống.

Hình minh hoạ phần trên cùng của một thiết bị Android, trong đó thanh hệ thống được làm nổi bật.
Thanh trạng thái trên Android được làm nổi bật (nguồn).

Ở cuối màn hình, bạn có thể thấy thanh điều hướng. Thanh này cho phép bạn điều khiển thao tác điều hướng bằng các nút quay lại, màn hình chính và tổng quan. Đây có thể là chế độ thao tác bằng 3 nút cổ điển hoặc thanh điều hướng bằng cử chỉ hiện đại.

Hình minh hoạ phần dưới cùng của một thiết bị Android có thanh điều hướng bằng cử chỉ.
Thanh điều hướng bằng cử chỉ (nguồn).

Ngoài các thanh hệ thống Android, Chrome còn có một thanh địa chỉ tự động mở rộng và thu gọn khi bạn di chuyển.

Chrome hiển thị tràn viền

Khi bạn truy cập vào một trang web, trang web đó sẽ xuất hiện trong một hình chữ nhật được gọi là khung hiển thị (bố cục).

Trong Chrome trên Android, trước Chrome 135, khung hiển thị bố cục đó được vẽ giữa thanh trạng thái trên cùng và thanh điều hướng bằng cử chỉ ở dưới cùng. Sự hiện diện (hoặc không hiện diện) của thanh địa chỉ của Chrome có thể ảnh hưởng đến kích thước khung nhìn, nhưng khung nhìn sẽ không bao giờ mở rộng vào thanh hệ thống trên cùng hoặc thanh điều hướng bằng cử chỉ ở dưới cùng.

Hình minh hoạ về một thiết bị Android có Chrome trên Android không hiển thị tràn viền. Hình minh hoạ ở bên trái cho thấy Chrome có thanh địa chỉ được mở rộng. Nằm giữa thanh địa chỉ và thanh điều hướng bằng cử chỉ là một hộp được đánh dấu bằng màu xanh lục có kích thước 100svh. Hình minh hoạ bên phải cho thấy Chrome có thanh địa chỉ được thu gọn. Nằm giữa thanh trạng thái và thanh điều hướng bằng cử chỉ là một hộp có kích thước 100lvh và được đánh dấu bằng màu xanh lục. Khung hiển thị có đường viền màu xanh dương dạng nét đứt.
Kích thước tối thiểu và tối đa của khung hiển thị trong Chrome trên Android trước Chrome 135. Những kích thước này được gọi là khung hiển thị nhỏ và lớn. Khung hiển thị có đường viền màu xanh dương nét đứt.

Kể từ Chrome 135, khung nhìn được phép mở rộng vào thanh điều hướng bằng cử chỉ của Android. Đây là hành vi được mô tả là tràn viền.

Hình minh hoạ về khung hiển thị trong Chrome trên Android không tràn viền (bên trái) và trong Chrome trên Android tràn viền (bên phải). Mỗi hình ảnh trực quan đều có một hộp màu xanh dương biểu thị một phần tử có kích thước bằng chiều cao 100vh. Văn bản ở bên trái giải thích những điều sẽ xảy ra khi Chrome không hiển thị tràn viền. Nội dung này có nội dung "Khung hiển thị vẫn được kẹp giữa thanh trạng thái trên cùng và thanh điều hướng bằng cử chỉ ở dưới cùng". Văn bản ở bên phải giải thích những gì xảy ra khi Chrome hiển thị tràn viền. Nội dung là "Khung hiển thị mở rộng vào thanh điều hướng bằng cử chỉ".
Khung hiển thị lớn xuất hiện trong Chrome trên Android không có chế độ hiển thị tràn viền (bên trái) và trong Chrome có chế độ hiển thị tràn viền (bên phải). Trong Chrome có hỗ trợ chế độ hiển thị tràn viền, khung nhìn sẽ mở rộng vào khu vực thanh điều hướng bằng cử chỉ khi thanh công cụ động của Chrome thu gọn.

Hành vi của Chrome khi không tràn viền

Bản ghi sau đây cho thấy Chrome trên Android không hỗ trợ chế độ tràn viền, thanh địa chỉ của Chrome (ở trên cùng) sẽ tự động ẩn đi khi trang được cuộn. Tuy nhiên, thanh trạng thái trên cùng và thanh điều hướng gốc của Android ở dưới cùng vẫn cố định tại chỗ.

Hành vi cũ: Chrome trên Android không hỗ trợ chế độ tràn viền và https://developer.chrome.com/ được tải.

Ở đây, kích thước của khung hiển thị bố cục thay đổi khi thanh địa chỉ của Chrome thu gọn hoặc mở rộng.

Hành vi của Chrome khi ở chế độ tràn viền

Từ Chrome 135, Chrome có thể vẽ nội dung trên web cho đến cạnh dưới của thiết bị bằng cách mở rộng khung nhìn vào khu vực thanh điều hướng bằng cử chỉ.

Động, tràn viền với "phần cằm"

Theo mặc định, chế độ hiển thị tràn viền của Chrome sẽ cho thấy một thanh dưới cùng linh động mới (còn gọi là "phần cằm") ở phía trên khu vực thanh điều hướng bằng cử chỉ. Giống như thanh địa chỉ của Chrome, phần cằm này sẽ di chuyển ra ngoài khi bạn bắt đầu cuộn và ảnh hưởng đến kích thước của khung nhìn.

Trong bản ghi sau đây về Chrome trên Android có hỗ trợ chế độ tràn viền, cả thanh địa chỉ và phần cằm của Chrome đều tự động thu gọn khi trang cuộn xuống. Điều này khiến khung hiển thị mở rộng, cho phép nội dung web được vẽ lên đến cạnh dưới của thiết bị.

Hành vi mới: Chrome trên Android có hỗ trợ chế độ hiển thị tràn viền và https://developer.chrome.com/ đã tải. Hãy chú ý cách phần viền dưới cùng trượt ra ngoài khi trang cuộn.

Hành vi này của phần cằm là hành vi mặc định mới của Chrome kể từ Chrome 135 trở đi.

Chuyển sang chế độ hiển thị tràn viền theo mặc định bằng lựa chọn sử dụng

Những trang web được thiết kế tràn viền có thể cho biết điều đó bằng cách điều chỉnh thẻ meta viewport. Khi được bật, theo mặc định, khung hiển thị sẽ mở rộng lên đến cạnh dưới mà không bao giờ để lộ phần cằm.

Hành vi mới khi chọn sử dụng chế độ tràn viền: Khung nhìn mở rộng đến cạnh dưới khi tải trang. Không có cằm.

Một trang có thể cho biết rằng trang đó hỗ trợ chế độ hiển thị tràn viền bằng cách sử dụng thẻ meta viewport và khoá viewport-fit của thẻ đó.

Để chọn sử dụng chế độ hiển thị tràn viền, hãy đặt viewport-fit thành giá trị cover.

<meta name="viewport" content="width=device-width, initial-scale=1, viewpo>rt-fit=cover" /

Tìm hiểu thêm về các giá trị khác nhau của viewport-fit trên MDN.

Xử lý nội dung có thể bị thanh điều hướng bằng cử chỉ che khuất

Ở chế độ tràn viền, bạn nên cân nhắc mọi nội dung có thể bị thanh điều hướng bằng cử chỉ che khuất.

Trong hầu hết các trường hợp, bạn không cần làm gì cả vì phần cằm dưới sẽ tự động di chuyển ra khỏi tầm nhìn. Người dùng vẫn có thể truy cập vào tất cả nội dung trên trang web của bạn như trước đây.

Tuy nhiên, nếu chọn chế độ hiển thị tràn viền theo mặc định hoặc có một phần tử nằm ở cuối khung hiển thị, thì bạn có thể cần tính đến trường hợp nội dung đó có khả năng bị che khuất.

.stuck-to-the-bottom-of-the-viewport {
  position: fixed;
  bottom: 0;
}

Khi phần cằm xuất hiện, ban đầu người dùng có thể truy cập vào nội dung nhưng nội dung sẽ bị thanh điều hướng của Android che khuất khi phần cằm biến mất.

Hình minh hoạ một thiết bị Android có Chrome trên Android ở chế độ tràn viền. Hình minh hoạ bên trái cho thấy Chrome có phần cằm. Nội dung được cố định ở dưới cùng (hiển thị bằng màu đỏ) nằm ngay phía trên. Hình minh hoạ bên phải cho thấy Chrome không có phần cằm. Tại đó, nội dung được neo ở dưới cùng sẽ nằm sát cạnh dưới của thiết bị. Văn bản đi kèm giải thích rằng nội dung ở vị trí dưới cùng hiện bị thanh điều hướng bằng cử chỉ che khuất.
Hình minh hoạ một trang web có phần tử ở vị trí dưới cùng với `bottom: 0`. Khi cằm xuất hiện, phần tử ở vị trí dưới cùng sẽ nằm phía trên thanh điều hướng của Android. Khi phần cằm đã di chuyển ra xa, phần tử sẽ được đặt phía sau thanh điều hướng của Android và bị thanh này che khuất một phần tại thời điểm đó.

Để giảm thiểu vấn đề này, hãy sử dụng phần lồng ghép vùng an toàn để luôn đặt các phần tử bị ảnh hưởng lên trên thanh điều hướng bằng cử chỉ ở dưới cùng của Android gốc hoặc để phần nền của các phần tử đó mở rộng vào vùng đó.

Phần lồng ghép vùng an toàn

Phần lồng ghép vùng an toàn là 4 biến môi trường xác định một hình chữ nhật theo phần lồng ghép trên cùng, bên phải, dưới cùng và bên trái từ cạnh của khung nhìn.

Khi kết hợp, 4 giá trị này tạo thành hình chữ nhật vùng an toàn, nơi bạn có thể đặt nội dung mà không bị che khuất bởi những thứ như thanh điều hướng bằng cử chỉ của Android.

Hình minh hoạ một thiết bị Android có Chrome ở chế độ tràn viền. Phần cằm có chế độ xem trượt ra. Hình chữ nhật vùng an toàn xuất hiện bên trong Chrome, có màu vàng. Cạnh dưới của bảng này nằm ngay phía trên thanh điều hướng bằng cử chỉ. Phần dưới cùng của khung hiển thị được vẽ trong thanh điều hướng bằng cử chỉ và có màu xanh dương. Văn bản đi kèm cho biết hình chữ nhật vùng an toàn được lồng trong khung hiển thị bằng phần lồng dưới cùng của vùng an toàn để ngăn nội dung được vẽ bên dưới thanh điều hướng bằng cử chỉ.
Hình minh hoạ Chrome ở chế độ tràn viền với khung hiển thị và hình chữ nhật vùng an toàn được vẽ bằng màu vàng. Vì phần cằm bị rút lại, nên phần lồng dưới cùng của vùng an toàn sẽ ngăn hình chữ nhật vùng an toàn chạm vào thanh điều hướng bằng cử chỉ. Do đó, bạn sẽ thấy phần xem trước khung hiển thị từ bên dưới thanh điều hướng bằng cử chỉ đó.

Sử dụng khoảng lùi dưới cùng của vùng an toàn

Đối với những phần tử nằm ở cuối khung nhìn, hãy dùng safe-area-inset-bottom làm giá trị cho thuộc tính bottom để ngăn phần tử đó nằm bên dưới thanh điều hướng bằng cử chỉ. Giá trị do safe-area-inset-bottom trả về sẽ được cập nhật linh hoạt khi phần cằm di chuyển ra khỏi đường viền, nhờ đó các phần tử ở vị trí dưới cùng sẽ nằm gọn gàng phía trên thanh điều hướng bằng cử chỉ của Android.

.stuck-to-the-bottom-of-the-viewport {
  position: fixed;
  bottom: env(safe-area-inset-bottom, 0px);
}
Hình minh hoạ một thiết bị Android có Chrome ở chế độ tràn viền. Trong hình ảnh trực quan ở bên trái, phần cằm có thể nhìn thấy và nội dung được cố định ở dưới cùng nằm ngay phía trên phần cằm. Trong hình ảnh trực quan ở bên phải, cằm không xuất hiện và nội dung được cố định ở dưới cùng được đặt ở cùng vị trí với nội dung ở bên trái. Điều này khiến nội dung thông thường xuất hiện bên dưới thanh điều hướng bằng cử chỉ.
Hình minh hoạ về một trang web có phần tử ở vị trí dưới cùng sử dụng phần lồng vùng an toàn dưới cùng với thuộc tính bottom. Khi phần cằm xuất hiện, thanh này sẽ nằm phía trên thanh điều hướng bằng cử chỉ của Android. Khi phần cằm biến mất, phần tử này cũng nằm phía trên phần cằm.

Như bạn có thể thấy trong hình minh hoạ, kết quả vẫn chưa hoàn hảo: khi cằm được di chuyển ra khỏi đường đi, nội dung còn lại của trang sẽ xuất hiện trong vùng thanh điều hướng bằng cử chỉ. Điều này là do ở trạng thái này, khung hiển thị sẽ mở rộng vào khu vực thanh điều hướng bằng cử chỉ.

Để ngăn nội dung bị vẽ bên dưới nội dung được cố định ở dưới cùng, một phương pháp thường dùng là đặt padding-bottom thành safe-area-inset-bottom. Nhờ đó, phần tử được neo ở dưới cùng sẽ tự động tăng kích thước khi phần cằm ẩn đi. Mặc dù cách này có hiệu quả, nhưng bạn không nên dùng vì nó dẫn đến hiện tượng layout thrashing (bố cục bị giật) trong khi cằm di chuyển ra khỏi đường viền.

Đừng đặt padding thành giá trị safe-area-inset.

.stuck-to-the-bottom-of-the-viewport {
  position: fixed;
  bottom: 0;
  padding-bottom: env(safe-area-inset-bottom, 0px); /* 🛑 Don't do this, as it causes layout thrashing. */
}

Sử dụng khoảng lùi dưới cùng của vùng an toàn và khoảng lùi dưới cùng tối đa của vùng an toàn

Thay vào đó, bạn nên sử dụng kết hợp safe-area-inset-bottom và safe-area-max-inset-bottom. Không giống như safe-area-inset-bottom linh động (cập nhật linh động khi cằm di chuyển ra ngoài), safe-area-max-inset-bottom biểu thị giá trị tối đa của safe-area-inset-bottom.

Sử dụng safe-area-max-inset-bottom này để tăng kích thước phần tử được cố định ở dưới cùng ngay từ đầu và kết hợp với safe-area-inset-bottom để kéo phần tử xuống sao cho phần tử nằm phía sau cằm.

Sử dụng safe-area-max-inset-bottom kết hợp với safe-area-inset-bottom

:root {
  --safe-area-max-inset-bottom: env(safe-area-max-inset-bottom, 36px);
  --bottom-bar-height: 50px;
}

.stuck-to-the-bottom-of-the-viewport {
  position: fixed;
  bottom: 0;
  height: var(--bottom-bar-height);
  padding-bottom: var(--safe-area-max-inset-bottom);
  bottom: calc(env(safe-area-inset-bottom, 0px) - var(--safe-area-max-inset-bottom));
}

body {
  padding-bottom: calc(var(--bottom-bar-height) + var(--safe-area-max-inset-bottom));
}

Thử bản minh hoạ trực tiếp

Kết quả hiển thị giống với phương pháp padding-bottom: env(safe-area-inset-bottom, 0px); nhưng hiệu suất cao hơn nhiều. Vì chỉ cần thay đổi giá trị được tính cho bottom khi cằm di chuyển ra xa, nên không xảy ra tình trạng lãng phí bố cục.

Hình minh hoạ một thiết bị Android có Chrome ở chế độ tràn viền. Trong hình ảnh trực quan ở bên trái, phần cằm có thể nhìn thấy và nội dung được cố định ở dưới cùng nằm ngay phía trên phần cằm. Trong hình ảnh trực quan ở bên phải, cằm không xuất hiện và nội dung được cố định ở dưới cùng đã tăng lên về mặt hình ảnh để chiếm không gian mà cằm vốn có. Điều này tạo ra hiệu ứng hình ảnh đẹp mắt và ngăn nội dung trang thông thường xuất hiện từ bên dưới khu vực thanh điều hướng bằng cử chỉ.
Hình minh hoạ một trang web có phần tử được cố định ở dưới cùng, có tính đến phần lồng ghép vùng an toàn. Khi cằm xuất hiện (bên trái), phần tử sẽ nằm phía trên cằm. Khi phần cằm không hiển thị, phần tử sẽ tràn vào thanh điều hướng bằng cử chỉ của Android.

Dùng thử chế độ tràn viền trước Chrome 135

Để dùng chế độ hiển thị tràn viền trước khi phát hành công khai phiên bản ổn định, bạn cần bật một số cờ tính năng của Chrome thông qua chrome://flags:

  • EdgeToEdgeBottomChin (bạn có thể đặt thành "Đã bật chế độ gỡ lỗi" để tô màu hồng cho một nửa cằm nhằm phân biệt rõ hơn với các giao diện người dùng khác)
  • DrawCutOutEdgeToEdge
  • BottomBrowserControlsRefactor (không đặt thành "Đã bật" mà đặt thành "Đã bật Dispatch yOffset")
  • DynamicSafeAreaInsets
  • DynamicSafeAreaInsetsOnScroll
  • EdgeToEdgeWebOptIn
  • DrawKeyNativeEdgeToEdge
  • EdgeToEdgeSafeAreaConstraint (không đặt thành "Đã bật" mà đặt thành "Đã bật biến thể có thể cuộn")

Đảm bảo rằng các cờ sau đây không được bật:

  • DrawNativeEdgeToEdge
  • EdgeToEdgeEverywhere

Khởi động lại Chrome 2 lần.

Chúng tôi rất mong bạn đóng góp ý kiến

Nếu bạn có ý kiến phản hồi về Chrome và việc triển khai chế độ tràn viền của Chrome, vui lòng liên hệ với chúng tôi bằng cách báo cáo lỗi Chromium trong thành phần "Giao diện người dùng > Trình duyệt > Thiết bị di động > EdgeToEdge". Chúng tôi đánh giá cao phản hồi của bạn.