I’m looking for a way to make the last inline list item extend the remainder of its container. So I have something like this.
<nav>
<ul>
<li></li> //width = 50px
<li></li> //width = 50px
<li class="last"></li> //width needs to fill the remaining 300px
</ul>
</nav>
nav {
width:400px;
height:50px;
}
nav > ul > li {
display:inline-block;
padding:5px;
}
Now the number of list items varies so I can’t set the last list item to a set width. I need to make it fill whatever is left over in the width of the nav. How to with using css only?
You can use
display: table(andtable-celland, at least for Firefox,table-row) withtable-layout: fixedto get the table algorithm where indicated widths by the author (you) are applied by the browser and not the other way where the browser do its best to adapt the width of cells to their content.Then applying a width of 50px to all “cells” except the last one.
I used
table-rowonulandtableon itsnavparent because on Fx 18 settingdisplay: tableonuldidn’t have the expected effect (something related to the browser having to create the missing parts a.k.a. a shadow element acting as row in-between).Being very descriptive (this element must be rendered as a table and this one as a row and these ones as cells) helps.
Fiddle here: http://jsfiddle.net/X6UX9/1/
HTML:
CSS:
PS: using
:last-childfor setting widths is compatible with IE9+, not IE8+ as I stated in the fiddle…edit: oops I didn’t see your
.lastclass on lastli. Well, you get the idea 🙂edit2: updated fiddle using this class and neither
:not()nor:last-childpseudo