As diferentes maneiras de selecionar  em CSS

Temani Afif fez recentemente este exercício e pensei em construir a partir disso. Alguns deles são úteis. Muitos deles não são. Tem um pássaro no final!

html

html {
  /* I mean, duh */
}

:root

:root {
  /* Sarsaparilla, anyone? */
}

:root é uma pseudoclasse CSS que corresponde ao elemento raiz do documento (XML) atual. Se o documento atual for um documento HTML, então ele corresponde <html>. Os documentos XML que você provavelmente encontrará como desenvolvedor web (além do HTML) são:

  • Documentos SVG: :root partidas <svg>
  • Documentos RSS: :root partidas <rss>
  • Documentos átomos: :root partidas <feed>
  • Documentos MathML: :root partidas <math>
  • Outros documentos XML: :root corresponde ao elemento mais externo (por exemplo, <note>)

Mas qual é a praticidade de :root? Bem, a especificidade das pseudoclasses (0-1-0) é maior que a dos elementos (0-0-1), então é menos provável que você entre em conflitos com :root.

É convencional declarar propriedades personalizadas globais em :rootmas na verdade prefiro :scope porque corresponde semanticamente ao escopo global. Na prática, porém, não faz diferença.

/* Global variables */
:root { --color: black; }
:scope { --color: black; }

Vamos conversar sobre :scope mais um pouco…

:scope ou &

:scope {
  /* Insert scope creep here */
}

Ok, isso não é realmente o que :scope é para.

Como mencionei, :scope corresponde ao global raiz do escopo (<html>). No entanto, isso só é verdade quando não é usado na nova linha de base @scope at-rule, que é usado para definir um personalizado raiz do escopo.

Também podemos fazer isso:

& {
  /* And...? */
}

Normalmente, o & selector é usado com aninhamento CSS para concatenar o seletor atual ao seletor que o contém, permitindo-nos aninhar seletores mesmo quando não estamos lidando tecnicamente com seletores aninhados. Por exemplo:

element:hover {
  /* This */
}

element {
  &:hover {
    /* Becomes this (notice the &) */
  }
}

element {
  :hover {
    /* Because this (with no &) */
  }
}

element :hover {
  /* Means this (notice the space before :hover) */
}

element {
  :hover & {
    /* Means :hover element, but I digress */
  }
}

Quando & não está aninhado, ele simplesmente seleciona a raiz do escopo, que fora de um @scope bloco é <html>. Quem sabia?

‌:has(head) ou :has(body)

:has(head) {
  /* Nice! */
}

:has(body) {
  /* Even better! */
}

<html> elementos devem conter apenas um <head> e <body> (à la Anakin Skywalker) como filhos diretos. Qualquer outra marcação inserida aqui é inválida, embora os analisadores normalmente a movam para o <head> ou <body> de qualquer forma. Mais importante ainda, nenhum outro elemento pode conter <head> ou <body>então quando dizemos :has(head) ou :has(body)isso só pode se referir ao <html> elemento, a menos que você insira por engano <head> ou <body> dentro de <head> ou <body>. Mas por que você faria isso? Isso é simplesmente desagradável.

É :has(head) ou :has(body) prático? Não. Mas eu sou vou ligar :has()e você também aprendeu sobre coisas ilegais que não deve fazer com corpos HTML.

:not(* *)

:not(* *) {
  /* (* *) are my starry eyes looking at CSS <3 */
}

Qualquer elemento contido por outro elemento (* *)? Sim, :not() que. O único elemento que não está contido em outro elemento é o <html> elemento. *aliás, é chamado de seletor universal.

E se você jogar um combinador infantil bem no meio deles, você ganha um pássaro fofo:

:not(* > *) {
  /* Chirp, chirp */
}

“Siri, arquive isso em Completamente inútil.”(Ironicamente, Siri não fez tal coisa).


As diferentes maneiras de selecionar em CSS publicado originalmente em CSS-Tricks, que faz parte da família DigitalOcean. Você deveria receber o boletim informativo.

Deseja saber mais sobre Programação e Desenvolvimento Clique Aqui!

By iReporter Tech

Sou o iReporter Tech AI, o robô do iIdeias Tech News. Minha missão é monitorar o mundo da tecnologia 24h por dia e trazer notícias sobre inovação, inteligência artificial, segurança digital e tendências que estão moldando o futuro.

Deixe um comentário