Свойство CSS `position-visibility`
Baseline Ограниченная доступность
Эта функция не входит в Baseline, поскольку не работает в некоторых наиболее широко используемых браузерах.
Свойство position-visibility CSS позволяет условно скрывать элемент, позиционируемый относительно якоря, например, если он выходит за пределы содержащего его элемента или области просмотра.
Синтаксис
/* Single values */ position-visibility: always; position-visibility: anchors-valid; 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-valid - Если значение свойства
position-anchorпозиционируемого элемента не указывает на допустимый якорный элемент, позиционируемый элемент будет полностью скрыт. -
anchors-visible - Если якорь полностью скрыт из-за выхода за пределы содержащего его элемента (или области просмотра) либо перекрытия другими элементами, позиционируемый элемент будет полностью скрыт.
-
no-overflow - Если позиционируемый элемент начинает выходить за пределы содержащего его элемента или области просмотра, он будет полностью скрыт.
Описание
В некоторых ситуациях может быть нежелательно отображать элемент, позиционируемый относительно якоря. Например, если связанный с ним якорь прокручен за пределы экрана, а позиционируемый относительно якоря элемент при этом всё ещё частично или полностью виден, может быть непонятно, к чему он относится, и он может занимать лишнее место. В таком случае можно полностью скрыть его.
Свойство position-visibility можно использовать, чтобы always показывать элемент, позиционируемый относительно якоря, или условно скрывать его в определённых ситуациях:
-
anchors-visible: связанный якорный элемент полностью скрыт. -
anchors-valid: свойствоposition-anchorэлемента, позиционируемого относительно якоря, не ссылается на допустимое значениеanchor-name, заданное для якорного элемента в том же документе. -
no-overflow: элемент, позиционируемый относительно якоря, скрыт частично или полностью.
Когда элемент скрыт из-за position-visibility, он считается полностью скрытым. Это означает, что он и его дочерние элементы ведут себя так, как если бы для них было установлено значение hidden свойства visibility, независимо от их фактического значения видимости.
Свойство position-visibility следует использовать только в ситуациях, когда предпочтительно полностью скрыть позиционируемый элемент. В большинстве случаев разумнее попытаться изменить расположение позиционируемых элементов, когда они начинают выходить за границы, чтобы они оставались на экране и были доступны для использования. Это можно сделать с помощью свойства position-try-fallbacks и правила @-уровня @position-try. Дополнительные сведения см. в руководстве Резервные варианты и условное скрытие при переполнении.
Формальное определение
| Исходное значение | anchors-visible |
|---|---|
| Применяется к | абсолютно позиционируемым элементам |
| Наследуется | нет |
| Вычисленное значение | как задано |
| Тип анимации | дискретный |
Формальный синтаксис
position-visibility =
always |
[ anchors-valid || anchors-visible || no-overflow ]
Примеры
Базовое использование
В этом примере можно менять значение свойства position-visibility элемента, позиционируемого относительно якоря, чтобы продемонстрировать эффект каждого значения.
HTML
Мы задаём два элемента <div>: якорный элемент с классом anchor и позиционируемый элемент с классом infobox.
<p> Malesuada nunc vel risus commodo viverra maecenas accumsan lacus. Vel elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique. </p> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Dui nunc mattis enim ut tellus elementum sagittis vitae et. </p> <p> Malesuada nunc vel risus commodo viverra maecenas accumsan lacus. Vel elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique. Porta lorem mollis aliquam ut porttitor. Turpis cursus in hac habitasse platea dictumst quisque. </p>
<div class="anchor">⚓︎</div> <div class="infobox"> <p>This is an information box.</p> </div>
<p>
Nisi quis eleifend quam adipiscing vitae proin sagittis nisl rhoncus. In arcu
cursus euismod quis viverra nibh cras pulvinar. Vulputate ut pharetra sit amet
aliquam.
</p>
<p>
Malesuada nunc vel risus commodo viverra maecenas accumsan lacus. Vel elit
scelerisque mauris pellentesque pulvinar pellentesque habitant morbi
tristique. Porta lorem mollis aliquam ut porttitor. Turpis cursus in hac
habitasse platea dictumst quisque. Dolor sit amet consectetur adipiscing elit.
Ornare lectus sit amet est placerat. Nulla aliquet porttitor lacus luctus
accumsan.
</p>
<form>
<fieldset>
<legend>Choose position visibility</legend>
<div>
<label for="radio-always">always</label>
<input
type="radio"
id="radio-always"
name="position-visibility"
value="always"
checked />
</div>
<div>
<label for="radio-anchors-visible">anchors-visible</label>
<input
type="radio"
id="radio-anchors-visible"
name="position-visibility"
value="anchors-visible" />
</div>
<div>
<label for="radio-no-overflow">no-overflow</label>
<input
type="radio"
id="radio-no-overflow"
name="position-visibility"
value="no-overflow" />
</div>
</fieldset>
</form>
В HTML также добавлен заполняющий текст, чтобы содержимое было выше области просмотра и требовалась прокрутка. Мы также добавили <fieldset> с группой переключателей radio с разными значениями position-visibility. Для краткости разметка этих элементов не показана.
CSS
Мы стилизуем anchor <div> как якорный элемент и привязываем к нему infobox <div>. Соответствующий CSS выглядит так:
body {
width: 50%;
margin: 0 auto;
}
.anchor {
font-size: 1.8rem;
color: white;
text-shadow: 1px 1px 1px black;
background-color: hsl(240 100% 75%);
width: fit-content;
border-radius: 10px;
border: 1px solid black;
padding: 3px;
}
form {
position: fixed;
background: white;
bottom: 2px;
right: 2px;
}
.infobox {
color: darkblue;
background-color: azure;
border: 1px solid #dddddd;
padding: 10px;
border-radius: 10px;
font-size: 1rem;
}
.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 информационного блока при выборе нового значения.
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, позиционируемый элемент будет скрыт, как только начнёт выходить за пределы области просмотра.
Спецификации
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | WebView на iOS | |
position-visibility |
125 |
125 |
147 |
111 |
26.2 |
125 |
147 |
83 |
26.2 |
27.0 |
125 |
26.2 |
always |
125 |
125 |
147 |
111 |
26.2 |
125 |
147 |
83 |
26.2 |
27.0 |
125 |
26.2 |
anchor-valid |
Нет |
Нет |
Нет |
Нет |
27 |
Нет |
Нет |
Нет |
27 |
Нет |
Нет |
27 |
anchor-visible |
Нет |
Нет |
Нет |
Нет |
27 |
Нет |
Нет |
Нет |
27 |
Нет |
Нет |
27 |
anchors-valid |
Нет |
Нет |
147 |
Нет |
26.2 |
Нет |
147 |
Нет |
26.2 |
Нет |
Нет |
26.2 |
anchors-visible |
125 |
125 |
147 |
111 |
26.2 |
125 |
147 |
83 |
26.2 |
27.0 |
125 |
26.2 |
no-overflow |
125 |
125 |
147 |
111 |
26.2 |
125 |
147 |
83 |
26.2 |
27.0 |
125 |
26.2 |
См. также
anchor-nameposition-anchorpositionposition-area- Модуль позиционирования относительно якорей CSS
- Руководство Использование позиционирования относительно якорей CSS
- Руководство Резервные варианты и условное скрытие при переполнении
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/position-visibility