оригинальная версия версия для слабовидящих контрастная версия выключить изображения включить изображения RSS FEED K2 NEWS
Понедельник, 29 Ноябрь 2021 00:01

Приоритеты селекторов CSS

Селектор CSS — как «регулировщик», указывающий браузерам каким элементам веб-страницы применять тот или иной стиль. Селекторы делятся на базовые, комбинированные и «псевдо-селекторы» (это те, которые работают с элементами, которых «по умолчанию» нет на веб-странице).

Кроме того между селекторами есть ещё приоритеты на принятие правил. Разберём на примере меню:

<header class="page-header">
    <h1 id="page-title" class="title">Пример меню в CSS</h1>
        <nav>
            <ul id="main-nav" class="nav">
                <li><a href="/">Главная</a></li>
                li><a href="/">Страница №2</a></li>
                li><a href="/">Страница №3</a></li>
                li><a href="/" class="featured">Страница "В разработке"</a></li>
            </ul>
        </nav>
</header>

Пока не указываем стили и на выходе имеем такое:

Пример меню в CSS

Далее добавляем CSS:

h1 {
    color: #2f4f4f;
    margin-bottom: 10px;
}
#main-nav {
    margin-top: 20px;
    list-style: none;
    padding-left: 0;
}
#main-nav li {
    display: inline-block;
}
#main-nav a {
    color: white;
    background-color: #13a4a4;
    padding: 12px;
    border-radius: 8px;
    text-decoration: none;
    line-height:50px;
}
.featured {
    background-color: orange;
}

Пока остановим внимание на классе .featured и блоке Страница "В разработке", которая не перекрасилась в оранжевый цвет. По умолчанию, правило написанное последним — имеет больший приоритет, да не тут то было. В этой ситуации id имеет более высокий приоритет, причём ситуация не изменится, даже если вместо class="featured" написать id="featured", а в стилях прописать #featured, поскольку выбирая приоритет между двумя id, выбор падёт на тот, у кого рядом стоит ещё один тег (т.е. #main a).

Если рассматривать дерево приоритетов, то самый низкий приоритет у "тега", после этого идёт "класс", а после "id". Надо понимать, что правило прописанное двум классам будет иметь более высокий приоритет, чем правило, которое прописали трём тегам и одному классу. В нашей ситуации, если мы хотим перекрасить Страница "В разработке" в оранжевый, необходимо добавить #main-nav перед .featured.

Есть ещё одно, можно сказать «уникальное решение» для всех, кто не хочет заморачиваться с приоритетами использовать модификатор !important. Но если пользоваться им бездумно то мы снова окажемся ввязанными в «войну приоритетов».

Пример:

.featured {
    background-color: orange !important;
}

Спонсоры: