2013-07-29 28 views
5

tôi có mã này:Tại sao bộ chọn thứ n-con chọn các thành phần này?

<html> 
    <head> 
     <style type="text/css"> 
      * > ul li:nth-child(4n+3) { color: red; } 
     </style> 
    </head> 
    <body> 
     <ul> 
      <li id="A" class="u">1</li> 
      <li> 
       <ol> 
        <li id="B" class="u">2.1</li> 
        <li id="C" class="g">2.2</li> 
        <li id="D" class="u">2.3</li> 
        <li id="E" class="g">2.4</li> 
       </ol> 
      </li> 
      <li id="F" class="u">3</li> 
     </ul> 
    </body> 
</html> 

Trong này nó chọn 2.33 nhưng tôi không hiểu tại sao điều này xảy ra.

Suy nghĩ của tôi là: Nó chọn đồng thời hai phần tử ở vị trí lẻ so với phần tử gốc. Nhưng có phải là 2.3 thực sự là vị trí thứ 3 hoặc 7? Tôi thực sự bị mắc kẹt, xin vui lòng giúp đỡ.

JSFiddle Sample

+1

Bỏ qua dự phòng '*>', công cụ chọn của bạn có nghĩa là: "chọn mọi' li' là con của "4n + 3'th của phần tử gốc và là phần tử con của phần tử' ul' ". Không có thứ như "phần tử cha" với bộ chọn thứ n-con. Mỗi phần tử trên trang được chọn để xem liệu đó có phải là phần tử thứ n liên quan đến phần tử * của nó không. –

Trả lời

9
* > ul li:nth-child(4n+3) 

Thứ nhất, * > lúc bắt đầu chọn này là hoàn toàn không cần thiết (Nó nói với các trình duyệt để tìm kiếm một ul đó là con của cái gì khác;. Bất cứ điều gì khác Trong đó tất nhiên tất cả ul các yếu tố, nếu không có gì khác, chúng sẽ nằm trong thẻ body).

Vì vậy, bạn có thể xóa điều đó. Nó sẽ làm cho nó đơn giản hơn để làm việc với và dễ dàng hơn để giải thích.

Bây giờ chúng ta lại với điều này:

ul li:nth-child(4n+3) 

Lý do nó được chọn cả hai 2.33 là bởi vì cả hai bộ lại li yếu tố có nguồn gốc từ các yếu tố phụ huynh ul duy nhất. Sử dụng dấu cách giữa các bộ chọn cho trình duyệt tìm kiếm bất kỳ hậu duệ nào phù hợp; nó không quan tâm về cách xa cây để tìm kiếm các yếu tố phù hợp li, vì vậy nó tìm thấy cả hai bộ.

Để trả lời câu hỏi của bạn về lý do tại sao 2.3 không được xem là phần tử thứ bảy trong tập hợp, câu trả lời là CSS xem từng bộ phận li yếu tố như một nhóm hoàn toàn riêng biệt; ngay cả khi bộ chọn xảy ra khớp với hai hoặc nhiều bộ phần tử như bộ chọn ban đầu của bạn, bộ lọc vẫn sẽ chạy một bộ đếm riêng cho từng phần, vì vậy, 2.33 đều được xem là phần tử thứ ba trong bộ tương ứng của chúng.

Nếu bạn muốn chỉ chọn các yếu tố đó là trẻ em của ul (tức ngay dưới nó trong hệ thống cấp bậc), bạn cần phải sử dụng bộ chọn con (>) chứ không phải chỉ là một không gian.

ul > li:nth-child(4n+3) 

này bây giờ sẽ chỉ chọn các thiết lập bên ngoài của li yếu tố, vì vậy chỉ yếu tố 3 của bạn sẽ được chọn.

Hy vọng rằng sẽ giúp giải thích mọi thứ.

Bằng cách này, trên một lưu ý tổng quát hơn, bạn có thể tìm thấy điều này hữu ích: CSS '>' selector; what is it?

0

Nó thực hiện liên quan đến phụ huynh:

#B = index 0

#C = index 1

#D = chỉ số 2

#E = chỉ số 3

-

4n nghĩa 4 nhân với chỉ số của mục

+ 3 là, tất nhiên, cộng thêm 3 - có nghĩa là:

-

#B = chỉ số 0 = 4x0 = 0 + 3 = 3 (yếu tố thứ 3 - chỉ số 2)

#C = index 1 = 4x1 = 4 + 3 = 7 (7 yếu tố - chỉ số 6)

#D = chỉ số 2 = 4x2 = 8 + 3 = 11 (11 nguyên tố - chỉ số 10)

#E = chỉ số 3 = 4x3 = 12 + 3 = 15 (yếu tố thứ 15 - chỉ số 14)

+0

"4n có nghĩa là 4 nhân với chỉ mục của mục" Không chắc chắn về phần này. Nó có nghĩa là mọi yếu tố thứ 4. –

+0

@Anar cùng một điều, nhưng lời giải thích của tôi là dễ dàng hơn để hình dung và tính toán với (cá nhân) – SmokeyPHP

+0

Nó thực sự là, không bao giờ nghĩ theo cách đó. Cảm ơn bạn vì một quan điểm khác. –

1

Mục 2.3 là vị trí 3 (n = 0, 4n + 3 = 3) trong danh sách trong cùng ol. Nó cũng được chọn bởi vì ul li một phần của bộ chọn có nghĩa là tất cả các phần tử tất cảli bên trong bất kỳ phần tử ul, bất kể mức làm tổ ". Và phần nth-child thêm một điều kiện nữa: "những người trong số họ là trẻ em thứ 3, thứ 7, thứ 11 và cứ như vậy là cha mẹ trực tiếp của chúng".

Các vấn đề liên quan