Короткий ответ
ID слишком специфичны и уникальны: стили тяжело переопределять и переиспользовать.
Почему это больно
- Специфичность
1,0,0 выше классов → война со специфичностью и соблазн !important.
- ID один на страницу — нельзя переиспользовать паттерн.
- В компонентах/SSR проще классы и data-атрибуты.
#header .nav a { color: white; }
.site-header__link { color: white; }
ID оставляйте для якорей, label[for], JS getElementById — не для CSS-слоя.
Итог
Классы (или utility) дают переиспользование и спокойный каскад. ID в селекторах — запах на ревью.