HTML&CSS

【last-of-type】が効かない原因と対策3選

コーディングする際に、最後の要素や何番目の要素にだけスタイルを当てたい! 時ってありますよね。

そんな時に便利なのが、last-of-typeやntn-of-typeなどの疑似クラスです。
でも。。。。

last-of-typeで最後の要素にだけmarginを当てるぞ~ と思ってcssに書いても何故か機能しない。

ニャンコ
ニャンコ

今回はそんなlast-of-typeが効かない原因と対策を考えたいと思います。

「last-of-type」はクラスではなく、要素をカウントする

「last-of-type」は、cssの疑似クラスで、指定した「要素」の兄弟要素の中で最後の「要素」を指定します。

他にも最初の要素を指定する「first-of-type
何番目かを指定する「ntn-of-type」などがあります。

ここで注意したいのが、あくまでもカウントするのはクラス名などではなく、要素だということです。

「of-type」は要素の数をカウントする

「of-type」は要素、要はタグの種類によってカウントします。
下記に例を示します。

    <div>

        <a href="" class="a-class">aタグ1</a> <!-- aタグの1番目 -->
        <a href="" class="a-class">aタグ2</a> <!-- aタグの2番目 -->

        <p class="p-class">Pタグ1</p> <!-- pタグの1番目 -->
        <p class="p-class">Pタグ2</p> <!-- pタグの2番目 -->
        <p class="p-class">Pタグ3</p> <!-- pタグの3番目 -->
        <p>Pタグ4</p>                 <!-- pタグの4番目 -->

    </div>

実際にスタイルを当ててみる

aタグとpタグの最後の要素に赤色を指定してみます。

p:last-of-type {
    background-color: red;
}
a:last-of-type {
    background-color: red;
}
last-of-typeのスタイル適用結果

それぞれpタグとaタグの最後の要素にスタイルが当たりましたね。

「of-type」が効かない時があるのはなんで?

便利な「of-type」ですが、初学者は必ず「あれ?なんで聞かないの?」という時があると思います。
そういった時は大体クラスに「of-type」を使用しているときでしょう。

クラスに「of-type」を使用する

クラスにも「of-type」を使用することはできます。
ですが、よくある勘違いとして「指定したクラスの最後の要素」を指定できるわけではないということです。

実際に例を示します。

    <div class="wrap">
        <a href="" class="a-class">aタグ1</a> <!-- aタグの1番目-->
        <a href="" class="a-class">aタグ2</a> <!-- aタグの2番目-->

        <p class="p-class">Pタグ1</p> <!-- pタグの1番目-->
        <p class="p-class">Pタグ2</p> <!-- pタグの2番目-->
        <p class="p-class">Pタグ3</p> <!-- pタグの3番目-->
        <p>Pタグ4</p>                 <!-- pタグの4番目-->
    </div>

こちらは先ほどと同じ構成のタグです。

ここで、aタグに指定されている「a-class」とpタグに指定されている「p-class」に「last-of-type」を指定します。

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

その結果がこちら。

最後の要素にクラスがないためスタイルが当たらない

aタグの方は、スタイルが適用されていますが、pタグの方はスタイルが当たってません。

クラスに「of-type」を使用する際の注意点

原因は上で説明した通り、「of-type」はクラス名ではなく、要素を数えているということです。

Pタグの最後の要素はクラス名がついてない要素です。
この最後の要素に「p-class」クラスがついていないため、スタイルがあたりません。

つまり、最後のpタグに「p-class」ついていれば、下記のようにスタイルが当たります。

最後の要素にクラスをつけて実験

もしくは、クラス名のついていないpタグを削除すればクラス名のついている要素が最後になりますので、それでもスタイルが当たります。

クラス名のついてない要素を削除した結果

「of-type」が効かない時の対処法

対処法は様々ですが、いくつか紹介します。

タグ構成を変える

まずは、クラス名を持つ要素が兄弟間で最後になるようにタグ構成を変えることです。
上の項目の例でいうと、最後のpタグの要素を削除したり、タグをspanやdivに変える。
もしくは、クラス名を持った要素をさらにdivで囲ったりなどでしょうか

正直わざわざスタイルを変えるためにタグ構成を変えるのもどうかとは思いますが、複雑になりそうでなければ良いと思います。

:nth-of-typeで指定する

「last-of-type」ではなく「:nth-of-type()」を使用する。
これならば前から何番目の要素と指定できるので、使い勝手は良いかもしれません。
ただ、タグ構成が変わった場合スタイルが当たらなくなるかもしれませんので、注意が必要です。

個別にクラスを作る

「of-type」が効かなくて何がなんだか分からんというときは、個別に当てるスタイルを作成してさっさと済ませましょう。
タグ構成にも影響されないので修正もしやすいです。

以上 last-of-typeが効かないときの対処法でした。
便利ですが、スタイルがタグ構成に影響されるのでほどほどに使用しましょう。

HTMLへの理解を深めたいあなたへおすすめ

おすすめ

7000本の授業が見放題!社会人向けオンライン学習動画【Schoo(スクー)】

7000本の授業が見放題!オンライン学習動画【Schoo(スクー)】

総合評価 :

参加型生放送授業」と、「8,000本以上の録画授業で動画学習
「WEBアプリケーション開発【入門】」や「HTML・CSS基礎」などWEB制作講座も多彩!
参加型生放送授業は無料録画授業は月/980円と格安で学べる!

  • 365日配信される参加型生放送授業が無料
  • チャットで業界の気軽に質問できる
  • 月/980円で今までの授業がどれでも見放題!
  • WEB制作や、プログラミング講座も多彩な講座が用意されています。

\ まずは無料授業を体験! /

【Schoo(スクー)】

オシャレなサイトなので、是非一度ご覧ください。

-HTML&CSS
-,