Como a especificidade do CSS funciona em um navegador

Muitas pessoas acham o CSS complexo. Eles apresentam várias desculpas: a falta de capacidade de entender CSS ou CSS é ruim por si só. Mas a realidade é que as pessoas simplesmente não encontraram tempo para realmente estudá-lo. Se você está lendo este artigo, está interessado em aprender CSS e é ótimo!

imagem

Qual é a especificidade do CSS?


Você já escreveu um estilo, mas ele não funciona, então você adiciona ! Importante (ou não), e ainda assim não funciona? Então você olha para o Devtools e percebe que outro estilo se sobrepõe ao seu em algum lugar?

Esta é a especificidade do CSS! É assim que o navegador seleciona qual dos seletores concorrentes aplicar ao elemento. Quando o navegador vê que dois ou mais seletores correspondem ao mesmo elemento e os seletores têm regras conflitantes, ele precisa de uma maneira de descobrir quais das regras a serem aplicadas a esse elemento. A maneira como isso acontece é chamado de "valor da especificidade do CSS".

Antes de nos aprofundarmos na especificidade do CSS, lembre-se do seguinte:

  1. A especificidade do CSS é importante apenas quando vários seletores afetam o mesmo elemento. O navegador precisa de uma maneira de descobrir qual estilo aplicar ao elemento correspondente quando existirem valores conflitantes de propriedade.
  2. Quando dois ou mais seletores correspondentes têm o mesmo valor de especificidade (peso), o navegador seleciona o seletor correspondente “mais recente” que aparece mais perto da parte inferior da lista de seletores correspondentes. O parágrafo a seguir explica o que é uma "lista de seletores adequados".
  3. O navegador cria uma "lista de seletores adequados" combinando todos os estilos na página da web e filtrando aqueles que não correspondem ao elemento "atualmente sendo estilizado" . Os primeiros seletores na folha de estilo estão no topo da lista e os últimos, na parte inferior.
  4. A propriedade style de um elemento possui um valor de especificidade maior que os seletores nas folhas de estilo, a menos que haja ! Importante no seletor de folhas de estilo.
  5. O uso ! Important (que é considerado uma prática ruim em alguns casos) altera a especificidade do seletor. Quando dois seletores têm a mesma especificidade, o seletor com ! Importante vence. E quando os dois tiverem ! Importante , o seletor "mais recente" vence.

Valor da especificidade


Agora podemos seguir como o navegador determina a especificidade do seletor.

A especificidade do seletor pode ser representada como uma sequência de três dígitos separada por um hífen (ou qualquer outra coisa): “2–4–1”. O primeiro dígito é o número de seletores de ID presentes, o segundo é o número de seletores de classe, seletores de atributo e pseudo-classe e o terceiro é o número de seletores de tipo e pseudo-elemento disponíveis. Por exemplo:

#red.blue // 1-1-0 #green // 1-0-0 div.yellow#red // 1-1-1 .red.blue.yellow // 0-3-0 


Definição das mais "específicas"


Para determinar qual seletor é mais específico, você pode comparar cada um dos três valores.

Digamos que você tenha 1-1-1 e 0-3-0 , como nos dois últimos exemplos, e você precisa determinar qual deles tem mais especificidade. Primeiro você compara os últimos valores 1 e 0 e, neste caso, 1 vence. Isso significa que, no momento, div.yellow#red possui um valor de especificidade maior ... mas ainda não terminamos de comparar os valores.

Em seguida, compare os valores 1 e 3 , 3 vitórias. Atualmente .red.blue.yellow possui um valor de especificidade maior.

Por fim, comparamos os primeiros valores, 1 e 0 e 1 vitórias, para que div.yellow#red tenha mais especificidade que .red.blue.yellow .

A especificidade CSS do seletor fornece uma boa explicação de por que nenhum número de seletores de classe pode substituir o seletor de ID.

Pequenos avisos


3 "armadilhas" para estar ciente de:

  1. Escrevi acima que o segundo número em uma sequência de números consistindo em três é "o número de seletores de classe, seletores de atributos e pseudo-classes". Isso é verdade em todos os casos, exceto quando é :not() pseudo-classe. Quando é :not() pseudo-classe, não a consideramos, mas simplesmente a ignoramos. Mas os seletores dentro dele não são ignorados, são considerados normais.
  2. A especificidade do CSS entende a "forma" de um seletor. Isso significa que, quando você tem *[id="yellow"] e #yellow , o primeiro é tratado como um seletor de atributos.
  3. Somente o seletor universal * não conta para a especificidade do seletor. No parágrafo [id="yellow"] acima, parte do seletor é o que realmente importa.


Espero que este artigo seja fácil de entender e ajude a entender o que é a especificidade do CSS. Agora você pode ver o estilo e determinar facilmente o quão "específico" é.

Source: https://habr.com/ru/post/pt436610/


All Articles