Selector de CSS"(A ou B) E "C"?

Isto deve ser simples, mas estou com dificuldade em encontrar os Termos de busca.
Digamos que tenho isto:
<div class="a c">Foo</div>
<div class="b c">Bar</div>

em CSS, Como posso criar um selector que corresponda a algo que corresponda" (.um bo .b) and .c"?

Eu sei que posso fazer isto.
.a.c,.b.c {
  /* CSS stuff */
}

mas, assumindo que eu vou ter que fazer este tipo de lógica muito, com uma variedade de combinações lógicas, existe uma sintaxe melhor?

Author: Cokegod, 2011-09-22

4 answers

Existe uma sintaxe melhor?

Não. O operador CSS' or (,) não permite agrupamentos. É essencialmente o operador lógico de menor precedência em selectores, então você deve usar .a.c,.b.c.
 103
Author: Matt Ball, 2011-09-22 15:37:07

Ainda não, mas há o selector experimental :matches() que faz exactamente isso:

:matches(.a .b) .c {
  /*stuff goes here */
}

Você pode encontrar mais informações sobre ele aqui e aqui. Atualmente, a maioria dos navegadores suporta a sua versão inicial :any(), que funciona da mesma forma, mas será substituída por :matches(). Nós só temos que esperar um pouco mais antes de usar isso em todos os lugares (eu surelly vai).

 17
Author: Metalcoder, 2015-05-22 11:25:11

Se tiver isto:

<div class="a x">Foo</div>
<div class="b x">Bar</div>
<div class="c x">Baz</div>

E só quer seleccionar os elementos que têm .x e (.a ou .b), pode escrever:

.x:not(.c) { ... }
Mas isso só é conveniente quando se tem três "sub-classes" e se quer escolher duas.

Seleccionar apenas uma sub-classe (por exemplo:.a): .a.x

Seleccionar duas subclasses (por exemplo .a e .b): .x:not(.c)

Seleccionar as três subclasses: .x

 9
Author: Šime Vidas, 2011-09-22 15:40:44
Não. CSS padrão não fornece o tipo de coisa que você está procurando.

No entanto, pode querer vermenos eSASS .

Estes são dois projectos que visam estender a sintaxe padrão CSS introduzindo recursos adicionais, incluindo variáveis, regras aninhadas e outras melhorias.

Eles permitem-lhe escrever um código CSS muito mais estruturado, e qualquer um deles irá quase certamente resolver o seu caso de uso particular.

Claro., nenhum dos navegadores suporta sua sintaxe estendida (especialmente desde que os dois projetos cada um tem sintaxe e características diferentes), mas o que eles fazem é fornecer um "compilador" que converte o seu código menos ou SASS em CSS padrão, que você pode então implantar em seu site.

 4
Author: Spudley, 2011-09-22 15:45:43