あなたの問題は、それがセレクター:last-of-type
として機能することを読んで考えていることですが、代わりにそれは特に要素のみを意味します。残念ながら、クラスの最後のインスタンスのセレクターはありません。:last-of-class
W3Cから:
:last-of-type
疑似クラスは、その型の最後の兄弟である要素を表します。
セレクターとして次のことp.visible:last-of-type
を行います。
:last-of-type
HTML の各包含要素内の要素の各リスト (たとえば、1 つ以上の要素。兄弟のない子がまだ適用されている可能性があります) を調べます。
- そのリストの最後の要素を見つけます
<p>
要素かどうかを調べる
- クラスがあるかどうかを確認します
.visible
。
要するに、セレクターはそのスタイルを、そのクラス<p>
も持つ.visible
にのみ適用します。マークアップでは、最初の 2 つの<p>
要素だけがそのクラスを持ちます。3番目はそうではありません。
説明するさまざまなスタイルのデモを次に示します。
p:last-of-type {
/* this will be applied in the third paragraph because the pseudo-selector checks for nodes only */
color: green;
}
p.visible:last-of-type {
/* this does not get applied, because you are using the pseudo-selector with a specific class in addition to the node type. */
color: red;
}
<p class="visible">First paragraph.</p>
<p class="visible">Second paragraph.</p>
<p>Third paragraph.</p>
あなたの究極の目標として、
クラス .visible を使用して div 内の最後の要素を選択するにはどうすればよいですか? これには JavaScript を使用したくありません。
最も簡単でパフォーマンスの高い方法は、スタイルを適用しようとしている方法を逆にすることです。3 つの div のうち 2 つを非表示にしようとする代わりに、非表示にする div の 1 つにはクラスがあり、非表示にする div にはクラスがなく、表示する div は非表示にする 1 つの div と同じクラスを共有しますこれにもクラスがあります(かなり紛らわしいですね)、次の手順を実行します。
- より小さい要素 (または要素のグループ) にのみクラスを追加します。
- 要素のデフォルト スタイルを、クラスで達成したくないものに設定します。
- クラスのスタイルを、達成したいものに設定します。
p {
display: none;
}
.visible {
display: block;
}
<div>
<p>This should be hidden</p>
<p class="visible">This should be displayed</p>
<p>This should be hidden</p>
</div>
このデモからわかるように、HTML と CSS が単純になるだけでなく、*-of-type
疑似セレクターではなくクラス セレクターのみを使用する利点もあり、ページの読み込みが速くなります (詳細は以下を参照)。 .
後続または親セレクターがないのはなぜですか?
これにより、ページ上で動的にクラス名を 1 つ変更するだけで、多くの Web ページの速度が低下する可能性があります。
2008 年に WebKit の実装に取り組んでいた Dave Hyatt は、これらの実装が回避されるいくつかの理由について言及しました。
親セレクターを使用すると、誤ってドキュメント全体をひっくり返すことが非常に簡単になります。人々はこのセレクターを悪用する可能性があり、悪用するでしょう。それをサポートすることは、人々に首を吊るすためのたくさんのロープを与えることです.
CSS3 セレクターに関する悲しい真実は、ページのパフォーマンスが気になる場合は、まったく使用すべきではないということです。マークアップをクラスと ID で装飾し、兄弟、子孫、および子セレクターの使用をすべて回避しながら、それらのみを照合すると、実際には、すべてのブラウザーでページのパフォーマンスが大幅に向上します。