Tại sao: nth-child () lặp từ một thay vì 0?
Như thể hiện trong ví dụ này . Tại sao nó chọn phần tử đầu tiên mà không phải phần tử thứ hai khi
p :nth-child(1)
Tại sao: nth-child () lặp từ một thay vì 0?
Như thể hiện trong ví dụ này . Tại sao nó chọn phần tử đầu tiên mà không phải phần tử thứ hai khi
p :nth-child(1)
Câu trả lời:
Nếu bạn đếm những đứa con của mình, bạn sẽ nói "đứa con đầu lòng của tôi", "đứa con thứ hai của tôi", v.v., chứ không phải "đứa con tinh thần của tôi". Đây chỉ đơn giản là cách con người đếm. (Lưu ý: Đây không phải là một số ý kiến chủ quan của tôi. Đây thực sự là cách các số thứ tự hoạt động.)
Lý do bạn thậm chí đặt câu hỏi có lẽ là vì bạn là lập trình viên và nhiều ngôn ngữ lập trình lập chỉ mục mảng và liệt kê các mục từ 0. Lý do cho điều này là trong các ngôn ngữ cấp thấp như C, một mảng thực sự là một con trỏ đến địa chỉ bộ nhớ của mục đầu tiên và chỉ mục là phần bù so với con trỏ này. Vì vậy, array[0]
có nghĩa là địa chỉ của mục đầu tiên, array[1]
có nghĩa là địa chỉ của mục đầu tiên cộng với kích thước của 1 mục, tức là mục thứ hai, v.v.
Nhiều ngôn ngữ cấp cao hơn không hỗ trợ trực tiếp số học con trỏ đã giữ lại chỉ mục dựa trên 0 để thống nhất và quen thuộc. Ví dụ: tất cả các ngôn ngữ có cú pháp xuất phát từ C - bao gồm JavaScript, mặc dù các mảng trong JavaScript được triển khai theo một cách hoàn toàn khác. Nhưng điều này không hoàn toàn phổ biến - các ngôn ngữ như COBOL, Fortran, Lua và một số cơ bản sử dụng lập chỉ mục dựa trên 1. (Visual Basic tự nhiên chọn điều tồi tệ nhất của cả hai thế giới bằng cách cấu hình nó.) Vì vậy, nó chắc chắn không giống như mọi ngôn ngữ khác sử dụng lập chỉ mục dựa trên 0. Để biết giá trị của nó, XPath và XQuery cũng sử dụng lập chỉ mục dựa trên 1.
Mặc dù hầu hết các lập trình viên sẽ quen thuộc với cả lập chỉ mục dựa trên 1 và 0, nhưng người bình thường sẽ tự nhiên đếm từ 1 và CSS là ngôn ngữ được thiết kế không chỉ cho lập trình viên mà còn cho các nhà thiết kế và chuyên gia đồ họa, do đó, việc chọn lập chỉ mục dựa trên 1 là điều tự nhiên .
6.6.5.2. : nth-child () giả lớp
Các
:nth-child(an+b)
ký hiệu pseudo-class đại diện cho một yếu tố mà cóan+b-1
anh chị em trước khi nó trong cây tài liệu, đối với bất kỳ số nguyên dương hoặc không có giá trịn
, và có một yếu tố phụ huynh. Đối với các giá trị bằnga
vàb
lớn hơn 0, điều này có hiệu quả phân chia con của phần tử thành các nhóma
phần tử (nhóm cuối cùng lấy phần còn lại) và chọnb
phần tử thứ của mỗi nhóm. Ví dụ, điều này cho phép các bộ chọn giải quyết mọi hàng khác trong một bảng và có thể được sử dụng để thay thế màu của văn bản đoạn văn trong một chu kỳ bốn. Các giá trịa
vàb
phải là số nguyên (dương, âm hoặc bằng 0). Chỉ số của con đầu tiên của một phần tử là 1.
Nó đi vào chi tiết hơn rất nhiều với các ví dụ. Dường như tính toán cuối cùng an+b
phải tổng thành một số dương.
Khi
a
= 0, một phần không cần được đưa vào (trừ khib
phần đó đã bị bỏ qua). Khian
không được bao gồm vàb
không âm, dấu + trướcb
(khi được phép) cũng có thể bị bỏ qua. Trong trường hợp này cú pháp đơn giản hóa thành:nth-child(b)
.Nếu cả hai
a
vàb
bằng 0, lớp giả biểu thị không có phần tử nào trong cây tài liệu.
Định dạng bổ sung trong đoạn cuối là của tôi để thêm nhấn mạnh.
Có lẽ để thống nhất với XPath, một ngôn ngữ xử lý XML / HTML khác. Điều này đặt ra câu hỏi, tại sao XPath sử dụng lập chỉ mục dựa trên 1?
Xem /programming/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0
Các trích dẫn có liên quan (nhưng gây tranh cãi) là:
"... Logic dựa trên 1 là lựa chọn phù hợp cho XPath và XSLT ... vì ngôn ngữ được thiết kế cho người dùng, không dành cho lập trình viên và người dùng vẫn có thói quen lỗi thời này khi đề cập đến chương đầu tiên trong một cuốn sách như Chương một..."