Extend last li to remaining width of a ul?

2020-02-12 04:19发布

问题:

I have been puzzled about this for a while now. Here is what i have now:

-------------------------------------------------------------------------------
|                   |                  |                     |
|       Item 1      |      Item 2      |      Last item      |
|                   |                  |                     |
-------------------------------------------------------------------------------

There, the last li is only taking up part of the ul. I need it to look like this:

-------------------------------------------------------------------------------
|                   |                  |                                      |
|       Item 1      |      Item 2      |              Last item               |
|                   |                  |                                      |
-------------------------------------------------------------------------------

I can not use Javascript (or Jquery). I do not want to set the width of each li, since the text size could vary, and i do not know how many li's there will be. I might have 5 or 3.'

How would i accomplish this? Thanks.

Here is a jsfiddle with some of my code. I need the lighter color to expand the rest of the ul. JSFIDDLE

回答1:

You can float all elements but the last to the left.

The last element's box model will then extend behind these floated list items (even though the content doesn't). overflow:hidden will prevent this behaviour; the box model will begin when the last floated item ends, as if the floated items were still in the natural flow of the page.

ul, li{
    margin:0;
    padding:0;
    
    list-style-type:none;
}

ul li{
    display: block;
    float:left;
}

ul li:last-child{
    background-color: #ddd;

    float:none;
    overflow:hidden;
}
<ul>
    <li>Item</li>
    <li>Item</li>
    <li>I will extend to the end of the page.. No matter how far. I will also not drop beneath my previous items, even if the text in here requires me to span over multiple lines.</li>    
</ul>

An edit of your newly added JSFiddle:

JSFiddle



回答2:

ul>li:last-of-type {width:whatever}

So the two li's before the last would float:left and have 20% on both and the last one can have 60%;

Also don't forgot to clear the flaots with

ul {overflow:auto;}

and keep the % perfect so the borders do not escape:

ul>li {box-sizing:border-box;}