CSS Web制作 コーディング

【CSS】擬似クラス:first-childと:first-of-typeの違いとは

最初の要素を指定する方法が2つあるみたいだけど違いが分からない
実際に見たら分かると思うよ!

CSSで最初の要素を指定する擬似クラスに:first-child:first-of-typeがあるのですが、その違いについて今回は解説していきます。

最初の要素を指定する擬似クラス:first-childと:first-of-typeの違いとは

まずはそれぞれの違いを文章で見てみます。

:first-child

兄弟要素の中で最初の要素を指定

:first-of-type

兄弟要素の中で指定した要素の最初の要素を指定

これだけ見てもピンとこないと思うので、デモを見てみたいと思います。

今回ベースとなるHTMLはこちらになります(実際のコードとはちょっと違いますが、必要な部分だけ書いています)

<div class="box">
  <h2>1</h2>
  <span>2</span>
  <span>3</span>
  <span>4</span>
  <p>5</p>
  <p>6</p>
  <p>7</p>
  <p>8</p>
  <p>9</p>
  <p>10</p>
</div>

この.box内にある要素は全て兄弟要素となります。

そして指定した要素の文字色を赤色にしたいと思います。

 

h2タグを指定

まずはh2タグをそれぞれの方法で指定してみます。

.box h2:first-child {
  color: red;
}

.box h2:first-of-type {
  color: red;
}

See the Pen
CSSの要素指定( )
by junpei (@junpei-sugiyama)
on CodePen.


同じ結果になりましたね。

指定した要素が兄弟要素の最初の要素であるh2なので、どちらもスタイルが適用されました。

 

spanタグを指定

今度はspanタグをそれぞれの方法で指定してみます。

.box span:first-child {
  color: red;
}

.box span:first-of-type {
  color: red;
}

See the Pen
by junpei (@junpei-sugiyama)
on CodePen.

 

今回は:first-childが効いていません。

CSSでの指定はspan:first-childですね。

しかし:first-childは兄弟要素の最初の要素を指定するもので、今回のHTMLでは兄弟要素の最初の要素はspanタグではなくh2タグです。

兄弟要素の最初の要素(h2タグ)ではない要素(spanタグ)を指定したので適用されてないという事です。

 

そして:first-of-typeの方は兄弟要素の中の指定した要素の最初の要素を指定します。

今回それはspanタグの事を指します。

なのでspanタグの最初の要素である2にスタイルが適用されたという事です。

それではもう一度HTMLを見てみます。

<div class="box">
  <h2>1</h2> // 兄弟要素の最初の要素
  <span>2</span> // 兄弟要素の中の指定した要素の最初の要素(ここではspanタグを指定)
  <span>3</span>
  <span>4</span>
  <p>5</p>
  <p>6</p>
  <p>7</p>
  <p>8</p>
  <p>9</p>
  <p>10</p>
</div>

 

pタグを指定

今度はpタグをそれぞれの方法で指定してみます。

.box p:first-child {
  color: red;
}

.box p:first-of-type {
  color: red;
}

先ほどのspanタグが分かれば今回は予想出来ると思います。

See the Pen
CSSの要素指定( p)
by junpei (@junpei-sugiyama)
on CodePen.

:first-childの方はspanタグ同様効いていません。

そして:first-of-type兄弟要素の中の指定した要素の最初の要素はpタグなので、ここでは5にスタイルが適用されています。

 

最後の要素を指定する擬似クラス:last-childと:last-of-typeも考え方は同じ

先ほどまでは最初の要素を指定する方法について書きましたが、同じように最後の要素を指定する擬似クラスもあります。

先ほどの:first-childは兄弟要素の最初の要素なのでh2タグ(数字の1)を指していましたが、今回の:last-childは兄弟要素の最後の要素なのでpタグの最後(数字の10)を指します。

これも考え方は先ほどまでと同じなので、デモだけ見てみましょう。

h2タグを指定

.box h2:last-child {
  color: red;
}

.box h2:last-of-type {
  color: red;
}

See the Pen
CSSの最後の要素指定( h2タグ)
by junpei (@junpei-sugiyama)
on CodePen.

 

spanタグを指定

.box span:last-child {
  color: red;
}

.box span:last-of-type {
  color: red;
}

See the Pen
CSSの最後の要素指定( spanタグ)
by junpei (@junpei-sugiyama)
on CodePen.

 

pタグを指定

.box p:last-child {
  color: red;
}

.box p:last-of-type {
  color: red;
}

See the Pen
by junpei (@junpei-sugiyama)
on CodePen.

 

以上になります。

-CSS, Web制作, コーディング