Is there any way to specify a CSS shorthand for “all elements except the first/last”?

前端 未结 4 964
情歌与酒
情歌与酒 2020-12-24 00:28

Very often, it\'s natural to need to specify a CSS style for all elements except the first (or the last). For example, when styling paragraphs, you wish to add a bottom marg

4条回答
  •  春和景丽
    2020-12-24 01:20

    If IE7-8 support is not needed you can use the :not() CSS selector.

    But if you need to support IE7+, which may still be the case there is a little trick you can use and usually gets you fairly far. A lesser known fact is that the :first-child psuedo selector actually works in IE7+ (not :last-child though) as are some other css selectors and this makes stuff like adding vertical margins in a horizontally floated layout possible.

    Imagine this html:

    • Item #1
    • Item #2
    • Item #3
    • Item #4

    And this as some CSS:

    /* General reset */
    ul, li { list-type: none; margin: 0; padding: 0; }
    /* Make horizontal */
    ul > li { float: left; }
    

    So now all list items are horizontally next to each other, and now we want to add a margin in BETWEEN all items but not on the right or left side, we can do this in css:

    /* General reset */
    ul, li { list-type: none; margin: 0; padding: 0; }
    /* Make horizontal */
    ul > li { float: left; margin-left: 10px; }
    ul > li:first-child { margin-left: 0; }
    

    This usually covers 95% of the cases where I want something unique, then the rest of the 'forgotten' selectors cover another few percent, after that you need to add some classes which usually isn't much of a bottleneck anyway in the backend of the page.

提交回复
热议问题