CSS Nesting – Passo a Passo: Simplifique seus Códigos e Evite Erros
Já ouviu falar em CSS Nesting, ou CSS Aninhado? Aprenda como essa funcionalidade pode simplificar seus códigos e torná-los mais organizados!
O CSS Nesting (CSS aninhado) permite escrever regras de CSS dentro de outras, seguindo a hierarquia do HTML — parecido com o que o Sass já fazia, mas agora nativo nos navegadores modernos. Em vez de repetir o seletor pai, você aninha os filhos dentro dele, deixando o código mais curto, organizado e fácil de manter.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
O que você aprende neste vídeo
Resposta rápida: Nesta aula, o Diego ensina o CSS Nesting (aninhamento de CSS), escrever um seletor dentro do outro, como já se faz no SCSS, mas agora nativo no CSS puro. Em vez de repetir o seletor pai várias vezes, você aninha as regras filhas dentro dele, deixando o código muito mais organizado e enxuto. Ele mostra a sintaxe (o &), como fica na prática e o suporte nos navegadores.
Neste vídeo (17 min):
- 0:00 - O que é o CSS Nesting: escrever um seletor dentro do outro (como no SCSS), agora nativo.
- 2:00 - A sintaxe do aninhamento e o operador
&. - 6:00 - Aninhar as regras filhas dentro do seletor pai (o código fica um dentro do outro).
- 10:00 - O suporte do CSS Nesting nos principais navegadores.
- 16:00 - O código final: muito mais organizado e enxuto.
Para receber o(s) arquivo(s) utilizados na aula, preencha seu e-mail:
Não vamos te encaminhar nenhum tipo de SPAM! A Hashtag Treinamentos é uma empresa preocupada com a proteção de seus dados e realiza o tratamento de acordo com a Lei Geral de Proteção de Dados (Lei n. 13.709/18). Qualquer dúvida, nos contate.
CSS Nesting – Passo a Passo: Simplifique seus Códigos e Evite Erros
Você já utilizou o CSS Nesting? Sabe o que é aninhamento em CSS? Neste post, vou te mostrar como essa importante funcionalidade pode tornar seus códigos mais simples e organizados, permitindo uma estrutura mais concisa, legível e menos propensa a erros.
O CSS Nesting possibilita agrupar seletores dentro de outros, criando uma hierarquia visual que reflete a estrutura do HTML. Isso é especialmente útil em projetos maiores, pois melhora a organização e a legibilidade do código.
Vou te mostrar como transformar seu CSS em um CSS aninhado, como aplicar seleções com aninhamento e também como verificar a compatibilidade dessa funcionalidade nas diferentes versões dos navegadores.
Projeto – Réplica da Página do Google
Para visualizarmos na prática o uso e a aplicação do CSS Nesting, utilizarei como exemplo um projeto que já desenvolvemos aqui na Hashtag: Réplica da Página do Google
Ao longo desse projeto, criamos uma réplica da página inicial do Google do zero, construindo todo o HTML e CSS.
Se você quiser entender o passo a passo de como essa página foi feita, com cada recurso e estrutura aplicada, não deixe de conferir o link acima para acessar todas as aulas e detalhes.

Além disso, você pode baixar o material necessário para acompanhar esta aula diretamente, ou explorar todo o processo em nosso curso gratuito.
O que é o CSS Nesting (CSS Aninhado)?
O CSS Nesting ou CSS Aninhado é uma nova funcionalidade do CSS que permite organizar o código de maneira mais concisa, reduzindo a repetição e melhorando a legibilidade do código.
Com o Nesting, você pode agrupar seletores dentro de outros, criando uma hierarquia visual que reflete a estrutura do HTML. Isso é especialmente útil em projetos maiores, onde a organização do código é fundamental.
Uma das principais vantagens de usar o CSS Nesting é a economia de linhas de código. Em vez de escrever repetidamente seletores completos, você pode agrupar seletores relacionados e aplicar estilos específicos de forma hierárquica.
Além disso, o CSS aninhado melhora a legibilidade e a manutenção do código. Em vez de ter regras CSS espalhadas por diferentes partes do arquivo, o Nesting permite que elas fiquem agrupadas, facilitando a localização e atualização dos estilos.
Para usar o CSS Nesting, basta aninhar os seletores dentro de outros. Por exemplo, na nossa réplica da página do Google, vamos alterar o background-color do ícone de câmera.
Usando CSS composto, faríamos a seleção assim:
div .icone-camera {
background-color: red;
}Isso alteraria a cor de fundo do ícone na nossa página.

