First of type css: :first-of-type — CSS: Cascading Style Sheets

Различия между :nth-child и :nth-of-type / Хабр

Допустим, есть такой HTML:

<section>
   <p>Little</p>
   <p>Piggy</p>    <!— Нужен этот элемент —>
</section>
Следующий CSS будет делать одно и тоже:

p:nth-child(2) { color: red; }

p:nth-of-type(2) { color: red; }

Хотя, конечно, в этих селекторах, есть разница.

Псевдокласс :nth-child, означачает выбрать элемент, если:

  1. Этот элемент — параграф;
  2. Это второй элемент одного родителя.
Псевдокласс :nth-of-type, означает:

  1. Выбрать второй параграф одного родителя.
Предположим, что наша разметка изменена следующим образом:

<section>
   <h2>Words</h2>
   <p>Little</p>
   <p>Piggy</p>    <!— Нужен этот элемент —>
</section>
Теперь первый вариант не работает:

p:nth-child(2) { color: red; } /* Не работает */
Второй продолжает работать:

p:nth-of-type(2) { color: red; } /* Продолжает работать */
Под «Не работает» я имею ввиду, что cелектор :nth-child выбирает слово «Little» вместо «Piggy». Потому что элемент выполняет оба условия: 1) Это второй элемент родительского элемента и 2) Это параграф. Под «Продолжает работать», я имею ввиду, что селектор продолжает выбираться «Piggy», потому что это второй параграф родительского элемента.

Если добавить <h3> после <h2>, то селектор с :nth-child не выберет ничего, потому что параграф больше не является вторым элементом. Селектор с :nth-of-type продолжит работать.

Мне кажется :nth-of-type менее хрупкий и более полезный в целом, несмотря на это

:nth-child продолжает быть основным в работе. Как часто вы думаете «Я хочу выбрать второй элемент в родительском блоке, если это параграф». Возможно иногда, но чаще вы думаете «Выбрать второй параграф» или «выбрать каждую третью строку таблицы», для этих задач больше подходит :nth-of-type (опять же, на мой взгляд).

Большинство ситуаций, когда я говорю «Почему мой селектор с :nth-child не работает?» случаются из за того, что я забываю про выборку тегов и нужный тег не оказывается по счету тем, который нужен. Поэтому, при использовании :nth-child лучше указывать его от родителя и не использовать привязку к тегу.

dl :nth-child(2) {  } /* Этот вариант лучше чем */
dd:nth-child(2) {  } /* этот */
Но, конечно, все зависит от конкретной ситуации.

Поддержка браузерами :nth-of-type

довольно приличная… Firefox 3.5+, Opera 9.5+, Chrome 2+, Safari 3.1+, IE 9+. Я бы сказал, если вам нужна более глубокая поддержка, то используйте jQuery (используйте селектор и применяйте класс, там где нужно), но jQuery прекратил поддержку :nth-of-type. Слышал, что из за редкого использования, но мне это кажется странным. Если вы хотите пойти этим путем, то вот плагин возвращающий поддержку назад.

Использование селекторов first-of-type, first-child и nth-of-type

Довольно распространено создание особо внешнего вида для элемента, появляющегося впервые: выделение курсивом первого абзаца на странице, или, например, использование эффекта первой строки вступления. Обычно это задается с помощью применения идентификатора к нужному элементу. Но в этом подходе есть существенные недостатки: каждый раз при создании нового первого абзаца нужно не забыть применить идентификатор для достижения эффекта. Намного проще задать правило, которое будет срабатывать в подходящей ситуации, не зависимо от действий разработчика. 

Если постараться сократить использование идентификаторов, классов и встроенного в HTML кода CSS, так как это зачастую неэффективно, то остаются два решения для создания особого внешнего вида у элементов, появляющихся впервые.

Псевдокласс first-child

Псевдокласс first-child (первенец) задает свойства первому элементу в данном случае. Например, чтобы выбрать первый элемент в теге body, если это абзац, можно использовать следующий код CSS:

body p:first-child {
        font-weight: 800;
}

Вероятно, будет понятней, если прочитать этот селектор задом наперед: если первый элемент внутри тега body – это абзац, то делаем его шрифт жирным.

Хотя таким образом можно обратиться к первому абзацу, только если до него нет других элементов: если перед абзацем есть заголовок, то этот абзац уже не первый элемент в теге body и такой селектор его не выберет.

Псевдоклассы first-of-type и nth-of-type

Хотя такой подход встречается реже, лучшим и наиболее гибким решением будет использование псевдокласса first-of-type (первый этого типа) или nth-of-type (энный этого типа). Здесь все очень просто, эти псевдоклассы делают именно то, что можно ожидать, судя по их названию: обращаются к первому или энному элементу в данном случае. Таким образом, чтобы выбрать первый абзац на странице, как в примере выше, воспользуемся таким кодом CSS:

p:first-of-type {
        font-style: italic;
}

Или таким:

p:nth-of-type(1) {
        font-style: italic;
}

Число в круглых скобках в конце селектора указывает, какой элемент будет выбран: 1 означает первый подходящий элемент, 2 — второй и так далее. Также возможно поместить в круглые скобки формулу.

