Не думайте о классах CSS как об объектно-ориентированных классах, думайте о них как об инструменте среди других селекторов, чтобы указать, к каким классам атрибутов применяется элемент html. Подумайте обо всем, что между фигурными скобками, как о классе атрибутов , а селекторы слева говорят элементам, которые они выбирают для наследования атрибутов из класса атрибутов . Пример:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
Когда элемент получает атрибут class="foo", полезно думать об этом не как наследование атрибутов из класса .foo, но из атрибута класса А и класса B атрибут . Т.е. граф наследования имеет один уровень вглубь, элементы выводятся из классов атрибутов , а селекторы указывают, куда идут ребра, и определяют приоритет при наличии конкурирующих атрибутов (аналогично порядку разрешения метода).

Практическое значение для программирования заключается в следующем. Допустим, у вас есть таблица стилей, приведенная выше, и вы хотите добавить новый класс .baz, где он должен быть таким же, font-sizeкак и .foo. Наивное решение было бы так:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
.baz { font-size : 2em; /* attribute class C, hidden dependency! */}

Каждый раз, когда мне приходится что-то печатать дважды, я так злюсь! Мало того, что я должен написать это дважды, теперь у меня нет возможности программно указать, что .fooи .bazдолжно иметь то же самое font-size, и я создал скрытую зависимость! Моя вышеприведенная парадигма предполагает, что я должен абстрагировать font-sizeатрибут от класса атрибута A :
.foo, .bar, .baz { font-size : 2em; /* attribute base class for A */}
.foo, .bar { font-weight : bold; /* attribute class A */}
.foo { color : green; /* attribute class B */}

Основная жалоба здесь является то , что теперь я должен перепечатывать каждый селектор из атрибута класса A еще раз , чтобы указать , что элементы , они должны выбрать также должны наследовать атрибуты из атрибутов базового класса A . Тем не менее, альтернативы заключаются в том, чтобы не забывать редактировать каждый класс атрибутов, где есть скрытые зависимости каждый раз, когда что-то меняется, или использовать сторонний инструмент. Первый вариант заставляет бога смеяться, второй заставляет меня хотеть убить себя.