У Ярно Рантанена есть отличная статья с изложением некоторых лучших практик CSS. В частности, я рад видеть, что он первый в списке:

1. Всегда отдавайте предпочтение занятиям

Это просто для того, чтобы убрать очевидное.

Не ориентируйтесь на идентификаторы (например, #header), потому что всякий раз, когда вы думаете, что может быть только один экземпляр чего-либо в бесконечной временной шкале, вы ошибаетесь. Одним из прошлых примеров этого было, когда мы хотели отсеять любые ошибки привязки данных в большом приложении, над которым мы работали. Мы запустили два экземпляра нашего кода пользовательского интерфейса, расположенные рядом в одной и той же модели DOM, оба привязаны к общему экземпляру нашей модели данных. Это было сделано для того, чтобы все изменения в модели данных правильно отражались в обоих пользовательских интерфейсах. Любые компоненты, которые вы, возможно, всегда считали уникальными, такие как панель заголовка, больше не являются таковыми. Между прочим, это отличный ориентир для выявления других тонких ошибок, связанных с предположениями об уникальности. Я отвлекся, но мораль этой истории такова: нет ситуации, когда нацеливание на идентификатор было бы лучше, чем нацеливание на класс, так что давайте просто не будем.

У меня было полдюжины разработчиков, пытавшихся объяснить мне преимущества идентификаторов и… и факт в том, что их просто не было. Нет никакой разницы между классом an и ID, за исключением того, что класс более расширяемый и (я скажу это, хотя я ненавижу это слово) ориентирован на будущее.

Это бесполезный семантический артефакт.

Ознакомиться со всеми 8 правилами можно здесь