Не думайте про класи css як об’єктно-орієнтовані класи, не думайте про них як про інструмент серед інших селекторів, щоб вказати, до яких класів атрибутів стилюється html-елемент. Подумайте про все між дужками як клас атрибутів , а селектори ліворуч повідомляють про елементи, які вони вибрали для успадкування атрибутів з класу атрибутів . Приклад:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
Коли елементу надається атрибут class="foo"
, корисно думати про нього не як про спадкові атрибути класу .foo
, а про клас атрибутів A та клас 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 . Тим не менш, альтернативи повинні пам’ятати, щоб редагувати кожен клас атрибутів, де є приховані залежності кожного разу, коли щось змінюється, або використовувати сторонній інструмент. Перший варіант сміє бога, другий змушує мене вбити себе.