Ответы пользователя по тегу БЭМ
  • Styled components или БЭМ?

    verkhoturov
    @verkhoturov
    HTML-Верстальщик / Frontend Developer
    Сейчас чаще всего или CSS in JS, или CSS Modules.
    Эти подходы встречаются достаточно часто, чтобы хороший фронт знал оба.
    Ответ написан
    Комментировать
  • Как правильно делать адаптив на PUG по БЭМ при сборке на Webpack?

    verkhoturov
    @verkhoturov
    HTML-Верстальщик / Frontend Developer
    Или же можно вообще обойтись без папок desktop.blocks и touch.blocks и просто и создать папку blocks

    Да, так проще и удобнее.

    ...и там создать media.scss и именно для header-а прописать свойства для адаптива и через webpack подключить ее?

    А вот тут лишнее усложнение. Медиазапросы можно прописать в header.scss. Отдельный media.scss не нужен.
    1) если есть желание делать по БЭМ, то в документации вполне подробно написано про варианты файловой струкртуры. Про отдельные файлы со стилями медиазапросов там нет.
    2) отпадает вопрос с Webpack.
    3) нет 100% правильного варианта, делай чтобы тебе и тем кто будет работать с твоим кодом было удобно поддерживать проект.
    Ответ написан
  • Нужно ли использовать js бэм?

    verkhoturov
    @verkhoturov
    HTML-Верстальщик / Frontend Developer
    1) Если вы видите, что в вакансиях часто встречается требование знать ту или иную технологию, то конечно изучайте и используйте.
    2) Если лично вам нравится технология, изучайте и используйте в личных проектах.

    В остальных случаях нет смысла.
    Ответ написан
    Комментировать
  • Что должно быть в теге nav?

    verkhoturov
    @verkhoturov
    HTML-Верстальщик / Frontend Developer
    Что должно быть в теге nav?

    В теге nav должна быть навигация (ссылки).

    Как вы обычно называете эти блоки? По простому типо main-nav__left (меню) и main-nav__right (корзина, личный кабинет, поиск и т.д.). Или как-то иначе?

    Из названия элемента должно быть понятно, что это за элемент, а не его свойство.
    (хорошо: nav__basket, nav__link, nav__search, плохо: nav__top, nav__last, nav__blue)

    Если это не является частью тега nav или является его частью, можно ли называть такие элементы, как поиск или личный кабинет, как отдельные блоки?

    Блоки можно вкладывать в Блоки, это нормально.

    И в отношение хедера, можно ли считать, что в принципе, большинство тегов внутри него, являются блоками, но не элементами? Ведь их можно использовать повторно на странице без привязки к хедеру.

    Если что-то можно переиспользовать в другой части страницы - это Блок. Если теряется смысл вне контекста - это Элемент.
    Ответ написан
    4 комментария
  • Как переключать модификаторы по бэм?

    verkhoturov
    @verkhoturov
    HTML-Верстальщик / Frontend Developer
    БЭМ предлагает методологию (подход, архитектуру) разделения интерфейса на независимые блоки.
    Если у некоторых блоков или элементов есть особенный внешний вид или поведение (отличающие их от аналогичных блоков или элементов), то это реализуется с помощью модификаторов.
    Например, список с "активным" \ "выделенным" пунктом:
    <ul class="list">
      <li  class="list__item">item 1</li>
      <li  class="list__item">item 2</li>
      <li  class="list__item list__item_active">item 3</li>
    </ul>

    С помощью модификатора "list__item_active" последний пункт списка помечается активным.
    На этом полномочия БЭМ заканачиваются )
    БЭМ все равно какие стили или анимации вы будете использовать в "list__item_active". И все равно как вы будете добавлять модификаторы - вручную редактируя html или с помощью js.

    БЭМ про общий подход наименования и использования селекторов, не про конкретные реализации какого-либо поведения или внешнего вида интерфейсов.
    Ответ написан
  • Допускается ли по методологии BEM внутри вёрстки не присваивать некоторым тегам BEM-классы, а вообще оставлять элементы без классов?

    verkhoturov
    @verkhoturov
    HTML-Верстальщик / Frontend Developer
    Я, конечно, не "куратор тега CSS", но по БЭМ допускается чтобы у тегов отсутствовали классы.
    Почему я так думаю?
    1) В документации ни где не написано, что каждый тег внутри блока должен иметь класс.
    2) В контексте БЭМ "тег" !== "элемент".
    Например, если есть "элемент" содержащий текстовый контент, нет смысла давать класс тегу <strong> и даже тегу <p> если его внешний вид вам подходит.
    3) Сам Яндекс (создатель БЭМ) спокойно оставляет теги без классов. Пример на этой странице https://yandex.ru/dev/maps/mapsapi/
    Если посмотреть код, видно, что параграфы, ссылки, списки, "выделенный" текст не имеют классов. Если сами создатели так делают, то и вам можно :)
    Ответ написан
    Комментировать
  • Как более правильно разбивать стилизацию Блока по БЭМ?

    verkhoturov
    @verkhoturov
    HTML-Верстальщик / Frontend Developer
    Например у меня есть кнопка и я получается должен присвоить три класса, первый - это внешний вид, второй - это размеры(блока или элемента), третий это отступы?


    Вы не верно поняли БЭМ. Должно быть иначе.

    Допустим, у вас есть блок с формой (например, с классом "form"), у блока есть дочерний элемент в виде кнопки. Тогда по БЭМ, у кнопки будет класс "form__button" (блок__элемент).

    Допустим, в форме несколько кнопок, стандартные и "большие". Тогда для "большой" кнопки добавляем класс "form__button--large" (блок__элемент--модификатор). А в селекторе "form__button--large" пишем нужные свойства.
    Сама кнопка будет иметь уже два класса, типа
    <button class="form__button form__button--large"></button>


    Допустим, у больших и стандартных кнопок часть будут "зелеными". Тогда для "зеленых" кнопок добавляем класс "form__button--green".
    В таком случае часть стандартных кнопок будут иметь такой вид
    <button class="form__button form__button--green"></button>

    а часть "больших" будет выглядеть так
    <button class="form__button form__button--large form__button--green"></button>


    В Модификаторе можно прописывать любое свойство Элемента (размер, цвет, позиция и т.д.), но только когда нам нужно модифицировать какой-то уже имеющийся элемет. Специально разбивать свойства на разные селекторы (как в вашем примере) не имеет смысла, тем более если элемент один.
    Ответ написан
    1 комментарий