Não é possível com CSS2.1, mas é possível com seletores de correspondência de substring de atributo CSS3 (que são suportados no IE7 +):
div[class^="status-"], div[class*=" status-"]
Observe o caractere de espaço no segundo seletor de atributo. Isso seleciona div
elementos cujo class
atributo atende a uma destas condições:
[class^="status-"]
- começa com "status-"
[class*=" status-"]
- contém a subcadeia "status-" ocorrendo diretamente após um caractere de espaço. Os nomes de classe são separados por espaço em branco de acordo com a especificação HTML , daí o caractere de espaço significativo. Isso verifica qualquer outra classe após a primeira se várias classes forem especificadas e adiciona um bônus de verificar a primeira classe, caso o valor do atributo seja preenchido com espaço (o que pode acontecer com alguns aplicativos que geram class
atributos dinamicamente).
Naturalmente, isso também funciona no jQuery, como demonstrado aqui .
O motivo pelo qual você precisa combinar dois seletores de atributos, conforme descrito acima, deve-se ao fato de um seletor de atributos [class*="status-"]
corresponder ao seguinte elemento, o que pode ser indesejável:
<div id='D' class='foo-class foo-status-bar bar-class'></div>
Se você puder garantir que esse cenário nunca aconteça, poderá usar esse seletor por uma questão de simplicidade. No entanto, a combinação acima é muito mais robusta.
Se você tem controle sobre a fonte HTML ou o aplicativo que gera a marcação, pode ser mais simples transformar o status-
prefixo em sua própria status
classe, como sugere o Gumbo .
status-
e não quiser corresponder a isso, o seletor se tornará ainda mais complicado:div[class^="status-"]:not(.status-), div[class*=" status-"]:not(.status-)
Além disso, você perde o suporte ao IE7 / IE8. Felizmente, se sua marcação for sensata, você não precisará excluir essa classe.