position-visibility

Baseline 2026
Newly available

Since January 2026, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Thuộc tính position-visibility của CSS cho phép ẩn có điều kiện một phần tử được định vị theo neo, tùy thuộc vào ví dụ như liệu nó có đang tràn ra ngoài phần tử chứa hoặc viewport hay không.

Cú pháp

css
/* Giá trị đơn lẻ */
position-visibility: always;
position-visibility: anchors-valid;
position-visibility: anchors-visible;
position-visibility: no-overflow;

/* Giá trị toàn cục */
position-visibility: inherit;
position-visibility: initial;
position-visibility: revert;
position-visibility: revert-layer;
position-visibility: unset;

Giá trị

always

Phần tử được định vị luôn được hiển thị.

anchors-valid

Nếu giá trị position-anchor của phần tử được định vị không trỏ đến một phần tử neo hợp lệ, phần tử được định vị sẽ bị ẩn mạnh.

anchors-visible

Nếu neo bị ẩn hoàn toàn, do tràn ra ngoài phần tử chứa (hoặc viewport) hoặc bị che bởi các phần tử khác, phần tử được định vị sẽ bị ẩn mạnh.

no-overflow

Nếu phần tử được định vị bắt đầu tràn ra ngoài phần tử chứa hoặc viewport, nó sẽ bị ẩn mạnh.

Mô tả

Trong một số tình huống, bạn có thể không muốn hiển thị một phần tử được định vị theo neo. Ví dụ, nếu neo liên quan đã cuộn ra ngoài màn hình nhưng phần tử được định vị theo neo vẫn hiển thị một phần hoặc toàn bộ, có thể không rõ nó đề cập đến điều gì và chiếm không gian không cần thiết, vì vậy bạn có thể muốn ẩn nó đi hoàn toàn.

Thuộc tính position-visibility có thể được dùng để always hiển thị phần tử được định vị theo neo, hoặc ẩn nó có điều kiện trong các tình huống nhất định:

  • anchors-visible: Phần tử neo liên kết bị ẩn hoàn toàn.
  • anchors-valid: Thuộc tính position-anchor của phần tử được định vị theo neo không tham chiếu đến anchor-name hợp lệ được đặt trên một phần tử neo trong cùng tài liệu.
  • no-overflow: Phần tử được định vị theo neo bị ẩn một phần hoặc hoàn toàn.

Khi một phần tử bị ẩn do position-visibility, nó được gọi là ẩn mạnh. Điều này có nghĩa là nó sẽ hoạt động như thể nó và các phần tử con của nó có giá trị visibilityhidden, bất kể giá trị visibility thực tế của chúng là gì.

position-visibility chỉ nên được sử dụng trong các tình huống mà ẩn hoàn toàn phần tử được định vị là điều ưu tiên. Trong hầu hết các trường hợp, việc thay đổi vị trí của các phần tử được định vị khi chúng bắt đầu tràn ra ngoài để giữ chúng trên màn hình và có thể sử dụng sẽ hợp lý hơn. Điều này có thể được thực hiện bằng thuộc tính position-try-fallbacks và quy tắc at @position-try. Xem hướng dẫn Fallback options and conditional hiding for overflow để biết thêm thông tin.

Định nghĩa hình thức

Initial valueanchors-visible
Applies toabsolutely positioned elements
Inheritedno
Computed valueas specified
Animation typediscrete

Cú pháp hình thức

position-visibility = 
always |
[ anchors-valid || anchors-visible || no-overflow ]

Ví dụ

Cách sử dụng cơ bản

Ví dụ này cho phép thay đổi giá trị thuộc tính position-visibility của phần tử được định vị theo neo để minh họa hiệu ứng của từng giá trị.

HTML

Chúng ta chỉ định hai phần tử <div>: một phần tử neo với lớp anchor và một phần tử được định vị với lớp infobox.

html
<div class="anchor">⚓︎</div>

<div class="infobox">
  <p>This is an information box.</p>
</div>

HTML cũng bao gồm văn bản lấp đầy để làm nội dung cao hơn viewport nhằm yêu cầu cuộn. Chúng ta cũng thêm một <fieldset> với nhóm radio inputs với các giá trị position-visibility khác nhau. Phần đánh dấu này không được hiển thị để ngắn gọn.

CSS

Chúng ta tạo kiểu <div>anchor làm phần tử neo và neo <div>infobox vào nó. CSS liên quan như sau:

css
.anchor {
  anchor-name: --my-anchor;
}

.infobox {
  position-anchor: --my-anchor;
  position: fixed;
  position-area: top span-all;
  margin-bottom: 5px;
  position-visibility: always;
}

JavaScript

Chúng ta thêm trình xử lý sự kiện change trên các nút radio để khi một giá trị mới được chọn, chúng ta cập nhật giá trị thuộc tính position-visibility của infobox.

js
const infobox = document.querySelector(".infobox");
const radios = document.querySelectorAll('[name="position-visibility"]');

for (const radio of radios) {
  radio.addEventListener("change", setPositionVisibility);
}

function setPositionVisibility(e) {
  infobox.style.positionVisibility = e.target.value;
}

Kết quả

Chọn các giá trị position-visibility khác nhau rồi cuộn trang lên xuống để xem hiệu ứng của chúng. Với position-visibility: always, phần tử được định vị sẽ không bị ẩn. Với position-visibility: anchors-visible, phần tử được định vị chỉ hiển thị khi neo hiển thị một phần hoặc toàn bộ trên màn hình. Với position-visibility: no-overflow, phần tử được định vị sẽ bị ẩn ngay khi nó bắt đầu tràn ra ngoài viewport.

Thông số kỹ thuật

Specification
CSS Anchor Positioning Module Level 1
# position-visibility

Khả năng tương thích trình duyệt

Xem thêm