not:first-child selector

One of the versions you posted actually works for all modern browsers (where CSS selectors level 3 are supported):

div ul:not(:first-child) {
    background-color: #900;

If you need to support legacy browsers, or if you are hindered by the :not selector’s limitation (it only accepts a simple selector as an argument) then you can use another technique:

Define a rule that has greater scope than what you intend and then “revoke” it conditionally, limiting its scope to what you do intend:

div ul {
    background-color: #900;  /* applies to every ul */

div ul:first-child {
    background-color: transparent; /* limits the scope of the previous rule */

When limiting the scope use the default value for each CSS attribute that you are setting.

Leave a Comment