Поговорим о специфике работы CSS

Если вы часто используете CSS, то наверняка вам будет полезно знать о специфике его работы. Настоящий мастер в первую очередь должен знать именно это, а потом уже как позиционировать и оформлять элементы. Так же, если вы когда-то использовали ключевое слово important!, то эта статья так же для вас.

Как браузер читает CSS

В первую очередь вам необходимо знать, каким образом браузер читает CSS код. Делает он это сверху вниз, проходясь последовательно по каждой строчке:

/*Строка 10*/
ul li a {
 color: red;
}

/*Строка 90*/
ul li a {
 color: blue;
}

Правило написанное на строке 10, будет заменено на строке 90. В результате цвет ссылки будет синим. Правила с одинаковыми селекторами, которые находятся ближе к концу файла имеют больший приоритет.

Тот же самый принцип работает при последовальном подключении CSS файлов:

<link href='css/style.css' rel='stylesheet'>
<link href='css/custom.css' rel='stylesheet'>

Специфика

Всё вышеперечисленное имеет место быть в том случае, если вес ваших селекторов одинаков. Если же вы приписываете ID, классы или вложенность элементов, то тут включается CSS специфика.

Существует 4 категории составляющих веса селектора: строчные стили, ID, классы и простые элементы. Как оценивать вес? Расклад такой:

  • ID-шки весят 100 очков
  • Классы весят 10 очков
  • Элементы весят по 1 очку

Зная это, рассчитаем приоритет селектора:

#content .sidebar .module li a

100 + 10 + 10 + 1 + 1 = 122 (ID, 2 класса, 2 элемента)

Запомните:

  • ID весит больше всего по сравнению с классами и элементами, поэтому вы должны ограничить использование ID в ваших стилях до минимума;
  • В случаях, когда селекторы весят одинаково, порядок их применения будет такой: последний селектор имеет больший приоритет;
  • Стили списанные в HTML самые козырные, так как они ближе всех к элементу;
  • Единственный способ переопределить встроенные стили, это использовать ключевое слово !important;
  • Псевдо-классы и атрибуты весят так же, как и обычные классы;
  • Псевдо-элементы весят, как обычные элементы;
  • Универсальный селектор (*) не весит ничего.

Примеры:

ul li a {
 color: red;
}

Общий вес данного селектора 3 очка, так что добавив класс другой селектор будет иметь приоритет повыше.

.content #sidebar {
 width: 30%;
}

Данный селектор весит 110 очков из-за ID и класса.

.post p:first-letter {
 font-size: 16px;
}

Этот селектор весит 12 очков, так как псевдо-элемент :first-letter и тэг параграфа весят по одному баллу.

p {
font-family: Helvetica, arial, sans-serif;
}

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

Запомните, что для переопределения ID-шки, вы должны написать 256 классов для одного элемента:

#title {
 font-weight: bold;
}

.home .page .content .main .posts .post .post-content .headline-area .wrapper /* ... etc. ... */ .title {
  font-weight: normal;
}

Только так второй селектор перебьёт первый.

Итог

Конечно теоретическая специфика CSS это далеко не самый важный аспект. Однако, зная эти правила можно ускорить работу над сайтом.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://www.webdesignerdepot.com/2013/04/how-to-use-css-specificity/
Перевел: Станислав Протасевич
Урок создан: 7 Мая 2013
Просмотров: 17769
Правила перепечатки


5 последних уроков рубрики "CSS"

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 8 Мая 2013 00:27
    sam2019
    Хм, интересно, не знал и даже не думал над этим :)
  • 8 Мая 2013 00:38
    valdemer
    "ID=100 ID=100 селектор=1" Может быть, id=100, class=10 и селектор = 1?
  • 8 Мая 2013 01:24
    igontarev
    когда не знаю что писать(кодить), играюсь с CSS
  • 8 Мая 2013 11:07
    vargentum
    а еще можно добавить что к CSS записанному в html-тегах нужно добавить один порядок.
  • 8 Мая 2013 11:30
    dr_jack
    "Запомните, что для переопределения ID-шки, вы должны написать 256 классов для одного элемента" не понял, а почему не 11 классов просто, если ID-100 очков, а классы по 10, то откуда взялось 256 очков?
    • 8 Мая 2013 11:36
      stas.protasevich
      Да, логически было бы 11. В этом специфика.
    • 8 Мая 2013 17:31
      cloozis
      ID и CLASS не могут быть интами, то есть цифрами, w3.validator сильно ругается на это
  • 8 Мая 2013 14:07
    serjikz
    Статья для новичков не плохая, но маловато тут информации. Можно добавить статью про правильную верстку к примеру. Понятное дело, что у всех она разная, но специфика примерно одинакова. Классы для одного, id для другого и стили элементов для третьего.
  • 10 Мая 2013 20:15
    kakabal
    Так это ж в курсе по css есть. Разве не так?
  • 17 Мая 2013 15:11
    kolik1990
    Здравствуйте. Спасибо за уроки! Но вот у меня большой вопрос связанная с двумя темами, а именно css и php. Я хочу сделать в верху сайта полуску (картинку) и там на ней сделать вход под своими данными и пару ссылок но не как не могу этого сделать помогите пожалуйста. Форма взята с вашего сайта "4 урок-регистрация на сайте php" Заранее спасибо.
  • 1 Июня 2013 18:57
    zmobil
    Вообще то это что-то вроде азбуки CSS если не ошибаюсь! Кстати, для новичков, здесь много не досказано!
^ Наверх ^