Artigo original: https://www.freecodecamp.org/news/css-before-and-after-how-to-use-the-content-property/
A propriedade content
no CSS define o conteúdo de um elemento. Você já deve ter ouvido falar que essa propriedade se aplica somente aos pseudoelementos ::before
e ::after
. Neste artigo, exploraremos os diversos casos de uso para a propriedade content
, incluindo casos para além dos pseudoelementos.
Pré-requisito
Como a maioria dos casos de uso da propriedade content
envolve pseudoelementos, sugiro que você esteja familiarizado com o funcionamento dos pseudoelementos ::before
e ::after
. Abaixo, vemos um ótimo artigo para esclarecer algumas dúvidas:
Valores aceitos
Primeiro, vamos examinar todos os valores aceitos pela propriedade content
.
normal
: é o valor padrão. Ele registra comonone
quando usado com os pseudoelementos.none
: um pseudoelemento não será gerado.<string>
: define o conteúdo com a string especificada. A string pode conter sequências de escape do Unicode. Por exemplo, o símbolo para copyright:\\000A9
.<imagem>
: define o conteúdo como sendo uma imagem ou gradiente usandourl()
oulinear-gradient()
.open-quote
|close-quote
: define que o conteúdo receba o caractere adequado de aspa referido na propriedadequotes
.no-open-quote
|no-close-quote
: remove as aspas do elemento selecionado, mas ainda adiciona ou reduz o nível de aninhamento referido na propriedadequotes
.attr(*atributo*)
: define o conteúdo como o valor em string do atributo selecionado dos elementos selecionados.counter()
: define o conteúdo como o valor de umcounter
(em português, contador) – geralmente, um número.
String
Um dos exemplos mais básicos seria a adição de conteúdo em strings antes ou depois de um elemento. Neste exemplo, adicionaremos um símbolo de link antes de um link e adicionaremos o URL do link depois dele.
a::before {
content: "\\1F517 ";
}
a::after {
content: " (" attr(href) ")";
}
Observe o espaço após o caractere Unicode no pseudoelemento ::before
e antes do primeiro parêntese no pseudoelemento ::after
. Isso criará um espaço entre eles e o elemento pai.
Como alternativa, é possível adicionar um padding
ou uma margin
aos pseudoelementos para adicionar uma separação.
Aspas básicas
Com a propriedade content
, é possível adicionar aspas antes e/ou após os elementos. Agora, no HTML, temos a tag <q>
. Ela também adicionará aspas ao redor do conteúdo. Porém, com a propriedade content
, temos mais controle sobre a implementação.
Vejamos um exemplo básico da adição de aspas:
Também é possível fazer isso usando a tag <q>
. Talvez, no entanto, queiramos estilizar as aspas de um modo diferente. Vamos, então, adicionar apenas uma aspa de abertura, mas não uma aspa de fechamento. Vamos também estilizar a aspa de abertura.
p {
position: relative;
font-size: 3rem;
margin: 4rem;
}
p::before {
content: open-quote;
position: absolute;
left: -3.5rem;
top: -2rem;
font-size: 8rem;
color: rgba(0, 0, 0, 0.5)
}
O resultado será este:
Aspas avançadas
Também podemos especificar onde não queremos aspas. Por exemplo, você pode estar citando alguém que está citando outra pessoa. Assim, você teria aspas dentro de aspas, o que pode ficar confuso para o leitor.
No CodePen abaixo, estamos usando tags <q>
do HTML e, em seguida, especificando quais tags não devem exibir as aspas.
À primeira vista, você pode pensar que devemos apenas remover a tag <q>
quando necessário. Porém, especificar onde uma aspa não deve estar ainda aumenta ou diminui o nível de aninhamento referenciado a partir da propriedade quotes
.
Para explicar isso, precisamos entender a propriedade quotes
. Aqui temos um "array" de caracteres que pode ser usado ao colocar aspas. Veja um exemplo:
q {
quotes: '“' '”' '‘' '’' '“' '”';
}
Estes são conjuntos de aspas. O primeiro conjunto será usado para o nível superior de aspas. O segundo conjunto será usado para a primeira aspa aninhada. O terceiro conjunto será usado para a segunda aspa aninhada e assim por diante, se houver mais conjuntos incluídos.
Agora que entendemos a propriedade quotes
, posso explicar como funcionam as propriedades no-open-quote
e no-close-quote
.
Para cada nível de aspas, podemos atribuir diferentes conjuntos de caracteres para usar para como aspas.
Veja o exemplo abaixo. Você verá que o segundo nível de aspas é ignorado.
Atributos
Atributos podem ser usados para passar conteúdo do HTML para a propriedade content
do CSS. De fato, já usamos isso no exemplo do link, onde usamos o atributo href
para incluir a string do URL como parte de nosso conteúdo.
Um caso de uso perfeito para isso é uma dica (tooltip). Você pode adicionar um atributo title
a um elemento em HTML para ter uma dica interna simples ao passar o mouse. Para personalizar isso, no entanto, podemos usar um atributo de dados em nossa tag do HTML e, em seguida, usar a propriedade content
para adicionar a dica.
Neste exemplo, usamos o atributo data-tooltip
do nosso elemento do HTML para passar o valor para a nossa dica. Para o ponteiro da dica, definimos o content
como ""
, já que content
é necessário para renderizar um pseudoelemento ::before
ou ::after
.
Contadores
A função counter()
do CSS retorna uma string que representa o valor atual do contador nomeado. No exemplo a seguir, temos uma lista ordenada que adicionaremos conteúdo usando um counter
.
<ol>
<li></li>
<li></li>
<li></li>
</ol>
ol {
counter-reset: exampleCounter;
}
li {
counter-increment: exampleCounter;
}
li::after {
content: "[" counter(exampleCounter) "] == ["
counter(exampleCounter, upper-roman) "]";
}
Sem entrar em mais detalhes com relação à função counter
, primeiro, precisamos iniciar o contador no elemento ol
. Podemos nomeá-lo como quisermos. Em seguida, informamos ao contador que aumente em 1 para cada elemento li
. Por fim, definimos o content
de li::after
.
Este é o resultado:
Você pode usar isso para personalizar o conteúdo dentro de cada item de lista que precise de um número correspondente. Também é possível personalizar o próprio item de lista. Por exemplo, você pode remover a numeração padrão e implementar um sistema de numeração personalizado.
Imagens
Imagens e gradientes podem ser usados com a propriedade content
. Isso é bastante direto. Aqui temos um exemplo que usa os dois:
Para fins de acessibilidade, há uma opção para adicionar texto alternativo para imagens. Esse recurso, porém, ainda não tem suporte total.
content: url(//unsplash.it/200/200) / "Texto alternativo aqui";
Observação: até o momento em que o texto foi escrito, essa funcionalidade não tinha suporte no Firefox, IE e no Safari. Além disso, gradientes não funcionavam no Firefox.
Além dos pseudoelementos
Sim! Você pode usar a propriedade content
fora dos pseudoelementos ::before
e ::after
. Porém, seu uso é limitado e não totalmente compatível com os navegadores.
O caso de uso mais compatível seria a substituição de um elemento.
<div id='replace'>
codeSTACKr
</div>
#replace {
content: url("<https://www.codestackr.com/logo_twoline_light.svg>");
width: 100%;
}
Observação: substituir elementos não tem suporte do IE.
Conclusão
Na maioria das vezes, você verá content: ""
junto dos pseudoelementos ::before
e ::after
. A propriedade content
, no entanto, tem várias aplicações úteis.
O melhor uso, na minha opinião, é para a atualização em massa de elementos. Se quiser adicionar um ícone antes de cada link em seu site, será muito mais fácil adicioná-lo por meio da propriedade content
do que adicioná-lo em cada elemento de um documento do HTML.
Obrigado pela leitura!
Obrigado por ler este artigo. Espero que ele tenha ajudado você a entender melhor como a propriedade content
funciona no CSS.
Sou o Jesse, e venho do Texas. Confira mais conteúdo meu e me informe se ajudei você de algum modo em sua jornada para se tornar um desenvolvedor para a web.
- Inscreva-se no meu canal no YouTube
- Mande um oi pelo Instagram ou pelo Twitter
- Assine minha newsletter