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,无论其实际可见性值是什么。

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

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

JavaScript

我们为单选按钮包括一个 change 事件处理程序,以便在选择新值时,更新 infobox 的 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

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