Ответ 1
Вам нужно рассмотреть возможность удаления имен testimonial
, а также footer
.
Рассмотрим следующий пример:
.primary-box { }
.primary-box--reduced { }
.primary-box--standout { }
В этом примере классы полностью независимы от контекста страницы. В результате классы полностью повторно используются. Любое поле на странице может принимать классы выше и ожидать, что их стиль будет определен точно так же, как определено.
Например, вы могли бы:
<header>
<div class='primary-box primary-box--reduced'></div>
</header>
<div class='content-box'>
<p class='primary-box primary-box--standout'></p>
</div>
<footer>
<div class='primary-box primary-box--reduced'></div>
</footer>
Теперь, когда дизайнер возвращается и настраивает прописные окна, вы можете перейти непосредственно к этим стилям и настроить их, уверенные, что единственными областями, которые будут выполняться, будут те области, которые имеют эти классы в HTML.
Кроме того, когда вы решите переместить .primary-box--reduced
из <header>
в панель меню, которая находится над ней, или в нижний колонтитул, вы можете быть уверены, что стили будут полностью выполнены.
Если вам нужен другой элемент где-то, возможно, primary-box--standout
или просто по умолчанию primary-box
в заголовке, вы просто создаете его и добавляете классы, стили будут полностью следовать.
Вы никогда не наследуете неожиданные стили.
Это очень реальный пример: сайт, который я построил недавно, был почти таким же, как и я, я говорю почти все, потому что я все еще участвую, но я могу гарантировать, что бит, с которым я столкнулся, - проект с очень плоскими проектами был тем, у кого был неспецифический контекст.
Какое значение имеет отсутствие контекста. В первом примере .testimonial--footer
очень зависит от контекста, вам действительно нужно использовать его только в комментариях в нижнем колонтитуле.
И как будто по волшебству CSS Wizardry охватывает эту точную тему
EDIT: Я добавил этот пример, чтобы помочь с комментарием, сделанным по моему ответу. Это не BEM или OOCSS, хотя он немного ближе к подходу SMACSS. Это то, как я решаю проблемы с css и представляет собой гибридный подход BEM/SMACSS:
Загружено по порядку:
- файлы модулей, например
.primary-box
- файлы раздела раздела, например
.header
или.call-to-action
- файлы страниц, такие как
.about-us
или.contact
Каждый файл становится все более конкретным, одновременно создавая более сложные и модули. Основываясь на приведенных выше примерах и, надеюсь, помогая OP, вы можете видеть такие стили, как:
.header {
.primary-box {
color: #000;
}
}
который будет перегружать стили модуля, используя более конкретную вложенную нотацию класса. Обратите внимание, что я бы все же избежал использования имени класса, такого как .header
- .banner-standout
, было бы лучше, если бы оно было повторно использовано в любом месте без путаницы
Далее вы можете увидеть:
.about-us {
.header {
.primary-box {
color: #f00;
}
}
}
Я нахожу, что это очень хорошо работает в реальных проектах для контекста, сохраняя при этом контекст свободной мощности BEM, хотя я также настоятельно призываю как можно увеличить эту цепочку в модулях. Жизнь проще, если я узнаю новый общий раздел или модуль страницы и соответствующим образом упорядочу имена и файлы. В проекте, где код был реорганизован с осторожностью, у меня ничего нет в файлах страниц.