กรองชุดองค์ประกอบย่อยล่วงหน้าก่อนที่จะใช้ตรรกะ An+B
ตัวเลือกคลาส Pseudo :nth-child()
และ :nth-last-child()
ตัวเลือกคลาส Pseudo ของ :nth-child()
ช่วยให้คุณเลือกองค์ประกอบใน DOM ตามดัชนีได้ การใช้An+B
ไมโครไวยากรณ์จะช่วยให้คุณควบคุมองค์ประกอบที่คุณต้องการเลือกได้อย่างละเอียด
:nth-child(2)
: เลือกบุตรหลานคนที่ 2:nth-child(2n)
: เลือกรายการย่อยทั้งหมด (รายการที่ 2, 4, 6, 8 และอื่นๆ):nth-child(2n+1)
: เลือกรายการย่อยคี่ทั้งหมด (คนที่ 1, 3, 5, 7 และอื่นๆ):nth-child(5n+1)
: เลือกกลุ่มแรก (=(5×0)+1), คนที่ 6 (=(5×1)+1), คนที่ 11 (=(5×2)+1), ...:nth-child(5n+2)
: เลือกกลุ่มที่สอง (=(5×0)+2), คนที่ 7 (=(5×1)+2), เด็กที่ 12 (=(5×2)+2), ...
แต่คุณสามารถเลือกครีเอทีฟโฆษณาเพิ่มได้ หากไม่ใส่พารามิเตอร์ A
เช่น
:nth-child(n+3)
: เลือกบุตรหลานทุกคนจากรายการที่ 3 ขึ้นไป (ลำดับที่ 3, 4, 5 และอื่นๆ):nth-child(-n+5)
: เลือกบุตรหลานทุกคนไปจนถึงคนที่ 5 (คนที่ 1, 2, 3, 4, 5)
รวมการเลือก :nth-child()
2-3 รายการต่อไปนี้เข้าด้วยกันและคุณจะเลือกช่วงขององค์ประกอบได้
:nth-child(n+3):nth-child(-n+5)
: เลือกบุตรหลานทุกคนตั้งแต่คนที่ 3 ถึงคนที่ 5 (คนที่ 3, 4, 5)
เมื่อใช้ :nth-last-child()
คุณจะสามารถเลือกตัวเลือกที่คล้ายกัน แต่แทนที่จะเริ่มนับตั้งแต่แรก คุณจะเริ่มนับจากจุดสิ้นสุดแทน
การกรองรายการที่เลือกล่วงหน้าด้วยไวยากรณ์ of S
ใหม่ในตัวเลือก CSS ระดับ 4 คือความสามารถในการส่งรายการตัวเลือกไปยัง :nth-child()
และ :nth-last-child()
(ไม่บังคับ)
:nth-child(An+B [of S]?)
:nth-last-child(An+B [of S]?)
เมื่อระบุ of S
ระบบจะใช้ตรรกะ An+B
กับองค์ประกอบที่ตรงกับรายการตัวเลือกที่ระบุ S
เท่านั้น ซึ่งหมายความว่าคุณกรองเด็กล่วงหน้าได้ก่อนที่ An+B
จะทำงาน
การสนับสนุนเบราว์เซอร์
- 111
- 111
- 113
- 9
ตัวอย่าง
เช่น :nth-child(2 of .highlight)
เลือกองค์ประกอบการจับคู่รายการที่ 2 ที่มีคลาส .highlight
ใส่ที่แตกต่างออกไป: จากกลุ่มย่อยทั้งหมดที่มีคลาส .highlight
ให้เลือกชั้นเรียนที่ 2
ซึ่งตรงข้ามกับ .highlight:nth-child(2)
ที่เลือกองค์ประกอบที่มีคลาส .highlight
และเป็นองค์ประกอบรองที่ 2
ในการสาธิตด้านล่างนี้ คุณจะเห็นความแตกต่างนี้:
- องค์ประกอบที่ตรงกับ
:nth-child(2 of .highlight)
จะมีเส้นขอบสีชมพู - องค์ประกอบที่ตรงกับ
.highlight:nth-child(2)
จะมีโครงร่างสีเขียว
โปรดทราบว่า S
คือรายการตัวเลือก ซึ่งหมายความว่าจะยอมรับตัวเลือกหลายรายการที่คั่นด้วยคอมมา เช่น :nth-child(4 of .highlight, .sale)
เลือกองค์ประกอบที่ 4 ที่เป็น .highlight
หรือ .sale
จากชุดข้างเคียง
ในการสาธิตด้านล่าง องค์ประกอบที่ตรงกับ :nth-child(4 of .highlight, .sale)
จะมีขอบสีส้มใช้
ลายทางม้าลาย, กลับไปดูอีกครั้ง
ตัวอย่างคลาสสิกที่ใช้ :nth-child()
คือเมื่อสร้างตารางลายม้าลาย ซึ่งเป็นเทคนิคภาพที่แต่ละแถวในตารางจะสลับสี โดยทั่วไปจะมีการดำเนินการดังต่อไปนี้
tr:nth-child(even) {
background-color: lightgrey;
}
แม้ว่าวิธีนี้จะทำงานได้ดีสำหรับตารางแบบคงที่ แต่ก็จะกลายเป็นปัญหาเมื่อคุณเริ่มกรองสารบัญแบบไดนามิก ตัวอย่างเช่น เมื่อแถวที่ 2 ถูกซ่อน คุณจะได้เห็นแถวที่ 1 และ 3 ซึ่งแต่ละแถวมีสีพื้นหลังเหมือนกัน
ในการแก้ไข เราจะใช้ประโยชน์จาก :nth-child(An+B [of S]?)
โดยการยกเว้นแถวที่ซ่อนจากตรรกะ An+B
ดังนี้
tr:nth-child(even of :not([hidden])) {
background-color: lightgrey;
}
เยี่ยมไปเลยใช่ไหม
รูปภาพโดย Markus Spiske ใน Unsplash