CSS ::after Pseudo-Elemento
Use o pseudo-elemento CSS ::after para adicionar conteúdo após o elemento. Veja exemplos e aprenda como utilizá-lo.
O pseudo-elemento CSS ::after cria um elemento extra que é inserido como o último filho do elemento correspondente, logo após o seu conteúdo real. Você não precisa adicionar nenhuma marcação ao HTML — o navegador gera o elemento a partir da sua folha de estilos. Esta página explica o que é o ::after, como funciona a propriedade obrigatória content, os cuidados a ter e os padrões em que ele é genuinamente útil.
O que é o ::after
O ::after permite que você adicione conteúdo gerado — caracteres, strings de texto, uma imagem ou uma forma decorativa — ao final de um elemento sem tocar no HTML do documento. Como a caixa gerada faz parte do elemento, você pode animá-la, posicioná-la ou usá-la como float como qualquer conteúdo normal.
Duas regras são essenciais:
- A propriedade
contenté obrigatória. Se você omitircontent, o pseudo-elemento nunca será criado. Usecontent: ""(uma string vazia) quando quiser apenas uma caixa decorativa, sem texto. - Por padrão, a caixa é inline. Defina
display: block(ouinline-block) se precisar que largura, altura ou margens verticais tenham efeito.
::after vs :after
O ::after também pode ser escrito com a notação de dois pontos simples :after. A forma com dois dois-pontos é o padrão moderno do CSS3 para pseudo-elementos (para distingui-los das pseudo-classes como :hover); a forma com um único dois-pontos existe apenas para compatibilidade com navegadores antigos. Prefira ::after a menos que precise dar suporte a engines legadas como o Internet Explorer 8.
::after vs ::before
O pseudo-elemento ::before insere conteúdo gerado antes do conteúdo do elemento, enquanto o ::after o insere depois. Eles são, de resto, idênticos e frequentemente usados juntos — por exemplo, ::before e ::after são a forma clássica de adicionar aspas de abertura e fechamento ou colchetes decorativos correspondentes ao redor de um título.
O conteúdo gerado não faz parte do DOM: ele não pode ser selecionado pelo usuário, e a maioria dos leitores de tela o ignora (o suporte é inconsistente entre os navegadores). Use ::after apenas para conteúdo puramente decorativo ou complementar — nunca coloque em content um significado que o usuário precise ler.
Versão
Sintaxe
Pseudo-Elemento CSS ::after
::after {
css declarations;
}Exemplo do pseudo-elemento ::after:
Exemplo do CSS ::after
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
p::after {
content: " - William Shakespeare.";
}
</style>
</head>
<body>
<h2>::after selector example</h2>
<p>"Be or not to be"</p>
</body>
</html>No exemplo a seguir, estilos podem ser aplicados ao conteúdo.
Exemplo do pseudo-elemento ::after com conteúdo estilizado:
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
p::after {
content: " - William Shakespeare.";
background-color: #eee;
color: #1c87c9;
padding: 5px 3px;
border: 2px dashed #000;
margin-left: 5px;
}
</style>
</head>
<body>
<h2>::after selector example</h2>
<p>"Be or not to be"</p>
</body>
</html>Casos de uso comuns
O ::after é ideal quando você quer conteúdo visual extra sem poluir sua marcação:
- Formas decorativas e divisores. Uma caixa construída com
content: ""mais umborderoubackground— sublinhados, setas, faixas, caudas de tooltip. - Ícones após links. Adicione uma seta de link externo ou um marcador de tipo de arquivo após um
<a>. - O hack clearfix. Força um elemento pai a conter seus filhos com float.
/* External-link arrow after every link with target="_blank" */
a[target="_blank"]::after {
content: " ↗";
}
/* Clearfix: make a container wrap its floated children */
.clearfix::after {
content: "";
display: block; /* block + clear pushes the box below the floats */
clear: both;
}Note o content: "" vazio no clearfix: ele cria a caixa sem nenhum texto visível, que é exatamente o que você precisa para um auxiliar de layout.
Dicas e cuidados
- Sem
content, sem elemento. Esquecer a propriedadecontenté o motivo mais comum para uma regra::after"não fazer nada." - Defina
displaypara dimensionamento. Um pseudo-elemento inline ignorawidth,heighte margens superior/inferior. Usedisplay: blockouinline-block. - Higiene com aspas. Dentro de strings em
content, escape caracteres especiais com seu código Unicode (ex.:content: "\00BB"para») para que a codificação do arquivo não os quebre.