Quais são as prioridades entre os seletores CSS
-
07-07-2019 - |
Pergunta
CSS Pergunta: Se dois seletores diferentes aplicam-se a um elemento, que ganha
Eu sei que isto não deveria acontecer, mas eu quero ajustar um aplicativo herdado, eo CSS está ficando no meio.
Solução
O detalhes sangrentos na especificação são realmente razoavelmente legível. Em resumo:
-
regras
!important
e regrasstyle
em linha ganhar mais. -
Caso contrário, normalmente as vitórias mais específicas.
#id
é um seletor mais específico do que.classname
é um seletor mais específico do quetagname
. -
Onde regras são igualmente específicas, a declarada últimas vitórias.
Não há nenhuma razão específica para que este ‘não deveria acontecer’. É normal para especificar uma regra pincel largo e depois adicionar uma regra mais específica para atingir um caso; várias regras mesmo de propriedade sobre um único elemento não são incomuns ou indesejáveis.
Outras dicas
Você tem que encontrar #no de id = A, # nenhum dos class = B e #no de tag = c no selector
ABC com vitórias de maior valor.
.wrapper .title p {
//some other rules
}
A=0 B=2 C=1 =021
\#foo {
// some more rules
}
A=1 = 100
.bar .head div li{
// some more rules
}
A=0 B=2 C=2 =022
100> 022> 021
para vitórias #foo
Deve acontecer! É por isso que ele é chamado de folhas de estilo em cascata. Você pode encontrar um exemplo das prioridades aqui
Consulte a seção fim especificidade da especificação (juntamente com o resto desse capítulo! regras importantes ea ordem das regras aparecem na folha de estilo ter um impacto também).
"# id" é mais poderoso do que o nome ".class" e ".class" é mais poderoso do que o nome de 'tag'. Mas se aplicarmos "! Importante" do que a sua prioridade é a maioria deles.
- ! Important
- estilo em linha
- id
- class
- tag
A prioridade entre seletores é controlada pelo how específico que eles são. seletores mais específicos conquistar menos específico.
Se dois seletores são igualmente específicas, quanto mais tarde uma vitórias sobre o primeiro.
Existem três níveis de especificidade, id, classe e elemento. Então #elem
vitórias sobre .elem
como um id é mais específico. vitórias .elem .cont
mais .elem
, pois tem mais seletores no mesmo nível.
Leia mais em "O que acontece quando ocorrem conflitos?" em Selectutorial .
ordem no arquivo CSS só importa se os seletores de compartilhar a mesma especificidade.
Para saber mais sobre a especificidade do seletor: Andy Clarke escreveu Especificidade Guerras qual é a melhor visão geral de como eles funcionam.
CSS significa Cascading Style Sheets. Isto significa que regras se aplicam a elementos de uma forma em cascata. É perfeitamente normal que diferentes seletores se aplicam a um elemento. Pensa, por exemplo, para o seguinte:
<div class="wrapper">
<div id="foo" class="bar" style="some rules">Test</div>
</div>
As seguintes regras afetaria ao elemento "foo":
.wrapper {
//some other rules
}
#foo {
// some more rules
}
.bar {
// some more rules
}
Regras para prioridades pode ser encontrada aqui .
Eu sempre aconselho a usar o Firefox "incendiário" plugin. Ela vai mostrar exatamente quais as propriedades são avaliadas por um elemento específico e por isso, enfatizando substituições durante a cascata.
- ! Important
- estilo em linha
- #id
- class
- tag