sibling-index()

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Hàm sibling-index() trong CSS là một hàm trả về một số nguyên đại diện cho vị trí của phần tử hiện tại trong cây DOM so với tất cả các phần tử anh em của nó. Giá trị trả về là số chỉ mục vị trí của con theo ngữ cảnh trong tất cả các phần tử anh em trong một phần tử cha, với con đầu tiên trả về 1 và con cuối cùng trả về length của Element.children.

Note: Giống như lớp giả :nth-child(), sibling-index() bắt đầu từ 1, không phải 0.

Note: Hàm counter() cung cấp kết quả tương tự nhưng trả về <string> (phù hợp hơn cho nội dung được tạo), trong khi sibling-index() trả về <integer> (có thể dùng cho các phép tính).

Try it

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

Cú pháp

css
sibling-index()

Tham số

Hàm sibling-index() không chấp nhận tham số.

Giá trị trả về

Một số nguyên; vị trí của phần tử hiện tại trong thứ tự anh em của cây DOM.

Ví dụ

Chiều rộng danh sách động

Ví dụ này minh họa cách tăng động chiều rộng của mỗi mục <li> trong <ul> lên 50px.

HTML

html
<ul>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
</ul>

CSS

css
li {
  width: calc(sibling-index() * 50px);
  background-color: #ffaaaa;
}

Kết quả

Hoạt hình tuần tự

Kết hợp sibling-index() với hoạt hình CSS mở ra những khả năng mới. Trong ví dụ này, độ mờ của các phần tử theo thứ tự tuần tự được đặt bằng cách thiết lập animation-delay dựa trên thứ tự của chúng trong DOM.

HTML

Chúng ta bao gồm một phần tử container với bốn con:

html
<ul>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
  <li>Four</li>
</ul>

CSS

Chúng ta áp dụng hoạt hình fade-in cho mỗi phần tử. Chúng ta sử dụng hàm sibling-index() trong hàm calc() để đặt thời lượng của animation-delay dựa trên vị trí của phần tử nguồn trong thứ tự nguồn. animation-fill-mode áp dụng keyframe 0% của hoạt hình cho đến khi animation-duration hết hạn.

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

Kết quả

Thông số kỹ thuật

Specification
CSS Values and Units Module Level 5
# funcdef-sibling-index

Khả năng tương thích trình duyệt

Xem thêm