SIMPLEPROG

"Кто последний?" - разбираемся в приоритетах в стилях CSS

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

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

  1. Inline-стили: стили, которые прописываются непосредственно внутри HTML-тега. Они имеют самый высокий приоритет.

  2. Internal styles: стили, определенные внутри тега <style> в head-секции HTML-документа.

  3. External styles: стили, подключаемые через тег <link> с атрибутом rel=“stylesheet” и атрибутом href, указывающим на путь к CSS-файлу.

  4. ID-селекторы: селекторы с использованием идентификаторов (#id).

  5. Class-селекторы: селекторы с использованием классов (“.class”).

  6. Element-селекторы: общие селекторы, которые не используют идентификаторы, классы или элементы (<html>, <body> и т.д.).

  7. Attribute-селекторы: селекторы атрибутов ([attr=value]).

  8. Pseudo-селекторы (::before, ::after).

Здесь бы хотелось остановиться на нескольких примерах, с которыми чаще всего сталкиваются начинающие программисты.

<link rel="stylesheet" href="/css/normalize.css">

<link rel="stylesheet" href="/css/main.css"> <!-- стили указанные в файле main.css будут перебивать стили в файле normalyze.css -->

<link rel="stylesheet" href="/css/media.css"> <!-- стили указанные в файле media.css будут перебивать стили в файлах main.css и normalyze.css -->

Как мы видим, чем позднее подключен файл, тем выше приоритетность он имеет.

Тоже самое касается и самих правил внутри файлов, чем позже подключено правило, тем у него выше приоритетность.

.item__text {
    font-size: 16px; /* это свойство не сработает, так как его перебивает свойство подключенное позже */
    color: #333; /* это свойство также не сработает по аналогичным причинам */
}
.item__link {
    text-decoration: none;
}
.item__text {
    font-size: 14px;
    color: #666;
}

Также есть один лайфхак, который не очень все любят, но каждый иногда грешит им.

Чтобы стиль стал самым главным, нужно добавить ему правило !important, выглядит это следующим образом:

.item__text {
    font-size: 16px !important;
    color: #333;
}