<section>
    <p>'p'タグタイプの中で最初の要素</p>
    <div>'div'タグタイプの中で最初の要素</div>
    <p>'p'タグタイプの中で2番目の要素</p>
    <p>'p'タグタイプの中で3番目の要素</p>
    <div>'div'タグタイプの中で2番目の要素</div>
    <div>'div'タグタイプの中で3番目の要素</div>
</section>
/* <section>の<p>タグタイプの子要素の中で
 * <p>タグタイプを基準として
 * 最も最初に位置する要素
*/
section p:first-of-type {
    background-color: yellowgreen;
}

/* <section>の<div>タグタイプの子要素の中で
 * <div>タグタイプを基準として
 * 最も最初に位置する要素
*/
section div:first-of-type {
    background-color: orange;
}
実際に適用した結果
:first-of-type {
    /* ... */
}
<article>
    <h2>見出し要素</h2>
    <p>段落要素1</p>
    <p>段落要素2</p>
</article>
article p:first-of-type {
    background-color: yellowgreen;
}
実際に適用した結果
<article>
    <div>この'div'は最初です。</div>
    <div>この<span>ネストされた'span'は最初です。</span>!</div>
    <div>
        この<em>ネストされた'em'は最初です。</em>が、<em>ネストされたこの'em'は最後です。</em>!
    </div>
    <div>この<span>ネストされた'span'はスタイルされます。</span>!</div>
    <p>この'p'は最初です。</p>
    <div>この'div'は最後です。</div>
</article>
article :first-of-type { /* article *:first-of-typeと同じ */
    background-color: yellowgreen;
}
実際に適用した結果
<style>
    .red-item:first-of-type {
        color: red;
        font-weight: bold;
    }
</style>
<ol>
    <li>red-itemクラス値がありません</li>
    <li class="red-item">マッチする要素だと期待されますが該当しません</li>
    <li class="red-item">li</li>
</ol>
<!--
    * もしかして、.red-itemタイプの中で最初の要素を選択したと思っていませんか?
    * それであれば、誤った選択です。
    *
    * :first-of-typeは、タグタイプの兄弟要素の中で最も最初に位置する要素を選択します。
    *
    * .red-item:first-of-typeは、次の2つの要素に分けて考えられます。
    * => .red-item:クラス属性の値が'red-item'である要素のタグ名は<li>です。
    * => 特定のタイプとは、タグ名のタイプを意味します。
    * => <li>要素が特定のタイプになります。
    * => タグタイプが<li>である最初の要素が、'red-item'というクラス属性の値を持っている場合に選択されます。
    * => そのため、上記の要素の中にマッチする要素は存在しません。
-->
実際に適用した結果 .red-item:first-of-typeセレクターにマッチする要素は存在しません。