0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В прошлом уроке была разобрана вторая часть словосочетания<em>Каскадные таблицы стилей</em>, а именно<em>таблицы стилей</em>. Мы изучили, как записываются и применяются стили к различным HTML элементам. В этом уроке поговорим о значении слова<em>каскадные</em>.</p>
1
<p>В прошлом уроке была разобрана вторая часть словосочетания<em>Каскадные таблицы стилей</em>, а именно<em>таблицы стилей</em>. Мы изучили, как записываются и применяются стили к различным HTML элементам. В этом уроке поговорим о значении слова<em>каскадные</em>.</p>
2
<p>Что такое каскадность? Представьте себе каскад водопадов. В них вода перетекает из одного водопада в другой и так до тех пор, пока это все не уйдет в общий бассейн.</p>
2
<p>Что такое каскадность? Представьте себе каскад водопадов. В них вода перетекает из одного водопада в другой и так до тех пор, пока это все не уйдет в общий бассейн.</p>
3
<p>В CSS слово каскадность имеет такое же значение. В качестве воды у нас CSS свойства. Они могут накладываться и перекрывать друг друга. Другими словами каскадность - возможность языка CSS накладывать свойства друг на друга, а также расширять свойства в селекторах.</p>
3
<p>В CSS слово каскадность имеет такое же значение. В качестве воды у нас CSS свойства. Они могут накладываться и перекрывать друг друга. Другими словами каскадность - возможность языка CSS накладывать свойства друг на друга, а также расширять свойства в селекторах.</p>
4
<p>Возможно такое описание достаточно сложное, но давайте посмотрим на примере. Создадим параграф с двумя классами: text-bold и text-dark. Первый класс будет отвечать за жирное начертание текста, а второй за установку темного цвета шрифта. Также добавим селектор по тегу и укажем размер шрифта 24 пикселя.</p>
4
<p>Возможно такое описание достаточно сложное, но давайте посмотрим на примере. Создадим параграф с двумя классами: text-bold и text-dark. Первый класс будет отвечать за жирное начертание текста, а второй за установку темного цвета шрифта. Также добавим селектор по тегу и укажем размер шрифта 24 пикселя.</p>
5
<p>В CSS файле укажем следующие стили:</p>
5
<p>В CSS файле укажем следующие стили:</p>
6
<p>Попробуйте воспроизвести этот пример, и вы увидите, что текст выводится темного цвета и с жирным начертанием. Стили от классов text-bold и text-dark сложились и применились к нашему параграфу. Также текст имеет размер 24 пикселя, которые мы указали для селектора по тегу.</p>
6
<p>Попробуйте воспроизвести этот пример, и вы увидите, что текст выводится темного цвета и с жирным начертанием. Стили от классов text-bold и text-dark сложились и применились к нашему параграфу. Также текст имеет размер 24 пикселя, которые мы указали для селектора по тегу.</p>
7
<p>Итоговыми стилями для нашего параграфа будут:</p>
7
<p>Итоговыми стилями для нашего параграфа будут:</p>
8
<p>Это и есть каскадность стилей CSS. Хоть мы и использовали разные селекторы и классы для описания, но в конечном итоге они суммировались.</p>
8
<p>Это и есть каскадность стилей CSS. Хоть мы и использовали разные селекторы и классы для описания, но в конечном итоге они суммировались.</p>
9
<h2>Приоритет селекторов</h2>
9
<h2>Приоритет селекторов</h2>
10
<p>Важной чертой CSS является то, что разные типы селекторов имеют разный приоритет. Если стили противоречат друг другу в разных селекторах, то вступает в дело принцип приоритета. Разберем на примере. Возьмем параграф с классом red и идентификатором blue. Установим соответствующие цвета для текста. Для всех же параграфов в тексте установим зеленый цвет.</p>
10
<p>Важной чертой CSS является то, что разные типы селекторов имеют разный приоритет. Если стили противоречат друг другу в разных селекторах, то вступает в дело принцип приоритета. Разберем на примере. Возьмем параграф с классом red и идентификатором blue. Установим соответствующие цвета для текста. Для всех же параграфов в тексте установим зеленый цвет.</p>
11
<p>Перед тем, как читать дальше попробуйте выполнить этот пример в любом удобном вам месте.</p>
11
<p>Перед тем, как читать дальше попробуйте выполнить этот пример в любом удобном вам месте.</p>
12
<p>Как вы смогли заметить, текст параграфа будет синим. Но почему так? Может быть, дело в том, что синий цвет в CSS указан самым последним? В данном случае нет. Даже если мы переместим селектор по идентификатору в самый вверх, параграф все равно останется синим.</p>
12
<p>Как вы смогли заметить, текст параграфа будет синим. Но почему так? Может быть, дело в том, что синий цвет в CSS указан самым последним? В данном случае нет. Даже если мы переместим селектор по идентификатору в самый вверх, параграф все равно останется синим.</p>
13
<p>Все дело в том, что селектор по идентификатору имеет самый высокий приоритет. Встретив его, браузер будет считать эти стили самыми важными для страницы и в случае противоречий возьмет значение в первую очередь из стилей для идентификатора.</p>
13
<p>Все дело в том, что селектор по идентификатору имеет самый высокий приоритет. Встретив его, браузер будет считать эти стили самыми важными для страницы и в случае противоречий возьмет значение в первую очередь из стилей для идентификатора.</p>
14
<p>Условно можно расставить селекторы в следующем порядке по приоритету:</p>
14
<p>Условно можно расставить селекторы в следующем порядке по приоритету:</p>
15
<ol><li>Селектор по идентификатору (#blue)</li>
15
<ol><li>Селектор по идентификатору (#blue)</li>
16
<li>Селектор по классу (.red)</li>
16
<li>Селектор по классу (.red)</li>
17
<li>Селектор по тегу (p)</li>
17
<li>Селектор по тегу (p)</li>
18
</ol><p>Где<em>1</em>- самый высокий приоритет, а<em>3</em>- самый низкий.</p>
18
</ol><p>Где<em>1</em>- самый высокий приоритет, а<em>3</em>- самый низкий.</p>
19
<p>Разберем еще один пример:</p>
19
<p>Разберем еще один пример:</p>
20
<p>Этот текст будет наклонным, жирным и зеленым. И вот почему:</p>
20
<p>Этот текст будет наклонным, жирным и зеленым. И вот почему:</p>
21
<ul><li>Селектор по тегу p:<ul><li>Добавит синий цвет</li>
21
<ul><li>Селектор по тегу p:<ul><li>Добавит синий цвет</li>
22
<li>Добавит жирное начертание</li>
22
<li>Добавит жирное начертание</li>
23
</ul></li>
23
</ul></li>
24
<li>Селектор по классу .important:<ul><li>Заменит синий цвет на пурпурный</li>
24
<li>Селектор по классу .important:<ul><li>Заменит синий цвет на пурпурный</li>
25
<li>Сделает текст курсивным</li>
25
<li>Сделает текст курсивным</li>
26
</ul></li>
26
</ul></li>
27
<li>Селектор по идентификатору #intro:<ul><li>Заменит пурпурный цвет на зеленый</li>
27
<li>Селектор по идентификатору #intro:<ul><li>Заменит пурпурный цвет на зеленый</li>
28
</ul></li>
28
</ul></li>
29
</ul><p>После всех таких преобразований итоговые стили для параграфа сложатся следующим образом:</p>
29
</ul><p>После всех таких преобразований итоговые стили для параграфа сложатся следующим образом:</p>
30
<p><strong>Важно:</strong>так как селектор по идентификатору имеет самый высокий приоритет и перебивает все стили классов, то его использование считается не очень хорошей практикой. Указав стили для идентификатора, мы лишаем себя возможности переопределить стили с помощью классов. Это бывает очень важно для создания отзывчивых к действиям пользователя сайтов, когда на его действия мы меняем внешний вид некоторых элементов.</p>
30
<p><strong>Важно:</strong>так как селектор по идентификатору имеет самый высокий приоритет и перебивает все стили классов, то его использование считается не очень хорошей практикой. Указав стили для идентификатора, мы лишаем себя возможности переопределить стили с помощью классов. Это бывает очень важно для создания отзывчивых к действиям пользователя сайтов, когда на его действия мы меняем внешний вид некоторых элементов.</p>
31
<h2>Переопределение свойств</h2>
31
<h2>Переопределение свойств</h2>
32
<p>Возможно, у вас возник вопрос, а что случится, если элемент будет иметь несколько классов, свойства которых противоречат друг другу? Здесь каскадность работает по принципу<em>"Кто последний, тот и прав"</em>. Проще всего это так же посмотреть на примере:</p>
32
<p>Возможно, у вас возник вопрос, а что случится, если элемент будет иметь несколько классов, свойства которых противоречат друг другу? Здесь каскадность работает по принципу<em>"Кто последний, тот и прав"</em>. Проще всего это так же посмотреть на примере:</p>
33
<p>Отталкиваясь от принципа каскадности, браузер вначале увидит селектор .alert и установит серый цвет текста. Далее ему встретится селектор .alert-error, который говорит установить красный цвет. И браузер просто перезапишет серый цвет на красный. Порядок классов в HTML в данном случае не играет никакой роли. Даже в таком случае</p>
33
<p>Отталкиваясь от принципа каскадности, браузер вначале увидит селектор .alert и установит серый цвет текста. Далее ему встретится селектор .alert-error, который говорит установить красный цвет. И браузер просто перезапишет серый цвет на красный. Порядок классов в HTML в данном случае не играет никакой роли. Даже в таком случае</p>
34
<p>Цвет текста будет красным. Это наглядно показывает независимость CSS от HTML. Если же поменять местами селекторы в CSS, то поменяются и итоговые стили.</p>
34
<p>Цвет текста будет красным. Это наглядно показывает независимость CSS от HTML. Если же поменять местами селекторы в CSS, то поменяются и итоговые стили.</p>
35
<h2>Вес селекторов</h2>
35
<h2>Вес селекторов</h2>
36
<p>Во время разработки вы будете встречать разные ситуации, при которых одни селекторы будут иметь больший вес, чем другие. Причем их месторасположение в CSS файле не имеет особого значения:</p>
36
<p>Во время разработки вы будете встречать разные ситуации, при которых одни селекторы будут иметь больший вес, чем другие. Причем их месторасположение в CSS файле не имеет особого значения:</p>
37
<p>Какой высоты будет элемент <textarea>? Правильный ответ -<em>50px</em>, так как селектор по классу имеет больший приоритет, чем селектор по тегу. Но как же задать высоту в<em>200px</em>и не вводить новые классы? Достаточно подставить к тегу еще и название класса:</p>
37
<p>Какой высоты будет элемент <textarea>? Правильный ответ -<em>50px</em>, так как селектор по классу имеет больший приоритет, чем селектор по тегу. Но как же задать высоту в<em>200px</em>и не вводить новые классы? Достаточно подставить к тегу еще и название класса:</p>
38
<p>Теперь для элемента <textarea> будет установлена высота в<em>200px</em>. Это произошло благодаря тому, что приоритеты "складываются" в рамках одного селектора. Для большего понимания таких сложений можно представить, что общий вес селектора определяется тремя цифрами, где:</p>
38
<p>Теперь для элемента <textarea> будет установлена высота в<em>200px</em>. Это произошло благодаря тому, что приоритеты "складываются" в рамках одного селектора. Для большего понимания таких сложений можно представить, что общий вес селектора определяется тремя цифрами, где:</p>
39
<ol><li>Первая цифра показывает количество идентификаторов в селекторе</li>
39
<ol><li>Первая цифра показывает количество идентификаторов в селекторе</li>
40
<li>Вторая цифра показывает количество классов в селекторе</li>
40
<li>Вторая цифра показывает количество классов в селекторе</li>
41
<li>Третья цифра показывает количество тегов в селекторе</li>
41
<li>Третья цифра показывает количество тегов в селекторе</li>
42
</ol><p>Может звучать сложно, но концепция простая. Разберем прошлый пример:</p>
42
</ol><p>Может звучать сложно, но концепция простая. Разберем прошлый пример:</p>
43
<ul><li>Селектор .form-input состоит из одного класса, поэтому в качестве второй цифры поставим единицу и получим:<em>010</em></li>
43
<ul><li>Селектор .form-input состоит из одного класса, поэтому в качестве второй цифры поставим единицу и получим:<em>010</em></li>
44
<li>Селектор textarea состоит из одного тега. Записываем единицу в третий разряд нашего числа:<em>001</em></li>
44
<li>Селектор textarea состоит из одного тега. Записываем единицу в третий разряд нашего числа:<em>001</em></li>
45
</ul><p>Визуально понятно, что<em>010 > 001</em>, поэтому свойства внутри такого правила имеют больший приоритет. Мы захотели это исправить и дополнили наш селектор:</p>
45
</ul><p>Визуально понятно, что<em>010 > 001</em>, поэтому свойства внутри такого правила имеют больший приоритет. Мы захотели это исправить и дополнили наш селектор:</p>
46
<p>Теперь порядок сил во вселенной немного изменился:</p>
46
<p>Теперь порядок сил во вселенной немного изменился:</p>
47
<ul><li>Селектор .form-input состоит из одного класса, поэтому в качестве второй цифры поставим единицу и получим:<em>010</em></li>
47
<ul><li>Селектор .form-input состоит из одного класса, поэтому в качестве второй цифры поставим единицу и получим:<em>010</em></li>
48
<li>Селектор textarea.form-input состоит из одного класса и тега. Записываем единицу во второй и третий разряд нашего числа:<em>011</em></li>
48
<li>Селектор textarea.form-input состоит из одного класса и тега. Записываем единицу во второй и третий разряд нашего числа:<em>011</em></li>
49
</ul><p>Получаем, что<em>010 < 011</em>, а значит свойства внутри селектора textarea.form-input будут иметь больший приоритет.</p>
49
</ul><p>Получаем, что<em>010 < 011</em>, а значит свойства внутри селектора textarea.form-input будут иметь больший приоритет.</p>
50
<p>Такой подход поможет вам лучше понимать, как действуют те или иные правила, а также почему все разработчики стараются максимально уйти от сложных селекторов. При получении опыта вы все реже будете считать вес таким образом, а уже будете изначально понимать, как расставлены приоритеты.</p>
50
<p>Такой подход поможет вам лучше понимать, как действуют те или иные правила, а также почему все разработчики стараются максимально уйти от сложных селекторов. При получении опыта вы все реже будете считать вес таким образом, а уже будете изначально понимать, как расставлены приоритеты.</p>