ทำไม: nth-child () ใน CSS เริ่มต้นจาก 1 แทนที่จะเป็น 0


15

ทำไม: nth-child () วนซ้ำจากหนึ่งแทนที่จะเป็นศูนย์

ดังที่แสดงในตัวอย่างนี้ เหตุใดจึงเลือกองค์ประกอบแรกและไม่ใช่องค์ประกอบที่สองเมื่อ

p :nth-child(1)

12
"ดัชนีอาร์เรย์ควรเริ่มต้นที่ 0 หรือ 1 หรือไม่การประนีประนอมของฉันที่ 0.5 ถูกปฏิเสธโดยที่ฉันคิดว่าควรพิจารณาอย่างเหมาะสม" - Stan Kelly-Bootle
Mason Wheeler

1
เนื่องจากฉันสงสัยว่าสิ่งนี้จะดึงคะแนนเสียงที่ใกล้ชิดออกไปฉันจึงออกจากที่เปิดอยู่เพราะอย่างน้อยก็เป็นไปได้ในทางทฤษฎีที่จะตอบคำถามนี้โดยอ้างเหตุผลตัวอย่างอื่น ๆ ของการจัดทำดัชนี 1 ใน CSS และอ้างถึงความมั่นคง คนที่ตัดสินใจมาตรฐาน CSS จริง ๆ ฉันไม่รู้ CSS เพียงพอที่จะทำสิ่งนั้นด้วยตัวเอง แต่ตราบใดที่เราไม่ตอบคำถามใด ๆ ที่ทำให้เห็นได้ชัดว่า "มันเป็นเรื่องปกติของมนุษย์นับ" โต้แย้งโดยไม่มีเหตุผลว่าทำไมทุกอย่างอื่น 0 ดัชนีแล้ว ไม่มีอันตรายใด ๆ ในการปล่อยให้เปิด
Ixrec

1
@lxrec: ฉันคิดว่ามันเป็นข้ออ้างที่ว่า "ทุกอย่างอื่นคือ 0 ดัชนี" ซึ่งควรได้รับการพิสูจน์ คุณไม่ได้พูดว่า Queen Elizabeth the Zeroth, วันที่ zeroth ของวันคริสต์มาส, ถนน zeroth ทางด้านซ้ายหรือคำว่า zeroth บนหน้า
JacquesB

@lxrec ในคำตอบของฉัน XPath ถูกอ้างว่าเป็นแบบอย่างสำหรับการจัดทำดัชนีแบบ 1 ไม่แน่ใจว่าจริงๆแล้วมันเป็นปัจจัยหรือเป็นเรื่องบังเอิญ แต่เป็นอีกระบบที่เน้น XML ดังนั้นจึงสมเหตุสมผล
user949300

คำตอบ:


15

หากคุณนับลูกของคุณเองคุณจะพูดว่า "ลูกคนแรกของฉัน", "ลูกคนที่สองของฉัน" และอื่น ๆ ไม่ใช่ "ลูกคนที่รักฉัน" นี่เป็นเพียงวิธีที่มนุษย์นับ (หมายเหตุ: นี่ไม่ใช่ความเห็นส่วนตัวของฉันนี่เป็นวิธีการทำงานของเลขลำดับ )

เหตุผลที่คุณถามคำถามนี้อาจเป็นเพราะคุณเป็นโปรแกรมเมอร์และหลาย ๆ ภาษาที่เขียนโปรแกรมทำดัชนีอาเรย์และรายการจาก 0 สาเหตุของเรื่องนี้ก็คือในภาษาระดับต่ำเช่น C, อาเรย์เป็นตัวชี้ไปยังที่อยู่หน่วยความจำ ของรายการแรกและดัชนีเป็นออฟเซ็ตที่สัมพันธ์กับตัวชี้นี้ ดังนั้นarray[0]หมายถึงที่อยู่ของรายการแรกarray[1]หมายถึงที่อยู่ของรายการแรกบวกขนาด 1 รายการเช่นรายการที่สองเป็นต้น

ภาษาระดับสูงขึ้นจำนวนมากที่ไม่สนับสนุนการคำนวณทางคณิตศาสตร์โดยตรงได้เก็บดัชนีที่เป็น 0 ไว้เพื่อความสอดคล้องและความคุ้นเคย ตัวอย่างเช่นทุกภาษาที่มีไวยากรณ์ที่ได้จาก C - รวมถึง JavaScript แม้ว่าอาร์เรย์ใน JavaScript จะมีการใช้งานในวิธีที่แตกต่างกันโดยสิ้นเชิง แต่นี่ไม่ใช่ภาษาสากล - ภาษาเช่น COBOL, Fortran, Lua และการใช้ดัชนีพื้นฐานแบบพื้นฐาน 1 รายการ (Visual Basic นั้นเลือกที่เลวร้ายที่สุดของทั้งสองโลกโดยทำให้สามารถกำหนดค่าได้) ดังนั้นจึงไม่เหมือนกับภาษาอื่น ๆ ที่ใช้การจัดทำดัชนีแบบ 0 สำหรับสิ่งที่คุ้มค่า XPath และ XQuery ยังใช้การจัดทำดัชนีแบบ 1

