W3docs

CSS :first-of-type Pseudo Classe

La pseudo-classe CSS :first-of-type seleziona il primo elemento del suo tipo tra i fratelli. Scopri come usarla con esempi pratici.

La pseudo-classe CSS :first-of-type seleziona un elemento che è il primo del suo tipo tra i suoi fratelli. È equivalente a [:nth-of-type(1)](/learn-css/nth-of-type).

Esempio di pseudo-classe CSS :first-of-type

Il selettore conta i fratelli in base al nome del tag HTML, non per classe, attributo o ruolo. Per ogni tipo di elemento distinto all'interno di un genitore, esattamente un elemento può corrispondere a :first-of-type — il primo di quel tag. Ciò significa che un singolo genitore può avere più corrispondenze :first-of-type contemporaneamente (una per tag), il che è il comportamento che più spesso sorprende chi proviene da :first-child.

:first-of-type vs :first-child

Il selettore :first-of-type viene spesso confrontato con :first-child, ma differiscono per portata. Mentre :first-child corrisponde a un elemento solo quando è il primo figlio del suo genitore indipendentemente dal tipo, :first-of-type corrisponde al primo fratello di un dato tipo anche quando altri elementi lo precedono. Entrambi i selettori condividono la stessa specificità CSS.

Considera questo markup:

<div>
  <h2>Heading</h2>
  <p>First paragraph</p>
  <p>Second paragraph</p>
</div>
  • p:first-child non corrisponde a nulla — il primo figlio è <h2>, non un <p>.
  • p:first-of-type corrisponde al primo <p> ("First paragraph"), perché è il primo paragrafo tra i suoi fratelli.

Usa :first-of-type quando vuoi "il primo titolo", "il primo elenco" o "il primo paragrafo" all'interno di un contenitore indipendentemente dai tag che lo precedono. Ricorri a :first-child solo quando l'elemento deve essere letteralmente il primo figlio.

Quando usarlo

Alcuni pattern pratici:

  • Stilizzare il paragrafo introduttivo di un articolo senza aggiungere una classe al markup.
  • Rimuovere il margine superiore o il bordo dal primo elemento di un componente ripetuto (ad es. il primo <figure> in una galleria).
  • Abbinarlo a :last-of-type per eliminare i bordi esterni di uno stack, oppure a :nth-of-type() quando hai bisogno di una posizione diversa dalla prima.

Se un genitore contiene un solo elemento di un tipo, quell'elemento è sia il suo :first-of-type che il suo :only-of-type.

Pericolo

A partire da Selectors Level 4, l'elemento selezionato non richiede strettamente un nodo genitore nel DOM per corrispondere.

Versione

Selectors Level 3

Selectors Level 4

Sintassi

Sintassi CSS :first-of-type

:first-of-type {
  css declarations;
}

Esempio del selettore :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>

Esempio del selettore :first-of-type con il 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>

Esempio del selettore :first-of-type con alcuni tag HTML:

Qui article:first-of-type corrisponde solo al primo <article>, quindi il suo sfondo scuro non viene applicato al secondo. Il selettore ha portata per genitore e per tag, il che lo rende ideale per stilizzare la prima istanza di un blocco ripetuto.

<!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>

Compatibilità con i browser

BrowserVersione
Chrome1.0
Firefox1.0
Safari1.0
Edge12.0
Opera7.0
IE9.0

Pratica

Pratica
Qual è la definizione e l'uso corretti della pseudo-classe CSS :first-of-type?
Qual è la definizione e l'uso corretti della pseudo-classe CSS :first-of-type?
Was this page helpful?