私は違いを伝えることができないelement:first-child
とelement:first-of-type
たとえば、divがあったとします
div:first-child
→ <div>
親の最初の子であるすべての要素。
div:first-of-type
→ 親の<div>
最初の<div>
要素であるすべての要素。
これはまったく同じように見えますが、動作が異なります。
誰かが説明してもらえますか?
私は違いを伝えることができないelement:first-child
とelement:first-of-type
たとえば、divがあったとします
div:first-child
→ <div>
親の最初の子であるすべての要素。
div:first-of-type
→ 親の<div>
最初の<div>
要素であるすべての要素。
これはまったく同じように見えますが、動作が異なります。
誰かが説明してもらえますか?
回答:
親要素には、1つ以上の子要素を含めることができます。
<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
、最初の子がに変更された後、2番目の子が最初の子になり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
一度に一致する子要素は1つだけである可能性がありますが、:first-of-type
擬似クラスに一致する子の数は、それが持つ子の型の数と同じ数だけ存在できます。この例では、セレクター.parent > :first-of-type
(pseudoを暗黙的に*
修飾:first-of-type
)は、1つだけでなく2つの要素に一致します。
<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/にアクセスしてください。
first-child-typeとfirst-childの違いは、例で理解できます。私が作成した次の例を理解する必要があります。これは実際に機能し、エディターにコードを貼り付けると、それらがどのように、どのように機能するかを理解できます。彼らが働きます
最初のタイプのコード#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はスタイル設定され、その色は赤になります。2番目の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>
結果:
2番目のdiv 2の後に.p2を置くと、赤くなりませんが、最初の場合は機能していました。