ในขณะที่โปรแกรมเมอร์ส่วนใหญ่จะคุ้นเคยกับการจัดทำดัชนีทั้งที่ 1 และ 0 คนทั่วไปจะนับจาก 1 ตามปกติและ CSS เป็นภาษาที่ออกแบบมาไม่เพียง แต่สำหรับโปรแกรมเมอร์ แต่สำหรับนักออกแบบและมืออาชีพด้านกราฟิกดังนั้นจึงเป็นเรื่องธรรมดาที่จะเลือกการจัดทำดัชนี .



1
มันจะช่วยถ้าเอ่ยถึงคำตอบของคุณที่คุณเชื่อว่า CSS มีวัตถุประสงค์หลักสำหรับการใช้งานโดยโปรแกรมเมอร์ไม่ (ได้รับการสนับสนุนโดยเฉพาะอย่างยิ่งขึ้นอย่างใด)
ริ้น

1
@gnat มีรายการใดบ้างในรายการที่เด็กพูดว่าเป็นศูนย์ เนื่องจากตัวเลือกคือ nth-child มันเป็นตรรกะที่จะเริ่มจากครั้งแรก
Sami Kuhmonen

1
คุณสามารถลบทุกอย่างยกเว้นย่อหน้าสุดท้ายได้หรือไม่ ทุกอย่างเป็นความรู้ทั่วไปของ SE นี้ "ในขณะที่โปรแกรมเมอร์ส่วนใหญ่ ...... เป็นธรรมชาติที่จะเลือกการจัดทำดัชนีแบบพื้นฐาน"
0fnt

2
ฉันไม่เห็นด้วยกับคำตอบของคุณ แต่หลายสิ่งที่เรานับไม่ได้เริ่มต้นที่ 1 คุณอายุ 0 ปีในปีแรกของชีวิตของคุณ - คุณไม่ได้เริ่มต้นที่ 1 วันนั้นไม่เริ่ม เวลา 1:00 น. - เริ่มเวลา 0:00 น. เมื่อฉันวัดระยะทางที่เดินทางจากบ้านของฉันฉันเริ่มต้นที่ศูนย์ การนับจากศูนย์เป็นเรื่องธรรมดาสำหรับมนุษย์นับเป็นหนึ่ง - มันขึ้นอยู่กับบริบทแม้ว่าคุณจะถูกต้องที่เราจะไม่พูดถึงลูก zeroeth ของเรา :)
Aaron Rasmussen

6

จากข้อมูลจำเพาะตัวเลือก CSS ระดับ 3 :

6.6.5.2 : nth-child () pseudo-class

:nth-child(an+b)สัญกรณ์หลอกชั้นแสดงให้เห็นถึงองค์ประกอบที่มีan+b-1พี่น้องก่อนที่มันจะอยู่ในต้นไม้เอกสารสำหรับจำนวนเต็มบวกใด ๆ หรือค่าเป็นศูนย์ของnและมีองค์ประกอบของผู้ปกครอง สำหรับค่าaและbมากกว่าศูนย์นี้ได้อย่างมีประสิทธิภาพแบ่งเด็กองค์ประกอบที่เป็นกลุ่มของaองค์ประกอบ (กลุ่มสุดท้ายที่เหลือการ) และการเลือกbองค์ประกอบ TH ของแต่ละกลุ่ม ตัวอย่างเช่นตัวเลือกนี้จะอนุญาตให้ที่อยู่ทุก ๆ แถวในตารางและสามารถใช้เพื่อสลับสีของข้อความในย่อหน้าในรอบสี่ aและbค่าต้องจำนวนเต็ม (บวกลบหรือศูนย์) ดัชนีของลูกคนแรกขององค์ประกอบคือ 1

มันมีรายละเอียดมากขึ้นพร้อมตัวอย่าง ดูเหมือนว่าการคำนวณสุดท้ายของan+bผลรวมต้องเป็นจำนวนบวก

เมื่อa= 0 ชิ้นส่วนไม่จำเป็นต้องรวม (ยกเว้นbส่วนนั้นถูกละเว้น) เมื่อanไม่รวมและbไม่เป็นลบเครื่องหมาย + ก่อนหน้าb(เมื่อได้รับอนุญาต) อาจถูกละเว้น ในกรณีนี้ไวยากรณ์ง่าย:nth-child(b)ขึ้น

หากทั้งสองaและbมีค่าเท่ากับศูนย์หลอกระดับหมายถึงไม่มีองค์ประกอบในต้นไม้เอกสาร

การจัดรูปแบบเพิ่มเติมในวรรคสุดท้ายเป็นสิ่งที่เราต้องเน้น


0

อาจสอดคล้องกับ XPath ภาษาการประมวลผล XML / HTML อื่น คำถามใดที่ XPath ใช้การจัดทำดัชนีตาม 1

ดู/programming/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0

ที่เกี่ยวข้อง (แต่อ้างแย้ง) คือ:

"... ตรรกะแบบอิง 1 ตัวเป็นทางเลือกที่ถูกต้องสำหรับ XPath และ XSLT ... เนื่องจากภาษาได้รับการออกแบบสำหรับผู้ใช้ไม่ใช่สำหรับโปรแกรมเมอร์และผู้ใช้ยังคงมีนิสัยที่ล้าสมัยในการอ้างถึงบทแรกในหนังสือว่า บทที่หนึ่ง..."

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.