Com o CSS aninhado, podemos organizar os seletores em camadas da seguinte forma:
div {
.icone-camera {
background-color: red;
}
}O resultado é o mesmo: estamos selecionando um elemento com a classe icone-camera dentro de uma <div>.
Diferentes Formas de Escrever CSS Aninhado
Ao escrever código usando CSS Nesting, podemos seguir o exemplo anterior ou utilizar o & (e comercial). O & é usado para referenciar o seletor pai dentro do aninhamento.
Ou seja, ao usar o &, é importante garantir que haja um espaço quando desejamos selecionar um elemento dentro de outro. Para reescrever o exemplo anterior com o &, faríamos assim:
div {
& .icone-camera {
background-color: red;
}
}Agora, quando queremos selecionar um elemento que tem a classe .icone-camera e também é uma div (ou seja, é o mesmo elemento), o & não deve ter espaço entre ele e a classe.
div {
&.icone-camera {
background-color: red;
}
}Portanto, para facilitar a compreensão e padronizar o código, você pode sempre usar o &, garantindo o espaço adequado quando necessário.
A importância do CSS aninhado fica mais clara à medida que o número de seletores aumenta, pois fica evidente como a organização do código melhora e como a estrutura ajuda a entender as regras de estilização.
Por exemplo, poderíamos alterar a cor de fundo dos elementos com as classes .icone-camera e .icone-microfone que estão dentro de uma div com a classe .icones-input.
Como queremos selecionar elementos dentro da div.icones-input, precisamos adicionar um espaço entre o & e a classe do elemento que queremos estilizar.
div.icones-input {
& .icone-camera {
background-color: red;
}
& .icone-microfone {
background-color: green;
}
}Dessa forma, todos os elementos com a classe .icone-camera dentro da div.icones-input terão o fundo vermelho, e os elementos com a classe .icone-microfone terão o fundo verde.

Compatibilidade do CSS Nesting
Para verificar a compatibilidade do CSS Nesting com diferentes navegadores, podemos usar ferramentas como o site Can I Use.
Esse site permite verificar a compatibilidade de funcionalidades em vários navegadores.
Basta informar o nome da funcionalidade que deseja usar e verificar as versões dos navegadores que a suportam.

