Bagaimana saya bisa memilih semua anak dari suatu elemen kecuali anak terakhir?


371

Bagaimana saya memilih semua kecuali anak terakhir yang menggunakan penyeleksi CSS3?

Misalnya, untuk mendapatkan hanya anak terakhir akan div:nth-last-child(1).

Jawaban:


690

Anda dapat menggunakan negasi pseudo-class:not() terhadap :last-childpseudo-class . Saat diperkenalkan CSS Selectors Level 3, itu tidak berfungsi di IE8 atau di bawah:

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

ini digunakan apa adanya? Tanpa apa pun sebelum usus besar pertama?
Johnny mengapa

Anda akan menambahkan ini ke pemilih basis normal Anda ( divdalam contoh OP)
Dallas

2
Bagi mereka yang menggunakan SASS, Anda bisa menggunakan &:not(:last-child) { /* styles * }bagian dalam elemen yang ingin Anda pengaruhi.
Martin James

100

Sederhanakan:

Anda dapat menerapkan gaya Anda ke semua div dan inisialisasi ulang yang terakhir dengan : last-child :

misalnya dalam CSS :

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

atau dalam SCSS :

.yourclass{
    border: 1px solid rgba(255, 255, 255, 1);
    &:last-child{
        border: 0;
    }
}
  • mudah dibaca / diingat
  • cepat untuk dieksekusi
  • kompatibel dengan browser (IE9 + karena masih CSS3)

6
Bagi saya setidaknya, ini memiliki bau kode yang buruk. Anda secara sadar menerapkan aturan css ke elemen yang tidak Anda inginkan, hanya kemudian mencoba membuat kue lapisan lain untuk membatalkannya. Bagi saya, itu bau kode yang buruk. Saya khawatir bahwa jenis css coding dapat menyebabkan semakin sulit untuk mempertahankan css. Dengan kata lain, Anda sedang membuat kode spaghetti css.
Alexander Bird

1
ini juga bisa berfungsi tetapi masalahnya adalah ketika Anda memiliki banyak gaya css seperti (batas, warna, ukuran font, dll.) Anda perlu menginisialisasi gaya css lagi ke: last-child. Jadi solusi yang cocok adalah menggunakan: not (: last-child)
davecar21

33

Solusi Nick Craver bekerja tetapi Anda juga dapat menggunakan ini:

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

Chris Coyier dari CSS Trik membuat penguji yang bagus untuk ini.


Mozilla memiliki definisi yang baik tentang : nth-last-child
Clint Pachl

1
Beberapa orang mengatakan bahwa :notpseudo sangat mahal. Jadi mungkin ide yang baik untuk mencoba menghindarinya jika memungkinkan.
Neurotransmitter

22

Ketika IE9 datang, akan lebih mudah. Namun, sering kali, Anda dapat mengalihkan masalah ke masalah yang memerlukan: anak pertama dan gaya sisi yang berlawanan dari elemen (IE7 +).



1

untuk menemukan elemen dari yang terakhir, gunakan

<style>
ul li:nth-last-of-type(3n){ color:#a94442}  /**/
</style>

1

Solusi Nick Craver memberi saya apa yang saya butuhkan tetapi membuatnya eksplisit bagi mereka yang menggunakan 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
}

kode ini harus menerapkan gaya ke semua

  • kecuali anak terakhir

  • Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
    Licensed under cc by-sa 3.0 with attribution required.