Seletores CSS

Você tem uma página cheia de elementos e um conjunto de estilos que deseja aplicar, mas uma cor ou uma fonte não serve para nada até você poder dizer quais elementos ela pertence. Um seletor é como você aponta para os certos: este parágrafo, cada botão, apenas os links dentro da navegação. Fique confortável com seletores e o resto do CSS se torna uma questão de escolher o que mudar, porque você já sabe como alcançá-lo.
Seletores de tipo, classe e id
Uma regra CSS tem duas partes: um seletor que escolhe quais elementos estilizar, e um bloco de declarações que diz como. O seletor mais simples é o nome do elemento, chamado de seletor de tipo. Escreva p e cada parágrafo da página é estilizado.
Isso geralmente é muito amplo. Você raramente quer que todos os parágrafos pareçam iguais. Então você dá aos elementos um rótulo chamado classe, usando o atributo HTML class, e aponta esse rótulo do CSS com um ponto na frente. Pense em uma classe como um crachá: você cola a mesma tag em cada elemento que deseja tratar como um grupo, depois estiliza a tag uma vez.
<button class="btn-primary">Inscrever-se</button>
<button class="btn-primary">Comprar agora</button>/* seletor de tipo: cada botão na página */
button {
font-family: inherit;
}
/* seletor de classe: apenas elementos marcados btn-primary */
.btn-primary {
background: rebeccapurple;
color: white;
}Ambos os botões pegam o estilo .btn-primary de uma regra, porque compartilham a classe. Essa reutilização é toda a razão pela qual classes são a ferramenta que você alcança. Isso constrói diretamente sobre como o CSS funciona, onde cada regra emparelha um seletor com um conjunto de declarações.
p atinge cada elemento desse tipo, o que geralmente é mais do que você quer. Uma classe é um crachá que você cola nos elementos que se importa e estiliza com um ponto, como .btn-primary. Comece com classes para quase tudo e você não irá tão longe errado. Combinadores: selecionando por relacionamento
Às vezes você quer estilizar um elemento apenas quando ele fica dentro de outro. Os links em sua navegação devem parecer diferentes dos links em um parágrafo, mesmo que ambos sejam elementos <a>. Você descreve esse relacionamento com um combinador: coloque dois seletores lado a lado com um espaço, e o CSS lê como "o segundo, mas apenas dentro do primeiro".
Então .nav a significa "qualquer link dentro de um elemento com a classe nav". O espaço está fazendo um trabalho real aqui. Não é decoração, é a instrução para olhar dentro.
/* descendente: qualquer link dentro da nav */
.nav a {
text-decoration: none;
}
/* filho: apenas itens de lista que são filhos diretos de .menu */
.menu > li {
display: inline-block;
}A primeira regra alcança cada link aninhado dentro da navegação; a segunda alcança apenas os itens de nível superior do menu e deixa qualquer lista aninhada sozinha. Escolher entre elas é escolher o quão longe você quer que a regra viaje.
.nav a estiliza links que ficam dentro da navegação. Esse espaço é uma instrução, não espaçamento para aparência, então não o deixe cair por acidente. Esse padrão cobre muito da estilização diária. Pseudo-classes: estilizando por estado
Elementos podem estar em estados diferentes. Um link pode estar parado ou ter o mouse pairando sobre ele. Uma pseudo-classe permite que você estilize um elemento com base em seu estado, e você a escreve com dois-pontos após o seletor.
A que você usará primeiro é :hover. Escreva .btn-primary:hover e esses estilos se aplicam apenas enquanto o ponteiro está sobre o botão, que é como botões e links fornecem essa pequena resposta visual quando você aponta para eles.
.btn-primary:hover {
background: purple;
}
/* usuários de teclado precisam de um indicador de foco visível */
.btn-primary:focus-visible {
outline: 2px solid rebeccapurple;
outline-offset: 2px;
}A primeira regra é acionada enquanto o ponteiro está sobre o botão; a segunda desenha um anel claro quando o botão é selecionado por teclado, que é o que mantém a página usável sem um mouse. As escolhas de cor e contorno aqui se conectam a como o CSS funciona e aos valores que você define em qualquer propriedade.
:hover para quando o ponteiro está sobre ele. É daí que vem o efeito de hover de um botão. Você o anexa direto ao seletor, sem espaço entre. Pseudo-elementos: estilizando uma parte de um elemento
Uma pseudo-classe estiliza um elemento inteiro em um certo estado. Um pseudo-elemento é diferente: ele permite que você estilize uma parte de um elemento, ou adicione um pequeno pedaço de conteúdo que não está no seu HTML.
Os dois que você encontrará primeiro são ::before e ::after. Eles inserem conteúdo no início ou no final de um elemento, e você diz a eles o que inserir com a propriedade content. Note os dois dois-pontos: esse dois-pontos duplo é como o CSS marca um pseudo-elemento apartado de uma pseudo-classe.
/* adicione uma seta decorativa após cada link nav */
.nav a::after {
content: " →";
color: rebeccapurple;
}
/* estilize o texto de dica dentro de uma caixa de busca */
.search-input::placeholder {
color: grey;
font-style: italic;
}A regra ::after insere uma seta que vive apenas na estilização, não no HTML, enquanto ::placeholder alcança dentro da entrada para estilizar texto que o navegador desenha para você. Ambas estilizam algo que você não poderia alcançar com um seletor simples. Se você está estilizando texto de dica e rótulos, o capítulo tipografia vai mais fundo no lado de texto.
::before e ::after. Esses dois precisam de uma propriedade content para aparecer. O dois-pontos duplo é a forma rápida de distinguir um pseudo-elemento de uma pseudo-classe. Especificidade: qual regra vence
Mais cedo ou mais tarde duas regras tentarão estilizar o mesmo elemento de formas diferentes. Uma diz que o texto é azul, outra diz que é vermelho. O navegador tem que escolher uma, e a forma como ele decide é chamada especificidade: o seletor mais específico vence.
A versão curta é uma ordem de força. Um seletor de id bate um seletor de classe, e um seletor de classe bate um seletor de tipo. Então se #header e .title definem ambos uma cor no mesmo elemento, o id vence. Quando duas regras são igualmente específicas, a escrita depois no arquivo vence.
/* seletor de tipo, especificidade (0, 0, 1) */
p {
color: grey;
}
/* seletor de classe, especificidade (0, 1, 0): este vence */
.intro {
color: black;
}<p class="intro">Este parágrafo é preto, porque a regra de classe supera a regra de tipo.</p>Ambas as regras apontam para o parágrafo e ambas definem color, mas o seletor de classe é mais específico que o seletor de tipo, então o parágrafo é preto. Levantar ou abaixar um seletor na escada de especificidade é frequentemente tudo o que é necessário para resolver um conflito sem recorrer a ferramentas mais pesadas. O capítulo box model enfrenta a mesma cascata quando regras de espaçamento colidem.

