This website has no class
В недавнем посте я писал о том, что элементы можно рассматривать как готовые компоненты браузера. Позже я осознал, что сам не следую этому принципу — использовал классы вместо семантических элементов. Это привело к радикальному решению: полностью отказаться от классов на своём сайте.
Я перестроил CSS вокруг трёх слоёв: base, components и utilities. Всё в base уже было на селекторах тегов, поэтому задача свелась к пересмотру компонентов и удалению утилит. Сначала я усилил использование семантических элементов и контекстных стилей, но зашёл слишком далеко, создавая сложные селекторные паттерны.
Решение пришло через кастомные теги и атрибуты по образцу веб-компонентов, но без JavaScript. Например:
note-pad {
padding-block: var(--size-lg);
border-block-end: var(--border-default);
}
А кастомные атрибуты заменили модификаторы в стиле BEM:
random-pattern {
& [shape-type="1"] {
border: 0.1rem solid var(--color-sheet);
}
}
Плюсы: сократил CSS до ~5КБ, улучшил доступность и чистоту разметки. Минусы: подход требует большего планирования и не подходит для крупных проектов с разноуровневой командой.
Пока не готов назвать это идеальным решением для всех случаев, но для личного сайта — отличный эксперимент.