最後の子を除く要素のすべての子を選択するにはどうすればよいですか?


371

CSS3セレクターを使用して、最後の子以外のすべてをどのように選択しますか?

たとえば、最後の子だけを取得するにはになりますdiv:nth-last-child(1)

回答:


689

あなたは使用することができ否定擬似クラスの:not()に対して:last-child擬似クラス。CSSセレクターレベル3が導入されたため、IE8以下では機能しません。

:not(:last-child) { /* styles */ }

これはそのまま使用されますか?最初のコロンの前に何もないですか?
ジョニーなぜ

これを通常のベースセレクター(divOPの例)に追加します
ダラス

2
SASSを使用する場合&:not(:last-child) { /* styles * }は、影響を与える要素の内部で使用できます。
マーティンジェームズ

100

それを簡単に:

すべてのdivにスタイルを適用し、:last-childを使用して最後のdivを再初期化できます

例えばCSSで

.yourclass{
    border: 1px solid blue;
}
.yourclass:last-child{
    border: 0;
}

またはSCSSで

.yourclass{
    border: 1px solid rgba(255, 255, 255, 1);
    &:last-child{
        border: 0;
    }
}
  • 読みやすい/覚えやすい
  • 実行が速い
  • ブラウザー互換(IE9以降はまだCSS3なので)

6
少なくとも私にとっては、これはコードの悪臭を放ちます。意図的に、CSSルールを不要な要素に適用している場合にのみ、別のレイヤーを結合して元に戻します。私にとって、それは悪いコードのにおいです。ある種のcssコーディングがcssの管理をますます難しくすることを恐れています。つまり、スパゲッティコードcssを作成していることになります。
Alexander Bird

1
これも機能する可能性がありますが、問題は、(ボーダー、色、フォントサイズなどの)CSSスタイルが多数ある場合に、CSSスタイルを:last-childに再度初期化する必要があることです。したがって、適切な解決策は:not(:last-child)を使用することです
davecar21

33

Nick Craverのソリューションは機能しますが、これを使用することもできます。

:nth-last-child(n+2) { /* Your code here */ }

CSS TricksのChris Coyierがこのための素晴らしい:nthテスターを作りました。



1
:not疑似は非常に高価であると言う人もいます。そのため、可能な限り回避することをお勧めします。
神経伝達物質

22

IE9が登場すると、より簡単になります。ただし、多くの場合、問題を:first-childを必要とするものに切り替え、要素の反対側(IE7 +)をスタイルできます。




1

Nick Craverのソリューションは私に必要なものを与えてくれましたが、CSS-in-JSを使用している人のためにそれを明確にするために:

const styles = {
  yourClass: {
    /* Styles for all elements with this class */
    '&:not(:last-child)': {
      /* Styles for all EXCEPT the last element with this class */
    },
  },
};

1
.nav-menu li:not(:last-child){
    // write some style here
}

このコードはすべてにスタイルを適用する必要があります

  • 最後の子供を除いて

  • 弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
    Licensed under cc by-sa 3.0 with attribution required.