क्यों होता है: CSS में nth-child () 0 के बजाय 1 से शुरू होता है?


15

क्यों करता है: शून्य-बच्चे () शून्य के बजाय एक से पुनरावृति?

जैसा कि इस उदाहरण में दिखाया गया है । यह पहला तत्व क्यों चुनता है और दूसरा कब नहीं

p :nth-child(1)

12
"सरणी सूचकांकों को 0 या 1 से शुरू करना चाहिए? 0.5 का मेरा समझौता बिना अस्वीकार कर दिया गया, मैंने सोचा, उचित विचार।" - स्टेन केली-बूटल
मेसन व्हीलर

1
चूंकि मुझे संदेह है कि यह कुछ करीबी वोटों को आकर्षित करेगा, इसलिए मैं इस खुले को छोड़ रहा हूं क्योंकि सीएसएस में 1-इंडेक्सिंग के अन्य उदाहरणों का हवाला देते हुए या संगतता का दावा करते हुए, या तो एक से प्रासंगिक विवरण प्राप्त करके इस उद्देश्य का उत्तर देना कम से कम सैद्धांतिक रूप से संभव है। जो लोग वास्तव में CSS मानकों का निर्णय लेते हैं। मैं सीएसएस के बारे में लगभग इतना नहीं जानता कि वह खुद कर सकता है, लेकिन जब तक हम किसी भी ऐसे उत्तर को नहीं बनाते हैं जो स्पष्ट करता है कि "यह सामान्य इंसान कैसे गिनता है" बिना किसी औचित्य के तर्क " सब कुछ 0-अनुक्रमित है, तब इस खुले को छोड़ने में कोई बुराई नहीं है।
Ixrec

1
@lxrec: मुझे लगता है कि यह दावा है कि "बाकी सब 0-अनुक्रमित है" जिसे उचित ठहराया जाना चाहिए। आप क्वीन एलिजाबेथ द जीरोथ, क्रिसमस का शून्य दिवस, पृष्ठ पर बाईं ओर शून्य शब्द या शून्य शब्द नहीं कहेंगे।
जाकबीस

@lxrec मेरे उत्तर में XPath को 1-आधारित अनुक्रमण के लिए एक मिसाल के रूप में उद्धृत किया गया है। सुनिश्चित नहीं है कि यह वास्तव में एक कारक था, या सिर्फ एक संयोग है, लेकिन यह एक और एक्सएमएल केंद्रित प्रणाली है इसलिए यह समझ में आता है।
user949300

जवाबों:


15

यदि आप अपने स्वयं के बच्चों की गिनती करते हैं तो आप कहेंगे "मेरा पहला बच्चा", "मेरा दूसरा बच्चा" और इसी तरह, "मेरा शून्य बच्चा" नहीं। यह बस इंसानों की गिनती कैसे है। (नोट: यह मेरे द्वारा कुछ व्यक्तिपरक राय नहीं है। यह शाब्दिक है कि क्रमिक संख्याएँ कैसे काम करती हैं।)

कारण यह है कि आप सवाल भी पूछते हैं, क्योंकि शायद आप एक प्रोग्रामर हैं, और कई प्रोग्रामिंग भाषाएं हैं। सरणी और सूची आइटम 0. से हैं। इसका कारण यह है कि सी जैसी निम्न स्तर की भाषाओं में, सरणी वास्तव में मेमोरी पते के लिए एक संकेतक है। पहला आइटम और सूचकांक इस सूचक के सापेक्ष एक ऑफसेट है। तो array[0]इसका अर्थ है पहली वस्तु array[1]का पता , मतलब पहली वस्तु का पता और साथ ही १ वस्तु का आकार, अर्थात दूसरी वस्तु और इसी तरह।

कई उच्च-स्तरीय भाषाएं जो सूचक अंकगणित का सीधे समर्थन नहीं करती हैं, उन्होंने निरंतरता और परिचितता के लिए 0-आधारित अनुक्रमण को बनाए रखा है। उदाहरण के लिए, सी-व्युत्पन्न सिंटैक्स वाली सभी भाषाएँ - जावास्क्रिप्ट सहित, भले ही जावास्क्रिप्ट में सरणियों को पूरी तरह से अलग तरीके से लागू किया गया हो। लेकिन यह सभी सार्वभौमिक - COBOL, फोरट्रान, लुआ जैसी भाषाओं और कुछ बेसिक के 1-आधारित इंडेक्सिंग का उपयोग नहीं है। (विजुअल बेसिक ने स्वाभाविक रूप से इसे कॉन्फ़िगर करने योग्य बनाकर दोनों दुनिया में से सबसे खराब को चुना।) तो यह निश्चित रूप से हर दूसरी भाषा के 0-आधारित अनुक्रमण का उपयोग करने जैसा नहीं है। इसके लायक के लिए, XPath और XQuery भी 1-आधारित अनुक्रमण का उपयोग करते हैं।