Использование псевдокласса first-of-type или nth-of-type в ситуации выше позволяет любому количеству элементов или содержимого находится перед абзацем и все равно будет выбран первый абзац. Конечно, можно задавать еще более точные условия и объединять эти псевдоклассы с другими:

article p:first-of-type:first-line {
        font-feature-settings:"smcp";
}

С помощью подходящих приставок производителей для свойства настроек особенностей шрифта объявление выше выберет первую строку первого абзаца на любой странице и отобразит ее в настоящих малых заглавных или капители.

Автор урока Dudley Storey

Перевод — Дежурка

Смотрите также:

  • Использование селектора only-of-type
  • Использование элементов блоков
  • Использование множественных фоновых изображений в CSS3

Что такое CSS: Псевдо-класс первого типа

Иногда вы сталкиваетесь со сценарием, когда вы хотите настроить таргетинг на определенный тип элемента в группе из братьев и сестер , и вот где первый тип псевдокласс помогает вам, потому что он нацелен на первый элемент указанного типа и группу из братьев и сестер .

Допустим, у нас есть контейнер из div ; внутри контейнера есть много элементов p, некоторые из которых являются элементами h2. Но вам особенно нужно настроить таргетинг на первый элемент h2 в родственной группе. Вы можете быстро решить этот сценарий с помощью CSS first типа 9.0003 псевдокласс .

На приведенном выше рисунке показано, что внутри нашего контейнера у нас есть несколько элементов h2 и p, и с помощью первого в своем роде псевдокласса мы нацелились на первый элемент h2 из родственной группы и изменили цвет до синего.

Синтаксис CSS

Базовый синтаксис для псевдокласса первого типа CSS следующий:

 
 :first-of-type {
  css объявления;
}
 

Определение

Первый псевдокласс CSS типа соответствует первому элементу определенного типа из родственной группы.

Представьте себе сценарий, в котором у вас есть несколько вложенных контейнеров внутри основного контейнера, и каждый вложенный контейнер содержит элементы h2 и p. Но если вы особенно хотите настроить таргетинг на первый элемент h2 из каждого вложенного контейнера, то лучше всего для этого подойдет первый в своем роде псевдокласс .

Потому что CSS первый из типа псевдокласс соответствует первому конкретному типу элемента из группы братьев и сестер .

Как использовать CSS первого типа

При стилизации веб-страницы вы можете столкнуться со сценариями, когда вы хотите настроить первый элемент с похожим стилем CSS. Вы можете добиться этого с помощью первого в своем роде псевдокласса

.

Использование селектора первого типа CSS довольно просто, и вам нужно выбрать элемент HTML с помощью селектора тегов и добавить «» в конце выбранного селектора.

 
 <Селектор тегов>:first-of-type {
  css объявления;
}
 

Первый тип работает с селекторами элементов/тегов, такими как div, p, span и многими другими.

Предположим, у вас есть контейнер div . Внутри контейнера находятся 2 элемента p и по одному элементу h2 и h3.

 
 <дел>
   

Основной заголовок

Второй заголовок

Абзац

Абзац

И вы хотите стилизовать первый элемент p из группы братьев и сестер .

Вот как вы можете использовать первый-в-типе:-

 
 p:первый-в-типе {
    цвет фона: аква;
    граница: 2px сплошной черный;
    ширина: подгонка содержимого;
}
 

Выше мы выбираем первые p элементов из группы братьев и сестер , добавляем цвет рамки и фона и ограничиваем ширину элемента.

Выход:-

Вы можете видеть, что приведенный выше код стиля применяется только к первому абзацу на изображении ниже, потому что первый по типу выбирает только первый элемент из родственной группы.

Кроме того, вы можете комбинировать псевдокласс с селектором класса.

Как использовать вместе с селекторами классов

CSS first of type также можно комбинировать с селектором класса для выбора первого определенного типа элемента из группы родственных элементов . Вам просто нужно выбрать тип элемента с именем класса и добавить первый псевдокласс CSS

в конце имени класса.

Пример. Использование селектора классов и псевдокласса

Допустим, у нас есть неупорядоченный список ul, который содержит несколько элементов списка с именем класса .first.

 
 <ул>
      
  • заголовок

  • Абзац

  • Абзац

  • Чтобы выбрать первый элемент li, вы можете использовать CSS first-of-type, как показано ниже:

     
     .first:first-of-type {
        цвет синий;
        граница: 2px сплошной черный;
        ширина: подгонка содержимого;
    }
     

    В приведенном выше коде мы выбираем первый элемент li с помощью имени класса и селектора первого типа.

    Вывод:-

    Как использовать с CSS First Child of Type

    Вы также можете стилизовать первый дочерний элемент родительского элемента с первым типом

    псевдокласс . Вы должны выбрать родителя и первого дочернего элемента, которому хотите придать стиль.

    Пример. Оформление первого дочернего элемента Style в CSS

    Допустим, у вас есть контейнер div с одним заголовком h3 и несколько div с заголовками h3 и тегами p.

     
     <дел>
           

    Основной заголовок

    <дел>

    Второй заголовок

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. диплом апериам аними в, долорум,

    <дел>

    Третий заголовок

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. диплом апериам аними в, долорум,

    <дел>

    Четвертый заголовок

    Lorem ipsum dolor, sit amet consectetur adipisicing elit. диплом апериам аними в, долорум,