: nth-child ()가 0이 아닌 1에서 반복되는 이유는 무엇입니까?
이 예에 표시된대로 . 왜 두 번째 요소가 아닌 첫 번째 요소를 선택합니까?
p :nth-child(1)
: nth-child ()가 0이 아닌 1에서 반복되는 이유는 무엇입니까?
이 예에 표시된대로 . 왜 두 번째 요소가 아닌 첫 번째 요소를 선택합니까?
p :nth-child(1)
답변:
당신이 당신의 자신의 아이들을 세면 당신은 "나의 제 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 기반 인덱싱을 선택하는 것이 당연합니다. .
로부터 CSS 레벨 3 선택기 사양 :
6.6.5.2. : nth-child () 의사 클래스
:nth-child(an+b)
가상 클래스 표기법 갖는 소자 나타내는an+b-1
양의 정수 또는 제로 값, 문서 트리에서 이전 형제n
및 부모 요소를 갖는다. 값 이 0보다 크a
거나b
큰 경우 요소의 자식을a
요소 그룹 (마지막 그룹이 나머지를 취하는) 으로 효과적으로 나누고b
각 그룹 의 th 요소를 선택합니다 . 예를 들어, 이렇게하면 선택자가 테이블의 다른 모든 행을 처리 할 수 있으며 4주기마다 단락 텍스트의 색을 번갈아 사용할 수 있습니다.a
및b
값은 정수 (양극, 음극, 또는 제로)이어야한다. 요소의 첫 번째 자식의 인덱스는 1입니다.
예제를 통해 더 자세히 설명합니다. 최종 계산은 an+b
총 양수 여야합니다.
하면
a
0 = (않는 부분은 An 필요하지 포함 할b
부분이 이미 생략). 시an
포함되지b
않은 네거티브 전에 + 기호 인b
(허용 된 경우)도 생략 할 수있다. 이 경우 구문이로 단순화됩니다:nth-child(b)
.두 경우
a
와는b
제로에 동일, 의사 - 클래스는 문서 트리에서 어떤 요소를 나타냅니다 없습니다.
마지막 단락의 추가 서식은 강조하기위한 것입니다.
다른 XML / HTML 처리 언어 인 XPath와의 일관성을 위해 아마도. XPath는 왜 1 기반 인덱싱을 사용합니까?
보다 /programming/3319341/why-do-indexes-in-xpath-start-with-1-and-not-0를
관련이 있지만 논쟁의 여지가있는 인용문은 다음과 같습니다.
"... 1 기반 논리는 XPath 및 XSLT에 올바른 선택이었습니다 ... 언어는 프로그래머가 아닌 사용자를 위해 설계 되었기 때문에 사용자는 여전히이 책의 첫 번째 장을 제 1 장 ... "