Estou um pouco confuso sobre CSS e o class
atributo. Sempre pensei que a ordem em que especifico várias classes no valor do atributo tem um significado. A última classe pode / deve sobrescrever as definições da anterior, mas isso não parece funcionar. Aqui está um exemplo:
<html>
<head>
<style type="text/css">
.extra {
color: #00529B;
border:1px solid #00529B; /* Blue */
background-color: #BDE5F8;
}
.basic {
border: 1px solid #ABABAB;
}
</style>
</head>
<body>
<input type="text" value="basic" class="basic"/>
<input type="text" value="extra" class="extra"/>
<input type="text" value="basic extra" class="basic extra"/>
<input type="text" value="extra basic" class="extra basic"/>
</body>
</html>
Eu esperaria que o terceiro exemplo com class="basic extra"
deveria ter uma borda azul, uma vez que a borda especificada extra sobrescreveria a borda do básico.
Estou usando FF 3 no ubuntu 9.04
A ordem das classes no atributo é irrelevante. Todas as classes no
class
atributo são aplicadas igualmente ao elemento.A questão é: em que ordem as regras de estilo aparecem em seu arquivo .css. No seu exemplo,
.basic
vem depois.extra
para que as.basic
regras tenham precedência sempre que possível.Se você quiser fornecer uma terceira possibilidade (por exemplo, que é,
.basic
mas as.extra
regras ainda devem se aplicar), você precisará inventar outra classe,.basic-extra
talvez, que explicitamente forneça isso.fonte
Isso pode ser feito, mas você precisa ser um pouco criativo com seus seletores. Usando seletores de atributo, você pode especificar coisas como "começa com", "termina com", "contém", etc. Veja o exemplo abaixo usando a mesma marcação, mas com seletores de atributo.
fonte