Classes CSS de nidificação

Posso fazer algo como o seguinte?

.class1{some stuff}

.class2{class1;some more stuff}
Author: TylerH, 2010-12-30

8 answers

Não é possível com baunilha CSS. No entanto, você pode usar algo como:

O Sass torna o CSS divertido outra vez. Sass é um extensão do CSS3, adicionando aninhados regras, variáveis, mixins, selector herança e muito mais. Está traduzido. a um CSS normal bem formatado, utilizando a ferramenta da linha de comandos ou a plugin de framework web.

Ou

Em vez de construir um selector longo nomes para especificar herança, em menos você pode simplesmente aninhar selectores dentro outros selectores. Isto faz legenda clara e folhas de estilo reduzido.

Exemplo:

#header {
  color: red;
  a {
    font-weight: bold;
    text-decoration: none;
  }
}
 46
Author: Sarfraz, 2010-12-30 17:49:37

Não com CSS puro. O equivalente mais próximo é este:

.class1, .class2 {
    some stuff
}

.class2 {
    some more stuff
}
 33
Author: cdhowie, 2010-12-30 17:49:48

Update: {[4] } existe uma especificação CSS3 para nidificação do nível 3 do CSS. Actualmente é um rascunho. https://tabatkins.github.io/specs/css-nesting/

Se aprovado, a sintaxe ficaria assim:

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;
  }
}

Estatuto: A proposta especíca não foi aprovada pelo Grupo de trabalho.

 28
Author: etoxin, 2018-05-01 06:48:41

Não directamente. Mas você pode usar extensões como LESS para ajudá-lo a alcançar o mesmo.

 4
Author: RabidFire, 2010-12-30 17:49:38
Não.

Pode usar agrupar selectores e / ou classes múltiplas num único elemento, ou pode usar uma linguagem de modelo e processá-la com software para escrever o seu CSS.

Ver também o meu artigo sobre a herança CSS .

 3
Author: Quentin, 2010-12-30 17:49:48
Experimenta isto...

Dê ao elemento um ID, e também um nome de classe. Depois podes aninhar o # IDName.className in your CSS.

Eis uma explicação melhor. https://css-tricks.com/multiple-class-id-selectors/
 1
Author: Oz The Tech Guy, 2016-08-23 08:06:10
Não acredito que isto seja possível. Você poderia adicionar class1 a todos os elementos que também têm class2. Se isto não for prático de fazer manualmente, você pode fazê-lo automaticamente com JavaScript (bastante fácil de fazer com jQuery).
 0
Author: Kyle, 2010-12-30 17:51:43

Pode fazê-lo usando Javascript:

static generateStyle = (parentSelector, allCss) => {
  const reg = /(.+?)\s?\{\s?(.+?)\s?\}+/g;
  const matches = allCss.match(reg);
  const styles = [];

  for (let i = 0; i < matches.length; i++) {
    const cssDecleration = matches[ i ];

    if (cssDecleration.indexOf('@media') === -1) {
      styles.push(`${ parentSelector } ${ cssDecleration }`);
    }
    else {
      const mediaPos = cssDecleration.indexOf('{');

      if (mediaPos === -1) {
        continue;
      }

      const mediaQuery = cssDecleration.substring(0, mediaPos);
      const rest = cssDecleration.substring(mediaPos);
      const restPlaced = MicroServiceData.generateStyle(parentSelector, rest);

      styles.push(`${ mediaQuery } ${ restPlaced }`);

    }
  }

  return styles.join('\n');
};
 0
Author: yairniz, 2018-06-28 08:08:06