Чому: nth-дитина () повторюється з одного замість нуля?
Як показано в цьому прикладі . Чому він вибирає перший елемент, а не другий, коли
p :nth-child(1)
Чому: nth-дитина () повторюється з одного замість нуля?
Як показано в цьому прикладі . Чому він вибирає перший елемент, а не другий, коли
p :nth-child(1)
Відповіді:
Якщо ви рахуєте своїх власних дітей, ви б сказали "моя перша дитина", "моя друга дитина" і так далі, а не "моя нуля дитина". Це просто те, як люди рахують. (Примітка. Це не є якоюсь суб'єктивною думкою. Це буквально, як працюють порядкові числа .)
Причина, коли ви навіть ставите запитання, ймовірно, тому, що ви програміст, і багато мов програмування індексують масив та елементи списку від 0. Причиною цього є те, що на мовах низького рівня, таких як C, масив справді є вказівником на адресу пам'яті. першого елемента, а індекс - це зміщення відносно цього вказівника. Таким чином, array[0]означає адресу першого елемента, array[1]означає адресу першого елемента плюс розмір 1 елемента, тобто другий елемент тощо.
Багато мов вищого рівня, які безпосередньо не підтримують арифметику вказівника, зберегли індексацію на основі 0 для послідовності та ознайомлення. Наприклад, усі мови з C-синтаксисом - включаючи JavaScript, хоча масиви в JavaScript реалізовані зовсім по-іншому. Але це зовсім не універсально - такі мови, як COBOL, Fortran, Lua та деякі Basic, використовують індексацію на основі 1. (Visual Basic природно вибрав найгірше з обох світів, зробивши його конфігурувальною.) Отже, це точно не так, як усі інші мови використовують індексацію на основі 0. Для чого варто, XPath та XQuery також використовують індексацію на основі 1.
Хоча більшість програмістів знайомі як з індексацією на основі 1, так і з 0, звичайно, люди звичайно рахуватимуть від 1, а CSS - це мова, призначена не лише для програмістів, але і для дизайнерів та графічних професіоналів, тому природно вибрати індексацію на основі 1. .
З специфікації селектора CSS рівня 3 :
6.6.5.2. : псевдоклас nth-child ()
:nth-child(an+b)Псевдо-клас позначення являє собою елемент , який маєan+b-1брат і сестра перед цим в дереві документа, для будь-якого позитивного цілого числа або нульового значенняn, і має батьківський елемент. Для значеньaіbбільше нуля це ефективно ділить дочірні елементи елемента на групиaелементів (остання група, що бере решту), і вибираєbth елемент кожної групи. Наприклад, це дозволяє селекторам звертатися до будь-якого іншого рядка таблиці і може використовуватися для чергування кольору тексту абзацу в циклі чотирьох. Значенняaіbповинні бути цілими числами (додатними, від’ємними або нульовими). Індекс першої дочірки елемента дорівнює 1.
Він детальніше описується на прикладах. Схоже, що підсумковий підрахунок an+bповинен дорівнювати додатній кількості.
Коли
a= 0, деталь не потрібно включати (якщоbчастина вже не опущена). Якщоanне включено іbне є негативним, знак + перед цимb(якщо це дозволено) також може бути опущений. У цьому випадку синтаксис спрощується до:nth-child(b).Якщо обидва
aіbдорівнюють нулю, псевдоклас не представляє жодного елемента в дереві документів.
Додатковий формат в останньому абзаці мій, щоб зробити акцент.
Можливо, для узгодженості з XPath, іншою мовою обробки XML / HTML. Що задає питання, чому XPath використовує індексацію на основі 1?
Побачити /programming/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0
Відповідна (але суперечлива цитата):
"... Логіка на основі 1 була правильним вибором для XPath та XSLT ... тому що мова була розроблена для користувачів, а не для програмістів, і користувачі досі мають цю старомодну звичку посилатися на першу главу книги як Глава перша ... "