HTML Diff
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>Какой высоты будет элемент &lt;textarea&gt;? Правильный ответ -<em>50px</em>, так как селектор по классу имеет больший приоритет, чем селектор по тегу. Но как же задать высоту в<em>200px</em>и не вводить новые классы? Достаточно подставить к тегу еще и название класса:</p>
37 <p>Какой высоты будет элемент &lt;textarea&gt;? Правильный ответ -<em>50px</em>, так как селектор по классу имеет больший приоритет, чем селектор по тегу. Но как же задать высоту в<em>200px</em>и не вводить новые классы? Достаточно подставить к тегу еще и название класса:</p>
38 <p>Теперь для элемента &lt;textarea&gt; будет установлена высота в<em>200px</em>. Это произошло благодаря тому, что приоритеты "складываются" в рамках одного селектора. Для большего понимания таких сложений можно представить, что общий вес селектора определяется тремя цифрами, где:</p>
38 <p>Теперь для элемента &lt;textarea&gt; будет установлена высота в<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 &gt; 001</em>, поэтому свойства внутри такого правила имеют больший приоритет. Мы захотели это исправить и дополнили наш селектор:</p>
45 </ul><p>Визуально понятно, что<em>010 &gt; 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 &lt; 011</em>, а значит свойства внутри селектора textarea.form-input будут иметь больший приоритет.</p>
49 </ul><p>Получаем, что<em>010 &lt; 011</em>, а значит свойства внутри селектора textarea.form-input будут иметь больший приоритет.</p>
50 <p>Такой подход поможет вам лучше понимать, как действуют те или иные правила, а также почему все разработчики стараются максимально уйти от сложных селекторов. При получении опыта вы все реже будете считать вес таким образом, а уже будете изначально понимать, как расставлены приоритеты.</p>
50 <p>Такой подход поможет вам лучше понимать, как действуют те или иные правила, а также почему все разработчики стараются максимально уйти от сложных селекторов. При получении опыта вы все реже будете считать вес таким образом, а уже будете изначально понимать, как расставлены приоритеты.</p>