ฉันจะเลือกลูกทั้งหมดขององค์ประกอบยกเว้นลูกคนสุดท้ายได้อย่างไร


371

ฉันจะเลือกทั้งหมดยกเว้นลูกคนสุดท้ายที่ใช้ตัวเลือก CSS3 ได้อย่างไร

div:nth-last-child(1)ยกตัวอย่างเช่นจะได้รับเพียงเด็กที่ผ่านมาจะเป็น

คำตอบ:


689

คุณสามารถใช้คลาสเนชั่น:not()เนกาทีฟกับคลาส:last-childหลอกได้ มีการแนะนำ CSS Selectors ระดับ 3 มันไม่ทำงานใน IE8 หรือต่ำกว่า:

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

สิ่งนี้ถูกใช้ตาม - คืออะไร? ไม่มีอะไรก่อนลำไส้ใหญ่ครั้งแรก?
johny ทำไม

คุณจะผนวกสิ่งนี้เข้ากับตัวเลือกพื้นฐานปกติของคุณ ( divในตัวอย่าง OP)
ดัลลัส

2
สำหรับผู้ที่ใช้ SASS คุณสามารถใช้&:not(:last-child) { /* styles * }ภายในองค์ประกอบที่คุณต้องการได้
Martin James

100

ทำให้มันง่าย:

คุณสามารถนำสไตล์ของคุณไปใช้กับ 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 ดังนั้นการแก้ปัญหาที่เหมาะสมคือการใช้: ไม่ใช่ (: ลูกคนสุดท้าย)
davecar21

33

โซลูชันของ Nick Craver ทำงานได้ แต่คุณสามารถใช้สิ่งนี้ได้:

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

Chris Coyier จาก CSS Tricks ทำได้ดีมาก: ผู้ทดสอบคนนี้


Mozilla มีคำจำกัดความที่ดีคือ: nth-last-child
Clint Pachl

1
บางคนบอกว่า:notหลอกมีราคาแพงมาก ดังนั้นจึงเป็นความคิดที่ดีที่จะพยายามหลีกเลี่ยงสถานที่ที่เป็นไปได้
Neurotransmitter

22

เมื่อ IE9 มาถึงมันจะง่ายขึ้น แม้ว่าจะมีเวลามากคุณสามารถเปลี่ยนปัญหาเป็นสิ่งที่ต้องการ: ลูกคนแรกและจัดรูปแบบด้านตรงข้ามขององค์ประกอบ (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.