Кратко
СкопированоСвойство anchor ограничивает область применения указанных якорных имён в поддереве текущего элемента.
Пример
Скопировано
.container { anchor-scope: all;}
.container {
anchor-scope: all;
}
Как пишется
СкопированоСвойство anchor принимает в себя три типа значений:
none— ни одно якорное имя не будет ограничено поддеревом текущего элемента. Значение по умолчанию;<anchor— список якорных имен через запятую, видимость которых должна быть ограничена поддеревом текущего элемента. Например,- name> -;- a , - - b all— все якорные имена в поддереве текущего элемента должны быть доступны только в рамках этого элемента.
none
СкопированоЕсли значение anchor будет равно none, то ни одно якорное имя не будет ограничено поддеревом текущего элемента и до них может будет "достучаться" из других частей DOM-дерева.

<anchor-name>
СкопированоЕсли в качестве значения указать конкретные якорные имена, например, -, то только они будут ограничены поддеревом текущего элемента.

all
СкопированоЕсли выбрать значение all, то все якорные имена будет видны только в рамках дерева текущего элемента.

Как понять
СкопированоПредставим, что нам нужно сверстать список, в каждом элементе которого есть якорный и таргет элементы (второй привязан к первому). Выглядеть это должно примерно, как на картинке ниже.

Попробуем это реализовать.
Добавляем HTML-разметку.
<ul> <li> <div class="anchor">Anchor 1</div> <div class="target">Target 1</div> </li> <li> <div class="anchor">Anchor 2</div> <div class="target">Target 2</div> </li> <li> <div class="anchor">Anchor 3</div> <div class="target">Target 3</div> </li></ul>
<ul>
<li>
<div class="anchor">Anchor 1</div>
<div class="target">Target 1</div>
</li>
<li>
<div class="anchor">Anchor 2</div>
<div class="target">Target 2</div>
</li>
<li>
<div class="anchor">Anchor 3</div>
<div class="target">Target 3</div>
</li>
</ul>
Затем связываем таргет элементы с якорем.
.anchor { anchor-name: --anchor;}.target { position: absolute; position-anchor: --anchor; position-area: top;}
.anchor {
anchor-name: --anchor;
}
.target {
position: absolute;
position-anchor: --anchor;
position-area: top;
}
Запускаем код в браузере и видим, что на экране отображен только третий таргет элемент. Куда же подевались ещё два?
Если добавим отступов для дебага, то увидим, что, на самом деле все, три таргет элемента присутствуют на экране, просто они почему-то прикрепились к последнему якорю. Почему так происходит?
В данном примере мы использовали одно и то же якорное имя для нескольких элементов.

Чтобы привязать таргет элемент к якорю, браузер ищет последний элемент в DOM с указанным якорным именем и прикрепляет элемент к нему.

Как починить? Можно использовать уникальные имена для каждого якоря.

Но это может быть не всегда удобно, так как нужно либо заранее придумать и прописать в коде уникальные имена, либо описывать эту логику на JavaScript (чего хотелось бы избежать).
Чтобы решить подобную проблему и было придумано свойство anchor, которое позволяет ограничить видимость якорного имени поддеревом конкретного элемента.
Используя свойство anchor, починить нашу демку будет проще простого.
.anchor { anchor-name: --anchor;}.target { position: absolute; position-anchor: --anchor; position-area: top;}/* Ограничиваем область видимости якоря элементом списка.*/ul li { anchor-scope: --anchor;}
.anchor {
anchor-name: --anchor;
}
.target {
position: absolute;
position-anchor: --anchor;
position-area: top;
}
/*
Ограничиваем область видимости якоря элементом списка.
*/
ul li {
anchor-scope: --anchor;
}
- Chrome 125, поддерживается
- Edge 125, поддерживается
- Firefox, не поддерживается
- Safari, не поддерживается