Changing CSS for last
  • 前端 未结 10 1547
    暗喜
    暗喜 2020-11-30 22:30

    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

    相关标签:
    10条回答
    • 2020-11-30 23:09

      2015 Answer: CSS last-of-type allows you to style the last item.

      ul li:last-of-type { color: red; }
      
      0 讨论(0)
    • 2020-11-30 23:10

      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;
      }
      
      0 讨论(0)
    • 2020-11-30 23:21

      :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.

      0 讨论(0)
    • One alternative for IE7+ and other browsers may be to use :first-child instead, and invert your styles.

      For example, if you're setting the margin on each li:

      ul li {
        margin-bottom: 1em;
      }
      ul li:last-child {
        margin-bottom: 0;
      }
      

      You could replace it with this:

      ul li {
        margin-top: 1em;
      }
      ul li:first-child {
        margin-top: 0;
      }
      

      This will work well for some other cases like borders.

      According to sitepoint, :first-child buggy, but only to the extent that it will select some root elements (the doctype or html), and may not change styles if other elements are inserted.

      0 讨论(0)
    • 2020-11-30 23:26

      I usually combine CSS and JavaScript approaches, so that it works without JavaScript in all browsers but IE6/7, and in IE6/7 with JavaScript on (but not off), since they does not support the :last-child pseudo-class.

      $("li:last-child").addClass("last-child");
      
      li:last-child,li.last-child{ /* ... */ }
      
      0 讨论(0)
    • 2020-11-30 23:27

      You could use jQuery and do it as such way

      $("li:last-child").addClass("someClass");
      
      0 讨论(0)
    提交回复
    热议问题