W3docs

CSS :first-of-type Pseudo Classe

A pseudo-classe CSS :first-of-type seleciona o primeiro elemento do seu tipo entre elementos irmãos. Leia sobre ela e experimente exemplos.

A pseudo-classe CSS :first-of-type seleciona um elemento que é o primeiro do seu tipo entre seus irmãos. É equivalente a [:nth-of-type(1)](/learn-css/nth-of-type).

Exemplo da pseudo-classe CSS :first-of-type

O seletor conta os irmãos pelo nome da tag HTML, e não por classe, atributo ou papel. Para cada tipo de elemento distinto dentro de um elemento pai, exatamente um elemento pode corresponder a :first-of-type — o primeiro daquela tag. Isso significa que um único pai pode ter várias correspondências de :first-of-type ao mesmo tempo (uma por tag), o que é o comportamento que mais frequentemente surpreende quem vem de :first-child.

:first-of-type vs :first-child

O seletor :first-of-type é frequentemente comparado ao :first-child, mas eles diferem em escopo. Enquanto :first-child corresponde a um elemento apenas quando ele é o primeiro filho do seu pai, independentemente do tipo, :first-of-type corresponde ao primeiro irmão de um determinado tipo mesmo quando outros elementos o precedem. Ambos os seletores compartilham a mesma especificidade CSS.

Considere esta marcação:

<div>
  <h2>Heading</h2>
  <p>First paragraph</p>
  <p>Second paragraph</p>
</div>
  • p:first-child não corresponde a nada — o primeiro filho é o <h2>, não um <p>.
  • p:first-of-type corresponde ao primeiro <p> ("First paragraph"), pois é o primeiro parágrafo entre seus irmãos.

Use :first-of-type quando quiser "o primeiro título", "a primeira lista" ou "o primeiro parágrafo" dentro de um contêiner, independentemente de quais tags o precedem. Recorra a :first-child apenas quando o elemento precisar ser literalmente o filho inicial.

Quando utilizá-lo

Alguns padrões práticos:

  • Estilizar o parágrafo introdutório de um artigo sem adicionar uma classe à marcação.
  • Remover a margem superior ou borda do primeiro item de um componente repetido (por exemplo, o primeiro <figure> em uma galeria).
  • Combiná-lo com :last-of-type para remover as bordas externas de uma pilha, ou com :nth-of-type() quando precisar de uma posição diferente da primeira.

Se um pai contiver apenas um elemento de um tipo, esse elemento é ao mesmo tempo seu :first-of-type e seu :only-of-type.

Perigo

A partir do Selectors Level 4, o elemento selecionado não precisa estritamente de um nó pai no DOM para corresponder.

Versão

Selectors Level 3

Selectors Level 4

Sintaxe

Sintaxe do CSS :first-of-type

:first-of-type {
  css declarations;
}

Exemplo do seletor :first-of-type:

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      p:first-of-type {
        background: #8ebf42;
      }
    </style>
  </head>
  <body>
    <h2>:first-of-type selector example</h2>
    <p>Paragraph 1</p>
    <p>Paragraph 2</p>
    <p>Paragraph 3</p>
  </body>
</html>

Exemplo do seletor :first-of-type com a tag <article>:

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      p:first-of-type {
        font-size: 22px;
        color: #777777;
      }
    </style>
  </head>
  <body>
    <h2>:first-of-type selector example</h2>
    <article>
      <h2>This is a title.</h2>
      <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. </p>
      <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. .</p>
      <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. .</p>
    </article>
  </body>
</html>

Exemplo do seletor :first-of-type com algumas tags HTML:

Aqui article:first-of-type corresponde apenas ao primeiro <article>, portanto o fundo escuro não é aplicado ao segundo. O seletor tem escopo por pai e por tag, o que o torna ideal para estilizar a primeira instância de um bloco repetido.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      p {
        margin: 0;
      }
      article:first-of-type {
        background-color: #777777;
        color: #ffffff;
      }
    </style>
  </head>
  <body>
    <h2>:first-of-type selector example</h2>
    <article>
      <p>This is a first element!</p>
      <p>This <em>nested 'em' is first</em>!</p>
      <p>This <strong>nested 'strong' is first</strong>, but this <strong>nested 'strong' is last</strong>!</p>
      <p>This <span>nested 'span' gets styled</span>!</p>
      <q>This is a 'q' element!</q>
      <p>This is a last element.</p>
    </article>
    <article>
      <p>This is a second article.</p>
    </article>
  </body>
</html>

Compatibilidade com Navegadores

NavegadorVersão
Chrome1.0
Firefox1.0
Safari1.0
Edge12.0
Opera7.0
IE9.0

Prática

Prática
Qual é a definição e o uso corretos da pseudo-classe CSS :first-of-type?
Qual é a definição e o uso corretos da pseudo-classe CSS :first-of-type?
Was this page helpful?