जबकि अधिकांश प्रोग्रामर 1 और 0-आधारित दोनों अनुक्रमण से परिचित होंगे, सामान्य लोग स्वाभाविक रूप से 1 से गिनती करेंगे, और CSS केवल प्रोग्रामर के लिए नहीं बल्कि डिजाइनरों और ग्राफिक पेशेवरों के लिए डिज़ाइन की गई भाषा है, इसलिए 1-आधारित अनुक्रमण को चुना जाना स्वाभाविक है ।



1
यदि आपका उत्तर यह बताता है कि आपका विश्वास है कि CSS मुख्य रूप से गैर-प्रोग्रामर (अधिमानतः किसी भी तरह से समर्थित) द्वारा उपयोग के लिए है
gnat

1
@gnat किसी भी वस्तु की प्रोग्रामिंग में कहीं भी है जहाँ एक बच्चे को शून्य कहा जाता है? चूंकि चयनकर्ता पहले से शुरू करने के लिए तार्किक है।
सामी कुहोमेन

1
क्या आप अंतिम पैराग्राफ को छोड़कर सब कुछ हटा सकते हैं? बाकी सब कुछ इस एसई पर सामान्य ज्ञान है। "जबकि अधिकांश प्रोग्रामर ...... 1-आधारित इंडेक्सिंग चुनने के लिए स्वाभाविक"
031

2
मैं आपके उत्तर से असहमत नहीं हूं, लेकिन कई चीजें जो हम गिनते हैं, वे 1 से शुरू नहीं होती हैं। आप अपने जीवन के पहले वर्ष के लिए 0 वर्ष के हैं - आप 1 से शुरू नहीं करते हैं। दिन शुरू नहीं होता है 1:00 बजे - यह 0:00 बजे शुरू होता है जब मैं अपने घर से यात्रा की दूरी को मापता हूं, तो मैं शून्य पर शुरू करता हूं। शून्य से गिनती मनुष्य के लिए एक की तरह प्राकृतिक है - यह संदर्भ पर निर्भर करता है, हालाँकि आप सही हैं कि हम कभी भी अपने शून्य बच्चे की बात नहीं करेंगे :)
हारून रासमुसेन

6

वहाँ से सीएसएस स्तर 3 चयनकर्ता विशिष्टता :

6.6.5.2। : nth-child () छद्म वर्ग

:nth-child(an+b)छद्म वर्ग संकेतन एक तत्व है कि प्रतिनिधित्व करता an+b-1, दस्तावेज़ पेड़ में यह पहले भाई-बहन किसी भी धनात्मक पूर्णांक या शून्य मूल्य के लिए n, और एक माता पिता के तत्व है। के मूल्यों के लिए aऔर bशून्य से अधिक, यह प्रभावी रूप से तत्व के बच्चों के समूहों में विभाजित aतत्वों (पिछले समूह शेष लेने), और का चयन bप्रत्येक समूह के वें तत्व। उदाहरण के लिए, यह चयनकर्ताओं को एक तालिका में हर दूसरी पंक्ति को संबोधित करने की अनुमति देता है, और इसका उपयोग चार के चक्र में पैरा टेक्स्ट के रंग को वैकल्पिक करने के लिए किया जा सकता है। aऔर bमान पूर्णांक (सकारात्मक, नकारात्मक या शून्य) होना चाहिए। किसी तत्व के पहले बच्चे का सूचकांक 1 है।

यह उदाहरणों के साथ बहुत अधिक विस्तार में जाता है। ऐसा प्रतीत होता है कि अंतिम गणनाan+b एक सकारात्मक संख्या के लिए कुल होनी चाहिए।

जब a= 0, एक भाग को शामिल करने की आवश्यकता नहीं है (जब तक कि bभाग पहले से ही छोड़ा नहीं जाता है)। जब anशामिल नहीं है और bगैर-नकारात्मक है, तो पहले + संकेतb (जब अनुमति दी गई है) भी छोड़ा जा सकता है। इस मामले में वाक्यविन्यास सरल हो जाता है :nth-child(b)

अगर दोनों a और bशून्य के बराबर हैं, छद्म वर्ग दस्तावेज़ पेड़ में कोई तत्व का प्रतिनिधित्व करता है।

पिछले पैराग्राफ में अतिरिक्त स्वरूपण जोर जोड़ने के लिए मेरा है।


0

शायद XPath, एक और XML / HTML प्रसंस्करण भाषा के साथ संगति के लिए। जो सवाल पूछता है, XPath 1 आधारित अनुक्रमण का उपयोग क्यों करता है?

Https://stackoverflow.com/questions/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0 देखें

प्रासंगिक (लेकिन विवादास्पद उद्धरण) है:

"... 1-आधारित तर्क XPath और XSLT के लिए सही विकल्प था ... क्योंकि भाषा उपयोगकर्ताओं के लिए डिज़ाइन की गई थी, न कि प्रोग्रामर के लिए, और उपयोगकर्ताओं के पास अभी भी इस पुराने जमाने की आदत है कि किताब में पहले अध्याय का जिक्र है अध्याय एक..."

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.