Чому: 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
елементів (остання група, що бере решту), і вибираєb
th елемент кожної групи. Наприклад, це дозволяє селекторам звертатися до будь-якого іншого рядка таблиці і може використовуватися для чергування кольору тексту абзацу в циклі чотирьох. Значення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 ... тому що мова була розроблена для користувачів, а не для програмістів, і користувачі досі мають цю старомодну звичку посилатися на першу главу книги як Глава перша ... "