Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Changing CSS for last <li>

I am wondering if there is some way to change a CSS attribute for the last li in a list using CSS. I have looked into using :last-child, but this seems really buggy and I can't get it to work for me. I will use JavaScript to do this if necessary, but I want to know if anyone can think up a solution in CSS.

like image 491
PF1 Avatar asked Aug 25 '09 17:08

PF1


2 Answers

:last-child is really the only way to do it without modifying the HTML - but assuming you can do that, the main option is just to give it a class="last-item", then do:

li.last-item { /* ... */ } 

Obviously, you can automate this in the dynamic page generation language of your choice. Also, there is a lastChild JavaScript property in the W3C DOM.

Here's an example of doing what you want in Prototype:

$$("ul").each(function(x) { $(x.lastChild).addClassName("last-item"); }); 

Or even more simply:

$$("ul li:last-child").each(function(x) { x.addClassName("last-item"); }); 

In jQuery, you can write it even more compactly:

$("ul li:last-child").addClass("last-item"); 

Also note that this should work without using the actual last-child CSS selector - rather, a JavaScript implementation of it is used - so it should be less buggy and more reliable across browsers.

like image 54
Lucas Jones Avatar answered Sep 29 '22 14:09

Lucas Jones


I've done this with pure CSS (probably because I come from the future - 3 years later than everyone else :P )

Supposing we have a list:

<ul id="nav">   <li><span>Category 1</span></li>   <li><span>Category 2</span></li>   <li><span>Category 3</span></li> </ul> 

Then we can easily make the text of the last item red with:

ul#nav li:last-child span {    color: Red; } 
like image 26
pano Avatar answered Sep 29 '22 15:09

pano