CSS ลูกคนสุดท้าย (-1)


161

ฉันกำลังมองหาตัวเลือก css ที่ให้ฉันเลือกรายการย่อยก่อนหน้าของรายการ

<ul>
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>4</li>
     <li>5</li> <!-- select the pre last item dynamically no matter how long this list is -->
     <li>6</li>
</ul>

วิธีการคงที่:

ul li:nth-child(5)

วิธีการแบบไดนามิก:

ul li:last-child(-1)

ซึ่งแน่นอนว่าไม่ได้ตรวจสอบได้เช่นกัน nth-last-child ดูเหมือนจะไม่ได้ให้วิธีแบบไดนามิก .. ฉันสามารถย้อนกลับไปที่จาวาสคริปต์ แต่ฉันสงสัยว่ามีวิธี CSS ที่ฉันมองข้าม


11
มันมักจะเรียกว่า "วินาทีสุดท้าย" นอกจากนี้ยังมีคำแฟนซีอีกคำสำหรับมัน: "penultimate"
BoltClock

2
@BoltClock ฉันชอบคำว่า "penultimate" ฉันจะใช้มันในการอัพเดท Facebook ต่อ ๆ ไป
Andrew Barber

3
สำเนาซ้ำที่เป็นไปได้ของเลือกองค์ประกอบสุดท้ายที่สองด้วย css
Castro Roy

2
ขอบคุณทุกคนที่พูดถึงสุดท้าย - นี่ปรากฏขึ้นอันดับ 1 ใน Google สำหรับ "css penultimate"
chakeda

คำตอบ:


303

คุณสามารถใช้:nth-last-child(); ที่จริงแล้ว:nth-last-of-type()ฉันไม่รู้ว่าคุณจะใช้อะไรได้อีก ฉันไม่แน่ใจว่าคุณหมายถึงอะไร "ไดนามิก" แต่ถ้าคุณหมายถึงว่าสไตล์นั้นใช้กับลูกคนที่สองคนสุดท้ายเมื่อมีเด็กเพิ่มเข้ามาในรายการหรือไม่ ซอแบบโต้ตอบ

ul li:nth-last-child(2)

โอเคนั่นใช้ได้! ตัวแปลรหัส (jsfiddle) ไม่ได้ตรวจสอบความถูกต้อง .. เดาข้อผิดพลาดที่ด้านข้างของพวกเขา! ขอบคุณ
Hedde van der Heide

4
@ David Allen: ผมไม่คิดว่าเขาใส่ใจถ้าเขาแล้วพยายามที่จะใช้และ:nth-child(5) :last-childความคิดเห็นเช่นนี้ควรเป็นไปตามคำถามหรือถูกเก็บไว้ในตัว
BoltClock

1
เขาอาจไม่รู้เกี่ยวกับปัญหาการไม่สนับสนุน ฉันแค่เน้นมัน .... ฉันให้คำตอบโดยใช้ jQuery และฉันยินดีที่จะบอกว่ามันจะไม่ทำงานกับผู้ใช้ที่ปิดใช้งาน JavaScript แต่มีคนใช้ IE7 / 8 มากกว่ามีคนพิการ JS
David Allen

1
@ David ฉันเชื่อว่าปลั๊กอิน selectivrz หรือ modernizr สามารถแก้ไขปัญหานี้ได้ฉันจะต้องดูเอกสาร
Hedde van der Heide

@ArgsKwargs ข้อคิดเห็นที่ยอดเยี่ยมไม่เคยได้ยินเกี่ยวกับ selectivizr แจ้งให้เราทราบว่ามันรองรับเด็กคนที่สามหรือไม่
David Allen

1

ถ้าคุณไม่สามารถทำให้ PHP ติดเลเบลองค์ประกอบนั้นด้วยคลาสคุณควรใช้ jQuery

jQuery(document).ready(function () {
  $count =  jQuery("ul li").size() - 1;
  alert($count);
  jQuery("ul li:nth-child("+$count+")").css("color","red");
});

6
เป็นเรื่องที่น่ารำคาญอย่างยิ่งที่ jQuery ไม่ได้ใช้:nth-last-child()เพียงเพราะจอห์นคิดว่าไม่มีใครใช้เลย
BoltClock

ฉันอยากจะติดป้ายกับงูหลาม ;-) ontopic: ดี CSS ดูเหมือนดีด้วยวิธีนี้อาจจะ jsfiddle ยังคิดว่าไม่มีใครใช้มัน :-)
Hedde แวนเดอร์ Heide

@ArgsKwargs: แปลกทำไมมันไม่ทำงานใน jsFiddle มันขึ้นอยู่กับเบราว์เซอร์ที่จะตีความมัน มันไม่มีเอ็นจิ้น CSS ของตัวเอง
BoltClock

@BoltClock ไม่เข้าใจฉันผิดมันใช้งานได้รหัสผู้ช่วย (การสร้างภาพสี) แสดงให้เห็นถึงสิ่งที่ไม่ชัดเจน (ดังนั้นฉันจึงไม่ได้ลอง)
Hedde van der Heide

ฉันไม่คิดว่ารหัสใด ๆ ที่ไม่เปิดเผย แต่ฉันรู้ว่าคุณหมายถึงอะไรเกี่ยวกับ "การสร้างภาพสี"
David Allen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.