[解決済み] :last-child が期待通りに動作しない?
質問
問題は、このCSSとHTMLの中にあるのです。以下は jsFiddleへのリンク をサンプルコードとともにご紹介します。
HTML
<ul>
<li class"complete">1</li>
<li class"complete">2</li>
<li>3</li>
<li>4</li>
</ul>
CSS
li.complete:last-child {
background-color:yellow;
}
li.complete:last-of-type {
background-color:yellow;
}
これらのCSSの行は、どちらか一方が 最後のli要素に"complete"クラスが設定されています。 ?
jQueryのこのクエリも対象外です。
$("li.complete:last-child");
でも、これはそうなんです。
$("li.complete").last();
li {
background-color: green;
}
li.complete:first-child {
background-color: white;
}
li.complete:first-of-type {
background-color: red;
}
li.complete:last-of-type {
background-color: blue;
}
li.complete:last-child {
background-color: yellow;
}
<ul>
<li class="complete">1</li>
<li class="complete">2</li>
<li>3</li>
<li>4</li>
</ul>
解決方法は?
その
last-child
セレクタは、親の最後の子要素を選択するために使用されます。ある親要素の下にある、特定のクラスを持つ最後の子要素を選択するためには使用できません。
複合セレクタのもう一つの部分(これは
:last-child
には、最後の子要素が選択されるために満たすべき追加の条件を指定します。以下のスニペットでは、複合セレクタの残りの部分によって、選択される要素がどのように異なるかがわかります。
.parent :last-child{ /* this will select all elements which are last child of .parent */
font-weight: bold;
}
.parent div:last-child{ /* this will select the last child of .parent only if it is a div*/
background: crimson;
}
.parent div.child-2:last-child{ /* this will select the last child of .parent only if it is a div and has the class child-2*/
color: beige;
}
<div class='parent'>
<div class='child'>Child</div>
<div class='child'>Child</div>
<div class='child'>Child</div>
<div>Child w/o class</div>
</div>
<div class='parent'>
<div class='child'>Child</div>
<div class='child'>Child</div>
<div class='child'>Child</div>
<div class='child-2'>Child w/o class</div>
</div>
<div class='parent'>
<div class='child'>Child</div>
<div class='child'>Child</div>
<div class='child'>Child</div>
<p>Child w/o class</p>
</div>
ご質問の答えですが、以下のようにすると最後の子プロセスのスタイルが決まります。
li
要素の背景色を赤にしています。
li:last-child{
background-color: red;
}
しかし、次のセレクタはあなたのマークアップでは機能しません。
last-child
には
class='complete'
であるにもかかわらず
li
.
li.complete:last-child{
background-color: green;
}
があれば(あればこそ)うまくいったのですが、最後の
li
をマークアップしています。
class='complete'
.
の問い合わせに対応するために コメント :
.complete:last-of-typeは機能せず、.complete:first-of-typeは親要素の位置に関係なく機能するというのはかなり奇妙な気がします。ご助力ありがとうございます。
セレクタ
.complete:first-of-type
がフィドルで動作するのは、それが(つまり、要素が
class='complete'
の最初の要素であることに変わりはありません。
li
を親の中に入れてください。試しに
<li>0</li>
の下の最初の要素として
ul
をクリックすると、その
first-of-type
もフロップします。これは
first-of-type
と
last-of-type
セレクタは、親要素の下にある各タイプの最初と最後の要素を選択します。
BoltClockさんの投稿された回答を参考にすると これ のスレッドで、セレクタがどのように機能するかについて、より詳細な情報を得ることができます。これだけあれば十分です :)
関連
-
[解決済み】Telegramマークダウンの構文。太字 *と* イタリック?(2018年9月)
-
[解決済み】#記号のHTML文字実体は何ですか?
-
[解決済み] 高さを固定したBootstrapパネルボディの作り方
-
[解決済み] HTMLボタンのテキストを固定幅で折り返すには?
-
[解決済み] not:first-child セレクタ
-
[解決済み] not()擬似クラスは複数の引数を持つことができますか?
-
[解決済み] 特定のクラスや属性を持たない要素を選択するCSSセレクタは書けますか?
-
[解決済み] ある要素の最後の子を除くすべての子を選択するにはどうすればよいですか?
-
[解決済み] CSS :not(:last-child):after セレクタ
-
[解決済み] CSSセレクタで特定のクラス名を除外するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン