element:first-child
과 의 차이를 알 수 없습니다.element:first-of-type
예를 들어 div가
div:first-child
→ <div>
부모의 첫 번째 자식 인 모든 요소.
div:first-of-type
→ 부모 <div>
의 첫 번째 <div>
요소 인 모든 요소 .
이것은 똑같은 것처럼 보이지만 다르게 작동합니다.
누군가 설명해 주시겠습니까?
답변
상위 요소에는 하나 이상의 하위 요소가있을 수 있습니다.
<div class="parent">
<div>Child</div>
<div>Child</div>
<div>Child</div>
<div>Child</div>
</div>
이 아이들 중 한 명만이 첫 번째가 될 수 있습니다. 다음과 일치합니다 :first-child
.
<div class="parent">
<div>Child</div> <!-- :first-child -->
<div>Child</div>
<div>Child</div>
<div>Child</div>
</div>
의 차이 :first-child
와는 :first-of-type
즉 :first-of-type
, HTML에서의 태그 이름으로 표현의 요소 유형의 첫 번째 요소를 일치 하는 요소는 부모의 첫 번째 자식없는 경우에도 . 지금까지 우리가보고있는 자식 요소는 모두 div
s 였지만, 잠시만 기다려주세요.
현재로서는 그 반대도 마찬가지입니다. 어떤 :first-child
것도 :first-of-type
필요에 따라 가능합니다. 여기에서 첫 번째 자식도 첫 번째 div
이므로 유형 선택기뿐만 아니라 두 가상 클래스 와 일치 합니다div
.
<div class="parent">
<div>Child</div> <!-- div:first-child, div:first-of-type -->
<div>Child</div>
<div>Child</div>
<div>Child</div>
</div>
이제 첫 번째 자식의 유형을에서 div
다른 h1
것으로 변경하면 여전히 첫 번째 자식이되지만 더 이상 첫 번째 자식이 아닙니다 div
. 대신 첫 번째 (유일한)가 h1
됩니다. div
동일한 부모 내에서이 첫 번째 자식 뒤에 다른 요소 가있는 경우 해당 div
요소 중 첫 번째 요소가 일치 div:first-of-type
합니다. 주어진 예에서 두 div
번째 자식은 첫 번째 자식이 다음으로 변경된 후 첫 번째 자식이됩니다 h1
.
<div class="parent">
<h1>Child</h1> <!-- h1:first-child, h1:first-of-type -->
<div>Child</div> <!-- div:nth-child(2), div:first-of-type -->
<div>Child</div>
<div>Child</div>
</div>
그 주 :first-child
에 해당합니다 :nth-child(1)
.
이것은 또한 어떤 요소라도 한 번에 하나의 자식 요소 만 일치 할 수 있지만, 가지고있는 자식 유형의 수만큼 의사 클래스와 :first-child
일치하는 자식을 가질 수 있고 가질 :first-of-type
수 있음을 의미합니다. 이 예에서 선택자 .parent > :first-of-type
(암시 적 *
으로 :first-of-type
의사를 한정하는 )는 하나가 아닌 두 요소 와 일치합니다 .
<div class="parent">
<h1>Child</h1> <!-- .parent > :first-of-type -->
<div>Child</div> <!-- .parent > :first-of-type -->
<div>Child</div>
<div>Child</div>
</div>
:last-child
and :last-of-type
: any :last-child
도 필요에 따라 동일합니다 :last-of-type
. 부모 내에서 다른 요소가 절대로 뒤 따르지 않기 때문입니다. 그러나 마지막 div
이 마지막 자녀 이기 때문에 h1
마지막 자녀 임에도 불구하고 마지막 자녀가 될 수 없습니다.
:nth-child()
및 :nth-of-type()
기능은 매우 유사 원칙적합니다 (같이 임의의 정수 인수를 사용하는 경우 :nth-child(1)
상술 한 예), 그러나이 다른 곳으로 유사한 요소의 전위 개수이다 :nth-of-type()
. 자세한 내용은 p : nth-child (2)와 p : nth-of-type (2)의 차이점은 무엇입니까?
답변
first-child
와 first-of-type
여기 의 차이점을 보여주는 예제를 만들었습니다 .
HTML
<div class="parent">
<p>Child</p>
<div>Child</div>
<div>Child</div>
<div>Child</div>
</div>
CSS
.parent :first-child {
color: red;
}
.parent :first-of-type {
background: yellow;
}
.parent p:first-child {
text-decoration: line-through;
}
// Does not work
.parent div:first-child {
font-size: 20px;
}
// Use this instead
.parent div:first-of-type {
text-decoration: underline;
}
// This is second child regardless of its type
.parent div:nth-child(2) {
border: 1px black solid;
}
전체 예제를 보려면 https://jsfiddle.net/bwLvyf3k/1/ 를 방문 하십시오.
답변
첫 자식과 첫 자식의 차이점은 예제를 통해 이해할 수 있습니다. 저가 만든 다음 예제를 이해해야하며 실제로 작동합니다. 편집기에 코드를 붙여 넣을 수 있습니다. 그들은 일한다
첫 번째 유형에 대한 코드 # 1 :
<!DOCTYPE html>
<html>
<head>
<title>clear everything</title>
<style>
p:first-of-type{
color:red;
}
</style>
<head>
<body>
<p class="p1">some text</p>
<div>
<p class="p2">some text</p>
<div>
<p class="p3">some text</p>
</div>
<p class="p4">some text</p>
</div>
<p class="p5">some text</p>
</body>
</html>
결과
.p1, .p2, .p3은 스타일이 지정되고 색상은 빨간색이됩니다. 두 번째 div 뒤에 .p1을 입력해도 빨간색이됩니다.
첫 자녀를위한 코드 # 2 :
<!DOCTYPE html>
<html>
<head>
<title>clear everything</title>
<style>
p:first-child{
color:red;
}
</style>
<head>
<body>
<p class="p1">some text</p>
<div>
<p class="p2">some text</p>
<div>
<p class="p3">some text</p>
</div>
<p class="p4">some text</p>
</div>
<p class="p5">some text</p>
</body>
</html>
결과:
두 번째 div 2 뒤에 .p2를 넣으면 빨간색이 아니지만 첫 번째 경우에는 작동했습니다.