CSS-функция `sibling-index()`
Базовая поддержка Недавно появилась
Эта функция работает на последних устройствах и в последних версиях браузеров. Она может не работать на старых устройствах и в старых версиях браузеров. Она поддерживается во всех браузерах с августа 2026 года.
sibling-index() CSS-функция возвращает целое число, представляющее положение текущего элемента в DOM-дереве относительно всех его соседних элементов. Возвращаемое значение — это индекс текущего дочернего элемента среди всех соседних элементов внутри родительского элемента: для первого дочернего элемента возвращается 1, а для последнего — length из Element.children.
Примечание: Как и псевдокласс :nth-child(), sibling-index() отсчитывается от 1, а не от 0.
Примечание: Функция counter() возвращает похожий результат, но в виде <string> (что удобнее для генерируемого содержимого, тогда как sibling-index() возвращает <integer>, которое можно использовать в вычислениях).
Попробуйте
--width: calc(sibling-index() * 30px);
--width: calc(sibling-index() * 20px);
--width: calc(sibling-index() * 10px);
--width: 100px;
<ul id="example-element"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> </ul>
#example-element {
list-style-type: none;
padding: 0;
margin: 0 auto;
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
}
#example-element > li {
text-align: center;
padding: 2px;
border-radius: 8px;
width: var(--width, calc(sibling-index() * 30px));
color: white;
background-color: hsl(
calc(360deg / sibling-count() * sibling-index()) 50% 50%
);
}
Синтаксис
sibling-index()
Параметры
Функция sibling-index() не принимает параметров.
Возвращаемое значение
Целое число — положение текущего элемента в порядке соседних элементов DOM-дерева.
Примеры
Динамическая ширина списка
В этом примере показано, как динамически увеличивать ширину каждого элемента <li> в <ul> на 50px.
HTML
<ul> <li>One</li> <li>Two</li> <li>Three</li> <li>Four</li> </ul>
CSS
li {
width: calc(sibling-index() * 50px);
background-color: #ffaaaa;
}
Результат
Последовательные анимации
Сочетание sibling-index() с CSS-анимациями открывает новые возможности. В этом примере непрозрачность элементов изменяется в заданном порядке: значение animation-delay устанавливается в зависимости от расположения элемента в DOM.
HTML
Добавим контейнер с четырьмя дочерними элементами:
<ul> <li>One</li> <li>Two</li> <li>Three</li> <li>Four</li> </ul>
CSS
Применим к каждому элементу анимацию fade-in. Используем функцию sibling-index() внутри функции calc(), чтобы установить длительность animation-delay в зависимости от положения элемента в исходном порядке. Свойство animation-fill-mode сохраняет 0% ключевого кадра анимации до истечения animation-duration.
ul {
list-style-type: none;
padding: 0;
margin: 0;
}
li {
animation-name: fade-in;
animation-duration: 1s;
animation-iteration-count: 1;
animation-timing-function: linear;
animation-fill-mode: backwards;
animation-delay: calc(1s * sibling-index());
}
@keyframes fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
Результат
Спецификации
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | WebView на iOS | |
sibling-index |
138 |
138 |
154 |
122 |
26.2 |
138 |
154 |
91 |
26.2 |
30.0 |
138 |
26.2 |
См. также
© 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/Values/sibling-index