kralco626
kralco626

Reputation: 8654

Nesting CSS classes

Can I do something like the following?

.class1{some stuff}

.class2{class1;some more stuff}

Upvotes: 88

Views: 298807

Answers (7)

etoxin
etoxin

Reputation: 5294

There is now a CSS Nesting Module in the CSS specification. The module is currently a Working Draft and CSS nesting is supported in all major browsers.

The syntax looks like this:

table.colortable {
  & td {
    text-align:center;
    &.c { text-transform:uppercase }
    &:first-child, &:first-child + td { border:1px solid black }
  }
  & th {
    text-align:center;
    background:black;
    color:white;
  }
}

.foo {
  color: red;
  @nest & > .bar {
    color: blue;
  }
}

.foo {
  color: red;
  @nest .parent & {
    color: blue;
  }
}

Upvotes: 93

toyssamurai
toyssamurai

Reputation: 711

If you cannot wait until native CSS nesting goes official, you can use Container Queries to do it. As of now, it is supported (partially) by Chrome & Edge 105+, as well as Safari 16+.

It will looks like this:

.class1 {
   container-type: inline-size;
   container-name: my-container;
   // other style rules
}

@container my-container (min-width: 0px) {
  .class2 {
    // some style rules
  }
}

More details can be found at here.

Upvotes: 1

Kyle
Kyle

Reputation: 2872

I do not believe this is possible. You could add class1 to all elements which also have class2. If this is not practical to do manually, you could do it automatically with JavaScript (fairly easy to do with jQuery).

Upvotes: 0

Quentin
Quentin

Reputation: 944320

No.

You can use grouping selectors and/or multiple classes on a single element, or you can use a template language and process it with software to write your CSS.

See also my article on CSS inheritance.

Upvotes: 3

cdhowie
cdhowie

Reputation: 169353

Not with pure CSS. The closest equivalent is this:

.class1, .class2 {
    some stuff
}

.class2 {
    some more stuff
}

Upvotes: 63

RabidFire
RabidFire

Reputation: 6340

Not directly. But you can use extensions such as LESS to help you achieve the same.

Upvotes: 4

Sarfraz
Sarfraz

Reputation: 382861

Not possible with vanilla CSS. However you can use something like:

Sass makes CSS fun again. Sass is an extension of CSS3, adding nested rules, variables, mixins, selector inheritance, and more. It’s translated to well-formatted, standard CSS using the command line tool or a web-framework plugin.

Or

Rather than constructing long selector names to specify inheritance, in Less you can simply nest selectors inside other selectors. This makes inheritance clear and style sheets shorter.

Example:

#header {
  color: red;
  a {
    font-weight: bold;
    text-decoration: none;
  }
}

Upvotes: 79

Related Questions