Os sinais verdes indicam as versões dos navegadores que oferecem suporte. Além disso, é importante prestar atenção na porcentagem exibida ao lado de “Global”, no canto superior direito.
Uma porcentagem alta indica que a maioria dos navegadores modernos já aceita essa funcionalidade.
Para usar uma funcionalidade em produção, é recomendável que essa porcentagem esteja acima de 90%, garantindo suporte na maioria dos navegadores.
Comparação com Pré-processadores – Sass
Embora o CSS Nesting seja uma novidade no CSS nativo, pré-processadores como o Sass já oferecem essa funcionalidade há bastante tempo.
Pré-processadores são ótimos por oferecerem várias funcionalidades avançadas. No entanto, usar o CSS aninhado diretamente no CSS nativo facilita ainda mais o trabalho ao desenvolver um projeto, pois elimina a necessidade de pré-processamento adicional.
Reescrevendo o CSS da Página do Google
Para praticar e consolidar seu aprendizado sobre CSS Nesting, vamos reescrever o arquivo CSS do projeto Criando a Página do Google.
Você pode tentar reescrever o código sozinho primeiro e depois compará-lo com o código disponibilizado nesta aula.
Ou, se preferir, pode simplesmente comparar o código sem CSS Nesting com o código refatorado com CSS Nesting e observar as principais mudanças.
Código CSS:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
font-size: 14px;
color: #202124;
height: 100vh;
display: flex;
flex-flow: column;
}
/* Header */
header {
padding: 6px 14px;
display: flex;
align-items: center;
justify-content: end;
gap: 15px;
}
.link-header {
font-size: 13px;
color: #000000de;
text-decoration: none;
}
.link-header:hover {
text-decoration: underline;
}
.produtos {
width: 48px;
height: 48px;
padding: 12px;
fill: #5f6368;
border-radius: 50%;
cursor: pointer;
position: relative;
}
.produtos:hover {
background-color: rgba(60, 64, 67, 0.08);
}
.produtos:hover::after {
position: absolute;
content: "Google Apps";
border-radius: 4px;
background-color: #4f5355;
font-family: Google Sans, Roboto, Helvetica, Arial, sans-serif;
color: white;
font-weight: 500;
font-size: 13px;
padding: 5px 10px;
width: max-content;
top: 100%;
left: 50%;
transform: translate(-50%, 5px);
}
.botao-header {
font-family: Google Sans, Roboto, Helvetica, Arial, sans-serif;
background-color: #1a73e8;
color: white;
font-weight: 500;
padding: 9px 29px;
border-radius: 4px;
line-height: 16px;
border: none;
cursor: pointer;
text-decoration: none;
}
.botao-header:hover {
background-color: #1b66c9;
box-shadow: 0 1px 3px 1px rgba(66, 64, 67, 0.15);
}
/* Main */
main {
display: flex;
flex-flow: column;
align-items: center;
justify-content: center;
gap: 30px;
height: 100%;
}
.logo-google {
width: 272px;
}
.input {
display: flex;
align-items: center;
border: 1px solid #dfe1e5;
border-radius: 24px;
width: 100%;
max-width: 584px;
height: 48px;
gap: 13px;
padding: 0px 14px;
}
.input:hover,
.input:focus-within {
box-shadow: 0 1px 6px rgba(32, 33, 36, 0.28);
border-color: transparent;
}
.icone-lupa svg {
width: 20px;
height: 20px;
fill: #9aa0a6;
display: block;
}
.area-texto {
font-family: inherit;
width: 100%;
font-size: 16px;
line-height: 22px;
border: none;
resize: none;
outline: none;
}
.icones-input {
display: flex;
align-items: center;
gap: 16px;
}
.icones-input div {
position: relative;
cursor: pointer;
}
.icones-input svg {
width: 24px;
height: 24px;
display: block;
}
.icone-teclado:hover::after {
content: "Ferramentas de introdução";
}
.icone-microfone:hover::after {
content: "Pesquisa por voz";
}
.icone-camera:hover::after {
content: "Pesquisar por imagem";
}
.icone-teclado:hover::after,
.icone-microfone:hover::after,
.icone-camera:hover::after {
position: absolute;
border-radius: 4px;
background-color: #4f5355;
font-family: Google Sans, Roboto, Helvetica, Arial, sans-serif;
color: white;
font-weight: 500;
font-size: 13px;
padding: 5px 10px;
width: max-content;
top: 100%;
left: 50%;
transform: translate(-50%, 10px);
}
.botoes-pesquisa {
display: flex;
gap: 8px;
}
.botao-pesquisa {
background-color: #f8f9fa;
border: solid 1px #f8f9fa;
padding: 10px 16px;
border-radius: 4px;
cursor: pointer;
font-size: inherit;
color: #3c4043;
}
.botao-pesquisa:hover {
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
border: 1px solid #dadce0;
}
.texto-disponibilizado {
display: flex;
gap: 5px;
font-size: 13px;
color: #4d5156;
margin-bottom: 10vh;
}
.texto-disponibilizado a {
text-decoration: none;
color: #1a0dab;
}
.texto-disponibilizado a:hover {
text-decoration: underline;
}
/* Footer */
footer {
background-color: #f2f2f2;
}
.pais {
border-bottom: 1px solid #dadce0;
}
.pais,
.informacoes {
padding: 15px 30px;
display: flex;
justify-content: space-between;
}
.informacoes div {
display: flex;
gap: 30px;
}
.informacoes a {
color: inherit;
text-decoration: none;
}
.informacoes a:hover {
text-decoration: underline;
}Código com CSS Nesting:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
font-size: 14px;
color: #202124;
height: 100vh;
display: flex;
flex-flow: column;
}
/* Header */
header {
padding: 6px 14px;
display: flex;
align-items: center;
justify-content: end;
gap: 15px;
}
.link-header {
font-size: 13px;
color: #000000de;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
.produtos {
width: 48px;
height: 48px;
padding: 12px;
fill: #5f6368;
border-radius: 50%;
cursor: pointer;
position: relative;
&:hover {
background-color: rgba(60, 64, 67, 0.08);
&::after {
position: absolute;
content: "Google Apps";
border-radius: 4px;
background-color: #4f5355;
font-family: Google Sans, Roboto, Helvetica, Arial, sans-serif;
color: white;
font-weight: 500;
font-size: 13px;
padding: 5px 10px;
width: max-content;
top: 100%;
left: 50%;
transform: translate(-50%, 5px);
}
}
}
.botao-header {
font-family: Google Sans, Roboto, Helvetica, Arial, sans-serif;
background-color: #1a73e8;
color: white;
font-weight: 500;
padding: 9px 29px;
border-radius: 4px;
line-height: 16px;
border: none;
cursor: pointer;
text-decoration: none;
&:hover {
background-color: #1b66c9;
box-shadow: 0 1px 3px 1px rgba(66, 64, 67, 0.15);
}
}
/* Main */
main {
display: flex;
flex-flow: column;
align-items: center;
justify-content: center;
gap: 30px;
height: 100%;
}
.logo-google {
width: 272px;
}
.input {
display: flex;
align-items: center;
border: 1px solid #dfe1e5;
border-radius: 24px;
width: 100%;
max-width: 584px;
height: 48px;
gap: 13px;
padding: 0px 14px;
&:hover,
&:focus-within {
box-shadow: 0 1px 6px rgba(32, 33, 36, 0.28);
border-color: transparent;
}
}
.icone-lupa {
& svg {
width: 20px;
height: 20px;
fill: #9aa0a6;
display: block;
}
}
.area-texto {
font-family: inherit;
width: 100%;
font-size: 16px;
line-height: 22px;
border: none;
resize: none;
outline: none;
}
.icones-input {
display: flex;
align-items: center;
gap: 16px;
& div {
position: relative;
cursor: pointer;
}
& svg {
width: 24px;
height: 24px;
display: block;
}
}
.icone-teclado {
&:hover::after {
content: "Ferramentas de introdução";
}
}
.icone-microfone {
&:hover::after {
content: "Pesquisa por voz";
}
}
.icone-camera {
&:hover::after {
content: "Pesquisar por imagem";
}
}
.icone-teclado:hover::after,
.icone-microfone:hover::after,
.icone-camera:hover::after {
position: absolute;
border-radius: 4px;
background-color: #4f5355;
font-family: Google Sans, Roboto, Helvetica, Arial, sans-serif;
color: white;
font-weight: 500;
font-size: 13px;
padding: 5px 10px;
width: max-content;
top: 100%;
left: 50%;
transform: translate(-50%, 10px);
}
.botoes-pesquisa {
display: flex;
gap: 8px;
}
.botao-pesquisa {
background-color: #f8f9fa;
border: solid 1px #f8f9fa;
padding: 10px 16px;
border-radius: 4px;
cursor: pointer;
font-size: inherit;
color: #3c4043;
&:hover {
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
border: 1px solid #dadce0;
}
}
.texto-disponibilizado {
display: flex;
gap: 5px;
font-size: 13px;
color: #4d5156;
margin-bottom: 10vh;
& a {
text-decoration: none;
color: #1a0dab;
&:hover {
text-decoration: underline;
}
}
}
/* Footer */
footer {
background-color: #f2f2f2;
}
.pais {
border-bottom: 1px solid #dadce0;
}
.pais,
.informacoes {
padding: 15px 30px;
display: flex;
justify-content: space-between;
}
.informacoes {
& div {
display: flex;
gap: 30px;
}
& a {
color: inherit;
text-decoration: none;
&:hover {
text-decoration: underline;
}
}
}Note como o código refatorado com Nesting evita repetições desnecessárias ao definir estilos semelhantes para diferentes elementos e estados, como o hover.
Com essa abordagem, o código fica mais conciso e organizado, facilitando sua leitura e manutenção.
Perguntas frequentes
1. O que é CSS Nesting?
É um recurso do CSS que permite escrever seletores aninhados, colocando as regras de elementos filhos dentro da regra do elemento pai. Isso segue a estrutura do HTML, reduz a repetição de seletores e deixa a folha de estilos mais organizada.
2. CSS Nesting funciona em todos os navegadores?
O aninhamento nativo já é suportado pelas versões atuais dos principais navegadores (Chrome, Edge, Firefox e Safari). Para navegadores muito antigos, ainda vale usar um pré-processador como o Sass ou ferramentas de build que convertem o aninhamento.
3. Qual a diferença entre CSS Nesting e Sass?
O Sass é um pré-processador que precisa ser compilado para CSS e oferece aninhamento há anos, além de variáveis e funções. O CSS Nesting traz o aninhamento direto ao CSS nativo, sem etapa de compilação, cobrindo um dos recursos mais usados do Sass.
4. Como usar o CSS Nesting?
Dentro de uma regra, escreva o seletor filho usando o & ou diretamente, por exemplo: .card { color: #333; & .titulo { font-weight: bold; } }. O navegador interpreta o aninhamento e aplica os estilos como se fossem regras separadas.
Conclusão – CSS Nesting – Passo a Passo: Simplifique seus Códigos e Evite Erros
O CSS Nesting é uma poderosa adição ao CSS, que facilita a escrita de estilos de forma mais concisa e organizada, mantendo uma hierarquia visual que reflete a estrutura do HTML. Isso torna o código mais legível e fácil de manter.
Nessa aula, você aprendeu o que é CSS Nesting, como verificar sua compatibilidade com navegadores e como implementá-lo em seus projetos.
Com a crescente adoção do CSS aninhado pelos principais navegadores, essa será uma ferramenta essencial para qualquer desenvolvedor front-end. Portanto, não perca tempo! Aprenda e pratique essa importante funcionalidade.
E se você quer se aprofundar ainda mais no desenvolvimento web, escrevendo códigos em HTML e CSS de forma profissional e criando projetos reais, conheça o nosso Curso Completo HTML e CSS Impressionador.
Hashtag Treinamentos
Para acessar publicações de JavaScript, clique aqui!
Posts mais recentes de HTML e CSS
- LESS CSS: Guia Completo do Pré-processador (2026)LESS CSS é um pré-processador que adiciona variáveis, mixins, nesting e operações matemáticas ao CSS. Aprenda a configurar e usar com projeto prático.
- Variáveis no CSS (CSS Variables): Como Usar de Forma ProfissionalVocê sabe o que são Variáveis no CSS (CSS Variables)? Aprenda como usar técnicas que vão transformar a forma como você escreve variáveis CSS.
- Display CSS: Nova Sintaxe e Como UsarAprenda a usar a propriedade display CSS com a nova sintaxe de múltiplos valores. Veja exemplos práticos e descubra como combinar estilos em um único comando.
Posts mais recentes da Hashtag Treinamentos
- Planilha de Controle de Notas Fiscais no Excel [Grátis]Baixe a planilha de controle de notas fiscais no Excel grátis: calcule ISS e retenções, veja o que está em aberto e gere a cobrança de cada nota de serviço.
- Qual IA usar na empresa: ChatGPT, Claude ou Perplexity?Qual IA usar na empresa: veja as diferenças entre ChatGPT, Claude e Perplexity e quando cada um rende mais em cada área da sua equipe.
- Apostilas Gratuitas em PDF: Excel, Power BI, Python e IABaixe apostilas gratuitas em PDF de Excel, Power BI, Python, Claude e agentes de IA, com exercícios e gabarito. Escolha a sua e comece hoje.








