องค์ประกอบหลักสามารถมีองค์ประกอบลูกอย่างน้อยหนึ่งรายการ:
<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) ต่างกันอย่างไร