A propriedade CSS content é usada com os pseudoelementos ::before e ::after para gerar conteúdo em um elemento. Objetos inseridos usando a propriedade content são elementos substituídos anônimos.

/* Palavras-chave que não podem ser combinadas com outros valores */
content: normal;
content: none;

/* Valores <string> com caracteres especiais devem ser escritos */
/* com escape Unicode, por exemplo \00A0 para &nbsp; */
content: "prefixo";

/* Valores <url> */
content: url("http://www.example.com/test.png");

/* Valores <counter> */
content: counter(contador_capitulo);
content: counters(contador_secao, ".");

/* Valores attr() associados ao valor do atributo HTML */
content: attr(valor string);

/* Palavras-chave que variam com o idioma e posição */
content: open-quote;
content: close-quote;
content: no-open-quote;
content: no-close-quote;

/* Com exceção de normal e none, vários valores */
/* podem ser usados simultaneamente */
content: open-quote chapter_counter;

/* Valores globais */
content: inherit;
content: initial;
content: unset;

Initial valuenormal
Aplica-se a::before and ::after pseudo-elements
Inheritednão
Midiaall
Computed valueOn elements, always computes to normal. On ::before and ::after, if normal is specified, computes to none. Otherwise, for URI values, the absolute URI; for attr() values, the resulting string; for other keywords, as specified.
Animation typediscrete
Canonical orderthe unique non-ambiguous order defined by the formal grammar

Sintaxe

Valores

none
O pseudoelemento não será gerado.
normal
Equivalente a none para os pseudoelementos ::before e ::after.
<string>
Um ou mais caracteres de texto.
<url>
Uma URL que designa um recurso externo (como uma imagem). Se o recurso não puder ser exibido, ele será ignorado ou um placeholder será exibido no seu lugar.
<counter>
O valor de um contador CSS, geralmente um número. Ele pode ser exibido usando a função counter() ou counters().

A função counter() tem duas formas: 'counter(nome)' ou 'counter(nome, estilo)'. O texto gerado será o valor do contador mais próximo do nome fornecido no pseudoelemento. Ele será formatado com o estilo especificado (o padrão é decimal).

A função counters() também tem duas formas: 'counters(nome, string)' ou 'counters(nome, separador, estilo)'. O texto gerado será o valor de todos os contadores com o mesmo nome no escopo do pseudoelemento, do mais afastado ao mais próximo, separados pelo separador especificado. Os contadores serão exibidos no estilo indicado (o padrão é decimal).

attr(x)
O valor do atributo x do elemento. Se não houver um atributo x, uma string vazia será retornada. A diferenciação de maiúsculas e minúsculas dependerá da linguagem do documento.
open-quote | close-quote
Esses valores serão substituídos pela string apropriada da propriedade quotes.
no-open-quote | no-close-quote
Não introduzem nenhum conteúdo, mas aumentam (ou diminuem) o nível de aninhamento de aspas.

Sintaxe formal

normal | none | [ <content-replacement> | <content-list> ] [/ <string> ]?

where
<content-replacement> = <image>
<content-list> = [ <string> | contents | <image> | <quote> | <target> | <leader()> ]+

where
<image> = <url> | <image()> | <image-set()> | <element()> | <cross-fade()> | <gradient>
<quote> = open-quote | close-quote | no-open-quote | no-close-quote
<target> = <target-counter()> | <target-counters()> | <target-text()>
<leader()> = leader( <leader-type> )

