CSS.

  Если обратить внимание на генезис функционала тегов HTML (например строчных тегов), то видно, что количество таких тегов прямо пропорционально растущим потребностям стилей пользовательского представления текстов на Web-странице.
  Понятно, что бесконечное увеличение номенклатуры тегов для развития Web-дизайна было бы плохой перспективой. Поэтому, логично было ограничить функционал тегов только размещением пользовательского контента на Web-странице.
  Для оформления пользовательского представления этого контента предназначен функционал привязки разного стилевого оформления к контенту любого тега.
  Код формализации такого оформления и его функционал, понятный браузерам, узаконен спецификацией CSS (Cascading Style Sheets), и является развитием функционала универсального атрибута тегов STYLE.
  Этот код можно (и зачастую лучше) хранить вообще отдельно от кода HTML-документа.
  Файл с таким кодом, подгруженный к HTML-документу, формирует связанную с ним таблицу стилей CSS.
  Кроме того, отдельная таблица стилей CSS формируется внутренним контентом каждого элемента тега STYLE в HTML-документе.
  Атрибут STYLE таблицу стилей не формирует.
  Таблицы стилей и универсальный атрибут тегов STYLE создают привязку стилей оформления к элементам тегов HTML-документа.
  Правила написания кода стилей CSS (таблицы стилей).
  •  Стиль определяется селектором (или списком селекторов  ⃰) и связанным с этим(и) селектором (селекторами) списком атрибутов стилей.
      Такую конструкцию называют CSS-правилом.
      Таким образом, весь код CSS состоит из CSS-правил.
    (Развитие CSS и HTML привело к тому, что появился и формат CSS-правил без селектора.)

  •  Селектор предназначен для определения элементов тегов и(или) их внутреннего контента в HTML-документе для возможной привязки стилей оформления, заданных атрибутами стилей, к контенту этих элементов на Web-странице.
      Селектор может быть простым или специальным.

  •  Каждый атрибут стиля имеет узаконенные имя и значение. Атрибуты стиля со своими значениями, парами вида:
          Имя атрибута стиля:  Значение атрибута стиля;
    перечисляются в списке атрибутов стиля, который в коде CSS следует через пробел за селектором (или списком селекторов  ⃰) и заключается в фигурные скобки.
      Указанные пары, в списке атрибутов стиля, отделяются друг от друга - ; - точкой с запятой (после последней пары - ; можно не проставлять).
      В списке атрибутов стиля можно указать не узаконенное имя атрибута стиля (имя введённое разработчиком) с узаконенным значением атрибута стиля.
      Имя атрибута стиля введённого разработчиком должно начинаться с двух дефисов --.
      Такой атрибут стиля никак не будет воспринят браузером, однако его значение может быть использовано с помощью CSS-функции var.

  •  В написании простых селекторов, имен атрибутов стиля и значений атрибутов стиля не допускаются пробелы, а значит и переносы строки.
      Пробелы и переносы строки в других местах кода CSS браузерами игнорируются.

  •  CSS-правила отделяются друг от друга пробелами или (лучше) переносами строк.

  • Вместо одного селектора в  CSS-правиле можно указать   ⃰список селекторов с общими атрибутами стиля. В таком CSS-правиле селекторы отделяются друг от друга запятой.

  Виды CCS селекторов.
  Простые селекторы.
  Простой селектор безусловно определяет элементы тегов.
  •  Имя тега - Определяет элементы тега по имени тега.
  •  Стилевой класс - Определяет элементы тегов по произвольному идентификатору, который в HTML-коде может быть связан с элементом тега с помощью универсального атрибута тегов CLASS.
      Значение селектора стилевого класса должно совпадать со значением атрибута CLASS, но предваряться символом - . (точкой).
  •  Именованный стиль - Определяет элемент тега по идентификатору, который в HTML-коде может быть связан с этим элементом с помощью универсального атрибута тегов ID.
      Значение селектора именованного стиля должно совпадать со значением атрибута ID, но предваряться символом - # (решеткой).
      Надо иметь в виду, что таким образом не элемент тега связывается со стилем (как в случае стилевого класса), а наоборот, стиль привязывается к элементу тега, имеющему определенное значение атрибута ID.
      В принципе атрибут ID имеет функционал шире, нежели привязка стиля, поэтому любой элемент тега в HTML-коде должен иметь уникальное значение атрибута ID в пределах HTML-документа.
  •  Комбинированный стиль - Определяет элементы тегов по комбинации селекторов - имя тега, стилевой класс и именованный стиль.
      Селектор комбинированный стиль - это список селекторов имя тега, стилевой класс и именованный стиль в любой последовательности, в котором они перечисляются слева направо и разделены пробелами, тем самым обозначая уровень вложенности ("сверху-вниз") соответствующих элементов тегов в HTML-коде HTML-документа.
      Селектором комбинированный стиль определяются элементы тегов соответствующие любому самому правому селектору в списке и заданной этим списком вложенности.
      Впрочем, в настоящее время, комбинированный стиль является частным случаем комбинатора.
      Не надо путать селектор комбинированный стиль со списком селекторов  ⃰, селектор комбинированный стиль - это один селектор, и он может быть включен в список селекторов  ⃰ в таком качестве.
  •  Универсальный селектор - Определяет любой элемент тега.
      Значением универсального селектора является - * (звёздочка).
  •  Отдельный псевдокласс - Определяет элемент тега HTML.
      Значением отдельного псевдокласса является ключевое слово - :root.
  Специальные селекторы.
  Специальный селектор определяет элементы тегов или часть их пользовательского контента по заданному условию.
  Не надо путать специальный селектор со списком селекторов  ⃰, любой специальный селектор - это один селектор, и он может быть включен в список селекторов  ⃰ в таком качестве.
  Условные типы атрибутов стилей.
  Надо отметить, что это условная группировка атрибутов стилей, она никак не специфицирована, и предназначена только для упорядочивания доступа к функционалу атрибутов стилей в этом справочнике.
  С HTML-документом может быть связано несколько таблиц стилей, в которых по разному могут быть стилизованы одни и те же элементы тегов.
  Также в одной таблице стилей допускается неоднократное использование одинаковых селекторов или селекторов по разному определяющих одни и те же элементы тегов.
  Поэтому стили одного и того же элемента тега могут как перекрываться, так и накапливаться (как бы "каскадно").

  Существуют логические правила определения конечного стиля для элемента тега.
  Такие правила называются правилами каскадности (а сами таблицы стилей, поэтому называются каскадными таблицами стилей).

  Не стоит (да и нет особой на то особой нужды) усложнять таблицы стилей (и усложнять себе жизнь) до такой степени, чтобы потом вычислять конечный стиль элемента по правилам каскадности.

  Впрочем это дело вкуса, однако всегда надо помнить о ключевом слове !important, которое будучи добавленным к значению атрибута стиля через пробел, делает это значение главным в любом каскаде.

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

  Новый функционал непрерывно внедряется и специфицируется, и, будет не удивительно если, со временем, в CSS появятся условные выражения и циклы.
  Тем более, что типы данных и функции в нём уже специфицированы.

  То есть CSS из таблиц, со временем, может превратиться в язык программирования.