องค์ประกอบหลักสามารถมีองค์ประกอบลูกอย่างน้อยหนึ่งรายการ:
<div class="parent">
<div>Child</div>
<div>Child</div>
<div>Child</div>
<div>Child</div>
</div>
ในบรรดาเด็กเหล่านี้มีเพียงคนเดียวเท่านั้นที่สามารถเป็นคนแรกได้ สิ่งนี้จับคู่โดย:first-child:
<div class="parent">
<div>Child</div> <!-- :first-child -->
<div>Child</div>
<div>Child</div>
<div>Child</div>
</div>
ความแตกต่างระหว่าง:first-childและ:first-of-typeคือ:first-of-typeจะตรงกับองค์ประกอบแรกของประเภทองค์ประกอบซึ่งใน HTML แสดงด้วยชื่อแท็กแม้ว่าองค์ประกอบนั้นจะไม่ใช่ลูกคนแรกของพาเรนต์ก็ตาม จนถึงตอนนี้องค์ประกอบของลูกที่เรากำลังดูอยู่นั้นเป็นไปหมดแล้วdivแต่อดทนกับฉันไว้สักหน่อยฉันจะไปถึงจุดนั้น
สำหรับตอนนี้การสนทนายังถือเป็นความจริง: ใด ๆ:first-childก็เป็นไป:first-of-typeตามความจำเป็น เนื่องจากลูกคนแรกที่นี่เป็นคนแรกdivด้วยจึงจะจับคู่ทั้งคลาสหลอกและตัวเลือกประเภทdiv:
<div class="parent">
<div>Child</div> <!-- div:first-child, div:first-of-type -->
<div>Child</div>
<div>Child</div>
<div>Child</div>
</div>
ตอนนี้ถ้าคุณเปลี่ยนชนิดของลูกคนแรกจากdivไปอย่างอื่นเช่นh1มันจะยังคงเป็นเด็กคนแรก แต่มันจะไม่เป็นคนแรกที่divเห็นได้ชัด; แทนมันจะกลายเป็นคนแรก h1(และ) หากมีคนอื่น ๆdivองค์ประกอบดังต่อไปนี้ลูกคนแรกภายในแม่เดียวกันเป็นครั้งแรกในบรรดาองค์ประกอบแล้วจะตรงกับdiv div:first-of-typeในตัวอย่างที่กำหนดลูกคนที่สองจะกลายเป็นคนแรกdivหลังจากที่ลูกคนแรกเปลี่ยนเป็นh1:
<div class="parent">
<h1>Child</h1> <!-- h1:first-child, h1:first-of-type -->
<div>Child</div> <!-- div:nth-child(2), div:first-of-type -->
<div>Child</div>
<div>Child</div>
</div>
โปรดทราบว่า:first-childเทียบเท่ากับ:nth-child(1).
นอกจากนี้ยังบอกเป็นนัยว่าแม้ว่าองค์ประกอบใด ๆ อาจมีการจับคู่องค์ประกอบลูกเดียว:first-childในแต่ละครั้ง แต่ก็สามารถและจะมีลูกจำนวนมากที่ตรงกับชั้น:first-of-typeหลอกตามจำนวนประเภทของลูกที่มี ในตัวอย่างของเราตัวเลือก.parent > :first-of-type(โดย*มีคุณสมบัติโดยนัยที่มีคุณสมบัติ:first-of-typeหลอก) จะจับคู่สององค์ประกอบไม่ใช่เพียงองค์ประกอบเดียว:
<div class="parent">
<h1>Child</h1> <!-- .parent > :first-of-type -->
<div>Child</div> <!-- .parent > :first-of-type -->
<div>Child</div>
<div>Child</div>
</div>
สิ่งเดียวกันนี้ถือเป็นจริงสำหรับ:last-childและ:last-of-type: ใด ๆ:last-childก็เป็นไปตามความจำเป็นเช่น:last-of-typeกันเนื่องจากไม่มีองค์ประกอบอื่นใดตามมาภายในพาเรนต์ แต่เนื่องจากคนสุดท้ายdivยังเป็นลูกคนสุดท้ายเด็กคนสุดท้ายh1จึงไม่สามารถเป็นลูกคนสุดท้ายได้แม้ว่าจะเป็นลูกคนสุดท้ายก็ตาม
:nth-child()และ:nth-of-type()ฟังก์ชั่นเหมือนกันมากในหลักการเมื่อใช้กับอาร์กิวเมนต์จำนวนเต็มพล (ใน:nth-child(1)ตัวอย่างที่กล่าวมาข้างต้น) :nth-of-type()แต่ที่พวกเขาแตกต่างกันคือในจำนวนที่มีศักยภาพของการจับคู่โดยองค์ประกอบ นี่คือรายละเอียดในp: nth-child (2) และ p: nth-of-type (2) ต่างกันอย่างไร