Интересно, что лучше подходит для философии CSS:
- Классы CSS отмечают объекты - ИЛИ -
- Классы CSS отмечают аспекты
Например, возьмите ячейку для ценового листка продукта и нижнюю сноску, содержащую сумму всех цен.
В первом случае каждая из ячеек будет иметь только один класс: product-price
resp. product-price-sum
(или price
, а строка, например, имеет класс product
)
Другими словами: Классы идентифицируют вещи.
В случае двух ячеек будет иметь много классов, которые определяют свойства/аспекты цены продукта, например numeric
и currency
, и дополнительный класс sum
для нижнего колонтитула. numeric
будет определять выравниваемый текст, sum
будет отмечать ячейку жирным шрифтом.
Другими словами: Классы описывают вещи.
Я не могу решить, какой подход лучше. В прошлом я использовал смесь обоих, которая быстро привела к уродливой куче неструктурированных классов CSS с противоречивыми стилями и некоторыми уродливыми взломами !important
.
Первый подход, очевидно, имеет некоторую избыточность, потому что у него будет много классов (product-*
), и большинство из них будут иметь общие свойства CSS.
У второго есть проблемы, когда дело доходит до формата только одного места по-разному, скажем, цена цены продукта. Возможно, что есть и другие места, которые также имеют одинаковые три класса, но не имеют ничего общего с ценой продукта. В этом случае вам придется использовать окружающие теги HTML, чтобы каким-то образом "указать" конкретное место в файле HTML.
Существуют ли какие-либо эмпирические правила, рекомендации, проверенные концепции и т.д. о том, как справиться с этой проблемой?