CSS의 : nth-child ()가 0이 아닌 1부터 시작하는 이유는 무엇입니까?


15

: nth-child ()가 0이 아닌 1에서 반복되는 이유는 무엇입니까?

예에 표시된대로 . 왜 두 번째 요소가 아닌 첫 번째 요소를 선택합니까?

p :nth-child(1)

12
"배열 지수는 0 또는 1에서 시작해야 하는가? 0.5에 대한 내 타협은 적절한 고려없이 거부되었다." -Stan Kelly-Bootle
Mason Wheeler

1
나는 이것이 가까운 투표를 할 것이라고 생각하기 때문에 CSS에서 1 인덱싱의 다른 예를 인용하고 일관성을 주장하거나 다음 중 하나에서 관련 성명을 찾아 이론적으로 객관적으로 대답 할 수 있기 때문에이 이론을 공개적으로 남겨두고 있습니다. 실제로 CSS 표준 결정을 내리는 사람들. 나는 CSS에 대해 거의 알지 못하지만, 우리가 다른 모든 것들이 0으로 색인되는 이유에 대한 정당성없이 명백한 "일반적인 사람들이 어떻게 계산하는지"논리를 만드는 대답을지지하지 않는 한 이것을 열어두면 아무런 해가 없습니다.
Ixrec

1
@lxrec : "다른 모든 것은 0- 인덱싱된다"는 주장이 정당화되어야한다고 생각합니다. 엘리자베스 여왕 제로, 크리스마스 제로 데이, 왼쪽으로 0 번째 거리 또는 페이지에서 0 번째 단어는 말하지 않습니다.
JacquesB

@lxrec 내 대답에서 XPath는 1 기반 인덱싱의 선례로 인용됩니다. 실제로 요소인지 우연인지는 확실하지 않지만 다른 XML 중심 시스템이므로 의미가 있습니다.
user949300

답변:


15

당신이 당신의 자신의 아이들을 세면 당신은 "나의 제 0의 아이"가 아니라 "나의 첫번째 아이", "나의 두번째 아이"등을 말할 것입니다. 이것은 단순히 인간이 계산하는 방식입니다. (참고 : 이것은 나에 의한 주관적인 의견이 아닙니다. 문자 그대로 서 수가 작동하는 방식입니다.)

당신이 질문을하는 이유는 아마도 당신이 프로그래머이기 때문에 많은 프로그래밍 언어가 배열을 색인하고 0에서 항목을 나열하기 때문일 것입니다. C와 같은 저수준 언어에서 배열은 실제로 메모리 주소에 대한 포인터이기 때문입니다. 첫 번째 항목과 색인은이 포인터와 관련된 오프셋입니다. 따라서 array[0]첫 번째 항목의 array[1]주소를 의미하고 첫 번째 항목의 주소에 1 항목의 크기, 즉 두 번째 항목 등을 더한 주소를 의미합니다.

포인터 산술을 직접 지원하지 않는 많은 고급 언어는 일관성과 친숙성을 위해 0 기반 색인을 유지했습니다. 예를 들어 JavaScript의 배열이 완전히 다른 방식으로 구현 되더라도 JavaScript를 포함하여 C 파생 구문이있는 모든 언어가 있습니다. 그러나 이것은 COBOL, Fortran, Lua 및 일부 Basic의 1 기반 인덱싱과 같은 모든 언어가 아닙니다. (Visual Basic은 자연스럽게 구성 할 수 있도록하여 두 환경 중 최악을 선택했습니다.) 따라서 다른 모든 언어에서 0 기반 색인을 사용하는 것은 아닙니다. XPath와 XQuery는 그 가치에 따라 1 기반 인덱싱도 사용합니다.

대부분의 프로그래머는 1 및 0 기반 인덱싱에 익숙하지만 보통 사람들은 자연스럽게 1부터 계산하며 CSS는 프로그래머뿐만 아니라 디자이너 및 그래픽 전문가를 위해 설계된 언어이므로 1 기반 인덱싱을 선택하는 것이 당연합니다. .



1
CSS가 주로 프로그래머가 아닌 사람들이 사용하기위한 것이라고 생각한다고 대답하면 도움이 될 것입니다.
gnat

1
@gnat 자식이 0이라고 말하는 항목을 프로그래밍 할 수있는 곳이 있습니까? 선택기는 n 번째 자식이므로 처음부터 시작하는 것이 논리적입니다.
Sami Kuhmonen

1
마지막 단락을 제외한 모든 것을 삭제할 수 있습니까? 다른 모든 것은이 SE에 대한 상식입니다. "대부분의 프로그래머가 ...... 자연스럽게 1 기반 색인 생성을 선택하는 동안"
0fnt

2
나는 당신의 대답에 동의하지 않지만, 우리가 계산하는 많은 것은 1에서 시작하지 않습니다. 당신은 인생의 첫해에 0 세입니다-당신은 1에서 시작하지 않습니다. 하루는 시작되지 않습니다 오전 1시에-오전 10시에 시작합니다. 집에서 이동 한 거리를 측정 할 때 0에서 시작합니다. 0에서 계산하는 것은 하나의 계산으로 인간에 대한 마찬가지로 자연 - 당신은 우리가 : 우리의 제로 번째의 아이의 말을 절대 못했습니다 것을 있지만 그것은 문맥에 따라 달라집니다
아론 라스무센

6

로부터 CSS 레벨 3 선택기 사양 :

6.6.5.2. : nth-child () 의사 클래스

:nth-child(an+b)가상 클래스 표기법 갖는 소자 나타내는 an+b-1양의 정수 또는 제로 값, 문서 트리에서 이전 형제 n및 부모 요소를 갖는다. 값 이 0보다 크 a거나 b큰 경우 요소의 자식을 a요소 그룹 (마지막 그룹이 나머지를 취하는) 으로 효과적으로 나누고 b각 그룹 의 th 요소를 선택합니다 . 예를 들어, 이렇게하면 선택자가 테이블의 다른 모든 행을 처리 할 수 ​​있으며 4주기마다 단락 텍스트의 색을 번갈아 사용할 수 있습니다. ab값은 정수 (양극, 음극, 또는 제로)이어야한다. 요소의 첫 번째 자식의 인덱스는 1입니다.

예제를 통해 더 자세히 설명합니다. 최종 계산은 an+b총 양수 여야합니다.

하면 a0 = (않는 부분은 An 필요하지 포함 할 b부분이 이미 생략). 시 an포함되지 b않은 네거티브 전에 + 기호 인 b(허용 된 경우)도 생략 할 수있다. 이 경우 구문이로 단순화됩니다 :nth-child(b).

두 경우 a와는 b제로에 동일, 의사 - 클래스는 문서 트리에서 어떤 요소를 나타냅니다 없습니다.

마지막 단락의 추가 서식은 강조하기위한 것입니다.


0

다른 XML / HTML 처리 언어 인 XPath와의 일관성을 위해 아마도. XPath는 왜 1 기반 인덱싱을 사용합니까?

보다 /programming/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0를

관련이 있지만 논쟁의 여지가있는 인용문은 다음과 같습니다.

"... 1 기반 논리는 XPath 및 XSLT에 올바른 선택이었습니다 ... 언어는 프로그래머가 아닌 사용자를 위해 설계 되었기 때문에 사용자는 여전히이 책의 첫 번째 장을 제 1 장 ... "

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.