Доброго времени суток! Начала писать первый проект по БЭМ, использую методологию (соглашение по наименованию и структуру фауйлов). Прошу помогите пожалуйста проверить, правильно ли я начинаю использование блоков и элементов по методологии. Задача такая, что навигационная панель будет на главной странице будет сначала отличаться по стилю чем на остальных страницах()без фона). При скроле меню фиксируется и будет приобретать такой вид как на других страницах(с фоном)
<body class="b-page b-main-page">
<div class="l-wrapper">
<header class="l-page-header j-page-header">
<nav class="l-navigation l-navigation--main">
<ul class="b-menu b-menu-main">
<li>
<button class="b-button-toggle" type="button" data-toggle="toggle">
<span class="b-button-toggle__sr-only">navigation</span>
<span class="b-button-toggle__icon-bar"></span>
<span class="b-button-toggle__icon-bar"></span>
<span class="b-button-toggle__icon-bar"></span>
</button>
<ul class="b-dropdown-menu b-dropdown-menu-main">
<li class="b-dropdown-menu__item b-dropdown-menu__item-main"><a class="b-dropdown-menu__link b-dropdown-menu__link-main b-link" href="">О компании</a></li>
<li class="b-dropdown-menu__item b-dropdown-menu__item-main"><a class="b-dropdown-menu__link b-dropdown-menu__link-main b-link" href="">Блог</a></li>
<li class="b-dropdown-menu__item b-dropdown-menu__item-main"><a class="b-dropdown-menu__link b-dropdown-menu__link-main b-link" href="">Полезные статьи</a></li>
<li class="b-dropdown-menu__item b-dropdown-menu__item-main"><a class="b-dropdown-menu__link b-dropdown-menu__link-main b-link" href="">Помощь</a></li>
</ul>
</li>
<li class="b-menu__item b-menu-main-item"><a class="b-menu__link b-menu__link--active b-link" href="">Рекламодателям</a></li>
<li class="b-menu__item b-menu-main-item"><a href="">Владельцам сайтов</a></li>
<li class="b-menu__item b-menu-main-item"><a href="">Обмен трафиком</a></li>
<li class="b-menu__item b-menu-main-item"><a href="">Агентам</a></li>
</ul>
<ul class="b-login">
<li class="b-login__item">
<a class="b-login__signin" href="#">Вход</a>
<a class="b-login__signup" href="#">Регистрация</a>
</li>
<li class="b-login__item i-hide">
<a class="b-login__accaunt-user" href="#">alexander.starodumov@gmail.com</a>
<a class="b-login__signout" href="#">Регистрация</a>
</li>
</ul>
</nav>
</header>
<div class="b-promo-header">
<div class="l-container">
<div class="l-promo-logo b-promo__logo">
<a class="b-promo-header-link">
<img class="b-siteLogo__icon" src="http://net-craft.com/wp-content/themes/netcraft/img/siteLogo__icon.png" alt="Net-Craft.com" title="Net-Craft.com" itemprop="logo" />
</a>
<h3 class="b-promo-header-text b-promo-header--text-middle">logo text</h3>
<h1 class="b-promo-header-text b-promo-header-text--big">logo text</h1>
</div>
</div>
</div>
<div class="b-page__section">
<div class="l-container">
<div class="l-row">
<div class="l-row__col_6">
<div class="b-page__text-block">
</div>
</div>
<div class="l-row__col_6">
<div class="b-page__image-block">
</div>
</div>
</div>
</div>
</div>
<div class="l-footer-push"></div>
</div>
<footer class="l-footer ">
<div class="b-page-footer">
<div class="l-container">
<ul class="b-menu b-footer-menu">
<li class="b-footer-menu__item b-menu-item__item"><a class="b-footer-menu__link b-menu__link b-link" href="">О компании</a></li>
<li class="b-footer-menu__item b-menu-item__itemn"><a class="b-footer-menu__link b-menu__link b-link" href="">Блог</a></li>
<li class="b-footer-menu__item b-menu-item__item"><a class="b-footer-menu__link b-menu__link b-link" href="">Помощь</a></li>
</ul>
</div>
</div>
</footer>
Спасибо большое заранее за помощь.
Я бы сделал приблизительно так:
Спасибо большое за ответ, я ваши правки учту, вижу Вы советуете отказать от префиксов, да? И еще такой вопрос у меня в коде было -
<div class="l-row__col_5 l-row-offset-1">
Получается что по сетке, это элемент со сдвигом, а по БЭм - это элемент блока l-row и также блок l-row-offset-1, насколько я поняла, это моя ошибка, а как тогда же по БЭМ задавать на одном элементе row и ширину и сдвиг одновременно? Скажите, может ли быть у элемента два модификатора (например что это ссылка для главного меню, и активная ссылка)? Спасибо большое за помощь!Да, в них нет особого смысла, если на проекте не стоит задача явно разделять два принципиально разных способа верстки (например, было много легаси-разметки до БЭМ, теперь новые части пишутся по БЭМ, возникает необходимость отличать новое от старого).
Это я невнимательно посмотрел. Конечно, у элемента может быть любое количество модификаторов одновременно и в данном случае два модификатора вполне уместны.
Ясно, по поводу модификаторов, спасибо что пояснили, если можно буду обращаться за помощью по ходу написания, тяжеловатоу научиться мыслить по БЭМ, сразу хочется применить каскад)
Главное — это не впадать в крайности и не отказываться от каскада полностью ;)
См. FAQ.
@tadatuta почему page--main, а не page_main ?
@vithar такой стиль для модификаторов был использован в исходном варианте, я решил его не менять.
@tadatuta одновременно с этим там есть l-row__col_6
@vithar и то правда. отредактировал свой коммент, заиспользовал везде
_
для модификаторов.всем доброго дня! просто тут в коде используется Стиль Гарри Робертса, в котором модификаторы именно так отделяются https://ru.bem.info/method/naming-convention/ Помогите пожалуйста , вот такой момент, у меня все css склеивают на выходе в один, и получается что стили по алфавиту, и в этом случае случается перекрытие стилей если я задаю одинаковые свойства с разными значениями например drop-down-link и link есть свойство color, но link идет ниже и перекрывает, как можно решить эту проблему, спасибо!
Как обычно есть несколько вариантов: простой и хороший ;)
Простой заключается в том, чтобы повысить специфичность тем селекторам, которым должны «победить». Например, есть
<div class="a b">
. В CSS было.a { color: red; }
, стало.a.a { color: red; }
. Теперь даже если.b { color: green; }
окажется ниже, все равно останется красный.Сложный вариант в том, чтобы научить сборку учитывать порядок. И тут снова есть несколько вариантов: — учитывать порядок появления классов в DOM-дереве и в рамках каждого узла (делается легко, но не покрывает всю вариативность использования) — перейти на сборщик ENB, который изначально задумывался для решения этой задачи.
Еще раз благодарю за пояснение, в моем случае пока пойду по простому пути, поскольку не использую еще сборщик, но поняла уже, что это будет мой следующий этап) - использовать сборщик БЭМа