Отлично, но теперь, если вы попытаетесь поместить измененный код на какую-то страницу с той же идиомой, это не сработает. Это означает, что каскады не работают так, как вы хотите. CSS Модули могут быть опцией для решения этой проблемы, но в ней также используются классы.
Кроме того, в большинстве случаев нет реальных причин для исключения классов в элементах html. Браузеры любят классы и стили, связанные с ними. Одноуровневые классы работают намного быстрее, чем каскады. Переданные байты примерно равны из-за zopfli / brotli. Отбрасывание классов просто затрудняет чтение исходного кода.
Но это только о классах.
Я в основном упростил HTML и избавился от ненужных оболочек, divitis
Упрощение html Уценка обычно хорошая вещь. Элементы logo-wrapper
и content
просто избыточны, и отбрасывание их не противоречит БЭМ. Например:
<div class="chat-notification">
<img class="chat-notification__logo" src="logo.jpg" alt="ChitChat Logo">
<h4 class="chat-notification__title">ChitChat</h4>
<p class="chat-notification__message">You have a new message!</p>
</div>
почему дескрипторы классов, такие как __lo go -wrapper и __title, полезны, когда такие теги, как img, h4, p уже довольно различимы и semanti c?
На самом деле, пример не является красноречивым из-за простоты. Здесь у нас всего три поля и контейнер. Когда у вас будет несколько изображений или несколько разных «сообщений» (например, поля «за» и «против»), вам нужно будет пометить теги img
и p
. Также img
это не семанти c вещь, это сущность HTML мира, но не ваша. Это не просто абстрактное изображение, это logo
, поэтому лучше пометить его семантически.
Лучше думать о HTML как о низкоуровневой генерируемой вещи, которая помогает переводить наши приложения в браузеры. Вот почему существуют такие библиотеки, как BEM HTML и bem-реаги * .
Например
({
block: 'chat-notification',
content: [
{ elem: 'logo', image: 'logo.jpg', text: 'ChitChat Logo' },
{ elem: 'title', content: 'ChitChat' },
{ elem: 'message', content: 'You have a new message!' }
],
})
Пример с шаблонами