position-visibility

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

position-visibility CSS 屬性根據錨點定位元素是否溢位其包含元素或視口等條件,有條件地隱藏錨點定位元素。

語法

css
/* Single values */
position-visibility: always;
position-visibility: anchors-visible;
position-visibility: no-overflow;

/* Global values */
position-visibility: inherit;
position-visibility: initial;
position-visibility: revert;
position-visibility: revert-layer;
position-visibility: unset;

always

錨點定位元素始終顯示。

anchors-visible

如果錨點完全隱藏,無論是透過溢位其包含元素(或視口)還是被其他元素覆蓋,定位元素將被強隱藏。

no-overflow

如果定位元素開始溢位其包含元素或視口,它將被強隱藏。

該規範還定義了 anchors-valid 值,該值尚未在任何瀏覽器中實現。

描述

在某些情況下,您可能不希望顯示錨點定位元素。例如,如果其關聯的錨點已滾動出螢幕,但錨點定位元素在其他情況下仍部分或完全可見,則可能不清楚它指的是什麼,並且不必要地佔用空間,因此您可能希望完全隱藏它。

position-visibility 屬性可用於 always 顯示錨點定位元素,或者在關聯的錨點元素完全隱藏 (anchors-visible) 或錨點定位元素本身部分隱藏 (no-overflow) 時有條件地隱藏它。

當元素由於 position-visibility 而隱藏時,它被稱為強隱藏。這意味著它將表現得像它及其後代元素都設定了 visibilityhidden,無論它們實際的 visibility 值是什麼。

position-visibility 僅應在更傾向於完全隱藏定位元素的情況下使用。在大多數情況下,當定位元素開始溢位時,嘗試更改其位置以使其保持在螢幕上並可用更有意義。這可以透過 position-try-fallbacks 屬性和 @position-try at-rule 來完成。有關更多資訊,請參閱溢位的回退選項和條件隱藏指南。

正式定義

初始值anchors-visible
應用於絕對定位的元素
繼承性
計算值同指定值
動畫型別離散

正式語法

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

示例

基本用法

此示例允許更改錨點定位元素的 position-visibility 屬性值,以演示每個值的效果。

HTML

我們指定了兩個 <div> 元素;一個帶有 anchor 類的錨點元素,以及一個帶有 infobox 類的定位元素。

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

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

HTML 還包含填充文字,使內容高於視口,因此需要滾動。我們還包含一個 <fieldset>,其中包含一組帶有不同 position-visibility 值的 單選輸入。為簡潔起見,未顯示它們的標記。

CSS

我們將 anchor <div> 樣式化為錨點元素,並將 infobox <div> 繫結到它。相關的 CSS 如下

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

我們在單選按鈕上包含一個 change 事件處理程式,以便在選擇新值時,我們更新資訊框的 position-visibility 屬性值。

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;
}

結果

選擇不同的 position-visibility 值,然後上下滾動頁面以檢視它們的效果。設定 position-visibility: always 時,定位元素將不會隱藏。設定 position-visibility: anchors-visible 時,定位元素僅在錨點部分或完全在螢幕上時才可見。設定 position-visibility: no-overflow 時,定位元素一旦開始溢位視口就會隱藏。

規範

規範
CSS 錨點定位
# position-visibility

瀏覽器相容性

另見