where
<image()> = image( [ [ <image> | <string> ]? , <color>? ]! )
<image-set()> = image-set( <image-set-option># )
<element()> = element( <id-selector> )
<cross-fade()> = cross-fade( <cf-mixing-image> , <cf-final-image>? )
<gradient> = <linear-gradient()> | <repeating-linear-gradient()> | <radial-gradient()> | <repeating-radial-gradient()>
<target-counter()> = target-counter( [ <string> | <url> ] , <custom-ident> , <counter-style>? )
<target-counters()> = target-counters( [ <string> | <url> ] , <custom-ident> , <string> , <counter-style>? )
<target-text()> = target-text( [ <string> | <url> ] , [ content | before | after | first-letter ]? )
<leader-type> = dotted | solid | space | <string>

where
<color> = <rgb()> | <rgba()> | <hsl()> | <hsla()> | <hex-color> | <named-color> | currentcolor | <deprecated-system-color>
<image-set-option> = [ <image> | <string> ] <resolution>
<cf-mixing-image> = <percentage>? && <image>
<cf-final-image> = <image> | <color>
<linear-gradient()> = linear-gradient( [ <angle> | to <side-or-corner> ]? , <color-stop-list> )
<repeating-linear-gradient()> = repeating-linear-gradient( [ <angle> | to <side-or-corner> ]? , <color-stop-list> )
<radial-gradient()> = radial-gradient( [ <ending-shape> || <size> ]? [ at <position> ]? , <color-stop-list> )
<repeating-radial-gradient()> = repeating-radial-gradient( [ <ending-shape> || <size> ]? [ at <position> ]? , <color-stop-list> )
<counter-style> = <counter-style-name> | symbols()

where
<rgb()> = rgb( [ [ <percentage>{3} | <number>{3} ] [ / <alpha-value> ]? ] | [ [ <percentage>#{3} | <number>#{3} ] , <alpha-value>? ] )
<rgba()> = rgba( [ [ <percentage>{3} | <number>{3} ] [ / <alpha-value> ]? ] | [ [ <percentage>#{3} | <number>#{3} ] , <alpha-value>? ] )
<hsl()> = hsl( [ <hue> <percentage> <percentage> [ / <alpha-value> ]? ] | [ <hue>, <percentage>, <percentage>, <alpha-value>? ] )
<hsla()> = hsla( [ <hue> <percentage> <percentage> [ / <alpha-value> ]? ] | [ <hue>, <percentage>, <percentage>, <alpha-value>? ] )
<side-or-corner> = [ left | right ] || [ top | bottom ]
<color-stop-list> = <color-stop>#{2,}
<ending-shape> = circle | ellipse
<size> = closest-side | farthest-side | closest-corner | farthest-corner | <length> | <length-percentage>{2}
<position> = [[ left | center | right | top | bottom | <length-percentage> ] | [ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ] | [ center | [ left | right ] <length-percentage>? ] && [ center | [ top | bottom ] <length-percentage>? ]]
<counter-style-name> = <custom-ident>

where
<alpha-value> = <number> | <percentage>
<hue> = <number> | <angle>
<color-stop> = <color> <length-percentage>?
<length-percentage> = <length> | <percentage>

Exemplos

Cabeçalhos e citações

Este exemplo insere aspas ao redor de citações e adiciona a palavra "Capítulo" antes dos cabeçalhos.

HTML

<h1>5</h1>
<p>De acordo com o Sr. Tim Berners-Lee,
  <q cite="http://www.w3.org/People/Berners-Lee/FAQ.html#Internet">I was
    lucky enough to invent the Web at the time when the Internet
    already existed - and had for a decade and a half.</q>
  Devemos entender que não há nada fundamentalmente errado em criar
  algo com base nas contribuições de outras pessoas.
</p>

<h1>6</h1>
<p>De acordo com o Manifesto Mozilla,
  <q cite="https://www.mozilla.org/about/manifesto/">As pessoas
    precisam ter a capacidade de moldar a Internet e suas
    experiências com ela.</q>
  Portanto, podemos concluir que contribuir para a Web aberta pode
  proteger nossas próprias experiências individuais nela.
</p>

CSS

q {
  color: blue;
}

q::before {
  content: open-quote;
}

q::after {
  content: close-quote;
}

h1::before  {
  content: "Cap\00EDtulo ";  /* O espaço no final cria uma separação 
                                entre o conteúdo adicionado e o
                                resto do conteúdo */
}

Resultado

Imagem combinada com texto

Este exemplo insere uma imagem antes do link. Se a imagem não for encontrada, o texto será exibido no seu lugar.

HTML

<a href="https://www.mozilla.org/">Mozilla Home Page</a>

CSS

a::before {
  content: url("https://mozorg.cdn.mozilla.net/media/img/favicon.ico") " MOZILLA: ";
  font: x-small Arial, sans-serif;
  color: gray;
}

Resultado

Alterando classes específicas

Este exemplo insere texto adicional no final de itens especiais em uma lista.

HTML

<h2>Categoriass mais vendidas</h2>
<ol>
  <li>Suspenses políticos</li>
  <li class="new-entry">Histórias de terror</li>
  <li>Biografias</li>    
  <li class="new-entry">Romances de Vampiros</li>
</ol>

CSS

.new-entry::after {
  content: " Novo!";  /* O espaço no final cria uma separação 
                         entre o conteúdo adicionado e o
                         resto do conteúdo */
  color: red;
}

Resultado

Imagens e atributos de elementos

Este exemplo insere uma imagem antes de cada link e adiciona o conteúdo do seu atributo id depois.

HTML

<ul>
  <li><a id="moz" href="http://www.mozilla.org/">
    Mozilla Home Page</a></li>
  <li><a id="mdn" href="https://developer.mozilla.org/">
    Mozilla Developer Network</a></li>
</ul>

CSS

a {
  text-decoration: none;
  border-bottom: 3px dotted navy;
}

a::after {
  content: " (" attr(id) ")";
}

#moz::before {
  content: url("https://mozorg.cdn.mozilla.net/media/img/favicon.ico") ;
}

#mdn::before {
  content: url("https://mdn.mozillademos.org/files/7691/mdn-favicon16.png") ;
}

li {
  margin: 1em;
}

Resultado

Especificações

Especificação Status Comentário
CSS Generated Content Module Level 3
The definition of 'content' in that specification.
Rascunho atual  
CSS Level 2 (Revision 1)
The definition of 'content' in that specification.
Recomendação Definição inicial

Compatibilidade com navegadores

Recurso Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Suporte Básico 1.0 (Yes) 1.0 (1.7 or earlier) 8.0 4.0 1.0
Suporte a url() 1.0 ? 1.0 (1.7 or earlier) 8.0 7.0 1.0
Recurso Android Edge Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Suporte Básico 1.0 (Yes) 1.0 (1.0) 8.0 9.5 1.0
Suporte a url() ? ? ? ? ? ?

Veja também

Etiquetas do documento e colaboradores

 Colaboradores desta página: fernando, SphinxKnight
 Última atualização por: fernando,