Прекратите использовать идентификаторы и классы в каждом элементе HTML!

Ола! Если вы новичок в мире веб-разработки, то вам легко забыть обо всех вариациях селекторов атрибутов CSS и просто создать определенный класс или ID для стиля конкретного элемента на вашей странице.

В качестве примера? Предположим, у вас есть flex-контейнер, содержащий 10 flex-элементов, который выглядит следующим образом:

<div class="flex-container-column">
<div class="item">flex item 1</div>
<div class="item">flex item 2</div>
<div class="item">flex item 3</div>
<div class="item">flex item 4</div>
<div class="item">flex item 5</div>
<div class="item">flex item 6</div>
<div class="item">flex item 7</div>
<div class="item">flex item 8</div>
<div class="item">flex item 9</div>
<div class="item">flex item 10</div>
</div>
Вход в полноэкранный режим Выход из полноэкранного режима

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

А что если у нас есть один и тот же flex-контейнер с 10 flex-элементами на каждой странице нашего сайта? И мы хотим, чтобы первый элемент имел тот же стиль? Ну, просто добавьте к нему другой класс, да!

Технически это можно сделать, но это не лучшая практика! Мы должны использовать селекторы атрибутов CSS, а точнее :pseudo-classes.

CSS :pseudo-classes помогает выделить элемент HTML по его определенному состоянию, например:

С помощью фиктивного HTML-кода выше мы можем составить несколько сценариев с использованием background-color:

Давайте начнем сверху вниз. Есть два отображения: колонка и строка.

Колонка

Я хочу, чтобы поля в нечетных позициях (поля номер 1, 3, 5, 7 и 9) были оранжеватого цвета, поэтому я нацеливаю их с помощью следующего :pseudo-класса, указывая в скобке, что я хочу нацелиться на ODD номера.

.item:nth-child(odd) {
  background-color: #FEC8A7;
}
Вход в полноэкранный режим Выйти из полноэкранного режима

То же самое с полями с четными номерами, я просто заменил слово odd внутри скобки на (even).

.item:nth-child(even) {
  background-color: #FCECA5;
}
Войти в полноэкранный режим Выход из полноэкранного режима

Ряд

На моем дисплее Row я хотел нацелиться только на первое и последнее поле. Поэтому здесь в дело вступают :first-child и last-child:

/* targets the first flex item */
.item2:first-child {
 background-color: #A16AE8; 
}

/* targets the last flex item */
.item2:last-child {
  background-color: #4120A9;
}
Войти в полноэкранный режим Выход из полноэкранного режима

Забавный факт, альтернативно вы можете заменить :first-child на :first-of-type или :nth-child(1), а :last-child можно заменить на :last-of-type в этом случае, и они все равно дадут тот же результат! Разница в том, что :first-of-type будет искать ТОЛЬКО первое вхождение указанного элемента в контейнер/родительский элемент, даже если он не является первым дочерним элементом контейнера/родительского элемента. Итак, если я немного изменю код для отображения строки выше, добавив h1 следующим образом:

<div class="flex-container-row">
<h1>header</h1>
<div class="item2">flex item 1</div>
<div class="item2">flex item 2</div>
<div class="item2">flex item 3</div>
<div class="item2">flex item 4</div>
<div class="item2">flex item 5</div>
<div class="item2">flex item 6</div>
<div class="item2">flex item 7</div>
<div class="item2">flex item 8</div>
<div class="item2">flex item 9</div>
<div class="item2">flex item 10</div>
<div class="item2">flex item 10</div>
<div class="item2">flex item 10</div>
</div>
Войти в полноэкранный режим Выйти из полноэкранного режима

Использование :first-child или :nth-child(1) не будет работать! Потому что первым дочерним элементом контейнера является h1. Но он все равно будет работать с :first-of-type, потому что будет искать первое вхождение класса .item2 в контейнере. Другими словами, :first-child и :nth-child более специфичны в данном случае и рекомендуются к использованию на практике, если вы хотите нацелиться на действительно конкретную позицию элемента.

Оцените статью
devanswers.ru
Добавить комментарий