Ответы пользователя по тегу БЭМ
  • Как повторно использовать компоненты верстки в разных проектах?

    movasyl
    @movasyl
    semper tiro
    Чуваки, вы о git слышали? Если нет, то самый раз услышать.
    ПС: хотя TARS и осиротел в последнее время, но доки там шикарные, не ленитесь за Вас обо всем позаботились ... https://github.com/tars/tars/blob/master/docs/ru/faq.md пункт #3
    Ответ написан
    Комментировать
  • Как правильно структурировать сайт с точки зрения BEM?

    movasyl
    @movasyl
    semper tiro
    Блок - логически завершенный элемент интерфейста. Которому предоставляются наиболее общие стили а также ресет браузерных стилей.
    Блок_модификатор - селектор отвечает за внутренний вид блока. Все от бордера и внутрь. Шрифты, размеры, цвета ...

    Блок__элемент - селектор отвечает за позиционирование элемента внутри родительского блока. От своего бордера наружу до бордера родителя.

    На одном узле могут присутствовать все три сущности одновременно. Любой блок будучи блоком может быть элементом своего родительского блока.
    Но при этом элемент не может иметь дочерних элементов, а только блок.
    Тоесть както так:
    https://codepen.io/kovbassa/pen/ObrqZv?editors=1100
    Ответ написан
    3 комментария
  • Усовершенствование BEM или "ненужно"?

    movasyl
    @movasyl
    semper tiro
    может, я что-то не так понял, потому что от твоих дефисов, глаза разбегаются ... Семантика есть еще такое понятие, между прочим. Но, чем твое предложение отличается от концепции bem примиси?
    И кто это в 2017 году руками пишет? Пойди лучше загугли о pug да sass и как эту всю историю собрать с gulp или webpack.
    Ответ написан
    Комментировать
  • Какие свойства нужно прописывать для каждого из типов БЭМ?

    movasyl
    @movasyl
    semper tiro
    Ну во-первых немного лирики: не существует никакого единственно правильного варианта использования БЭМ в том или ином случае. Так как БЕМ это не набор аксиом и алгоритмов, а идея (чит. Идеология, философия, взгляд под другим углом и тп ...). Кроме того БЕМ не единственная в своем роде концепция, из первого что приходит на ум - SMACSS, OOCSS, Atomic CSS. Если посмотреть обобщенно, одно и то же разными словами с незначительными расхождениями (краткий обзор). Важно не название, а суть. Ты сейчас (да и вообще каждый, кто делает первые шаги на пути джедая :)) наверное думаешь - "Блин, ну нафига они придумали этот вынос мозгов?", или - "За что они так со мной?". Можешь не отвечать, я все равно знаю что так :). А суть, как раз таки, кроется в противоположной плоскости. Для того чтобы понять сложные вещи написаны зачастую непонятными словами (исключительно для пафоса) нужно:
    1. Из всего потока информации четко, по пунктам выделить для чего оно создано и какие трудности собственно должно решить.
    2. Методом научного тыка, на практике, найти эти проблемы, увидеть своими глазами и понять что данный инструмент, это не наказание с неба, а молоток для гвоздей которые ты раньше забивал ручкой отвертки.
    Чуть ближе к телу:
    Программисты вообще не любят верстку. Потому что они привыкли работать с продвинутыми языками программирования где все поддается логике, а все шишки уже набиты предшественниками. А связка html / css очень трудно вписывается в эту картину. Отсюда и постоянное стремление придумать велосипед. Следующее, существует 1000 и один способ сверстать даже простейший элемент. Что уж говорить о современных интерактивних веб-приложениях... В результате на выходе ты получаешь тысячи строчек кода, которые не понятно как работают, еще и непонятным образом взаимодействуют между собой, да так что сам их создатель через день не может разобраться.
    Ху из BEM:
    Собственно БЕМ ни что иное, как попытка бородатых кодеров из Яедекса применить парадигму ООП (объектно-ориентированного программирования) на процесс верстки. А если более точно то подвид ООП - КОП (не мент, компонентно-ориентированное программирование). И должен признаться, полностью даже удачная попытка.

    Что мы имеем:
    БЭМ-сущность, она же блок, а он же объект, который также известен как компонент или модуль, отвечающий принципу абстракции ООП - А простыми словами, это часть нашей веб-страницы на которую мы разок глазом бросили и особо не задумываясь можем ее выделить как нечто самодостаточное. То, что можно описать одним словом. И слово это будет одновременно и названием, и не глядя на картинку сделает понятным как блок может выглядеть, да еще и ко всему этому опишет его функции и принцип его работы. Вместе с тем его можно переиспользовать в разных местах этой страницы, или на других страницах сайта.
    Пример:
    - Алло, Алекс, я зарегистрировался на тостере, как здесь задать вопрос?
    - Да, проще простого, жмешь на кнопку 'Задать вопрос' спрашиваешь и жмешь кнопку "отправить".

    Таким образом ты не глядя в монитор, а я только что увидев этот сайт впервые, прекрасно друг друга поняли. Потому что на сайте есть ярко выраженный, самодостаточный, элемент пользователь интерфейса - блок кнопка.

    - Эй, Алекс, а помнишь тот сайт который мы сдали на прошлой неделе?
    - Ну да, еще даже исходники на рабочем столе валяются.
    - Супер, заказчик просил кнопки в формах поменять из брендового-зеленого на более яркий зеленый, а то что-то ему в глаза не бросается. :) И ту кнопку, которая в шапке "Узнать больше" надо бы отцентрировать.
    - Ок, три минуты, у нас же там все по less-bem, чики-пики.

    В данном случае ни ты ни я не помним ни точной реализации кнопок ни реализации таблиц, нас вообще не интересует что там внутри, какие теги использовались, сколько там инпутов и тп. Мы абстрагируемся от более примитивного к более осмысленному. Соответственно, когда будешь редактировать, будешь делать это не методом - пальцем в небо. А попросту читая по названиям классов. Сначала найдешь клас header дальше в нем класс button.
    Блок button - это кнопка в общем, он задает общий скелет, шаблон по принципу которого выглядят другие. В идеале туда попадают стили для ресета стилей браузера, ну и еще что-то, если оно присутствует во всех кнопок на макете.
    (схема пример)
    /* HTML types */
    
    <a class='button' href='#'>Кнопа</a>
    <button class='button' href='#'>Кнопа</button>
    <input class='button' type="submit" value="Кнопа">
    /* bem entity */
    
    .button{
                                     // reset
      user-select: none;
      display: inline-block;
      text-decoration: none;
      touch-action: manipulation;
      
                                     // common
      padding: 0.5em 1em;
      border-radius: 2em;
      text-align: center;
    }
    
    /*        _MODS_       */
    // SIZE (SCSS)
    .button{
       &_size_s{
         font-size: 1rem;
         }
       &_size_l{
         font-size: 2rem;
         }
    }
    
    // COLOR
    .button{
      &_primary{
        background: #607D8B;
        color: #ffffff;
        }
      &_secondary{
        background: #8BC34A;
        color: #ffffff;
        }
    }
    
    // PARENT__BLOCK
    .header{
        &__button{
          display: block;
          width: 200px;
          margin: 0 auto;
         }
    }

    codepen.io/kovbassa/pen/ObrqZv?editors=1100

    Дале нас просят изменить что-то в виде кнопок.
    Какие - брендового цвета, какие нужно - ярко зеленые. Все что какой, какая, какие итп .. - это модификатор .button__mod-name, здесь и прямоугольные и колор и закругленные и большие и маленькие. Пример, сделаем книпкы в формах заметнее.
    <button class="button button_accented button_xl">text</button>
                 // common, color,            size

    А теперь отцентрируйте кнопку в хедере.
    .button - скелет всех кнопок, где его конкретный случай будет в шапке, ему все равно.
    button_mod - одьожки кнопок, одна зеленая, другая красная, а там большая итд ..
    Всповним как стоит задача: отцентрировать кнопку в шапке.
    То есть шапка .header а у нее есть элемент .button, который должен быть по середине.
    Отсюда:
    <header>
    <button class="button button_brand header__button" >text</button>
                 //common, color,        local position
    </header>

    На конец - блоки могут состоять, как из меньших блоков так и из элементов. Элементы не могут иметь своих блоков, или элементов. Один DOM узел (html тег) может быть одновременно и блоком и элементом родительского блока.
    Относительно размеров, лучше, когда размеры задает скелет страницы, тобиш сетка. Поэтому старайся делать блоки по максимуму резиновыми в ширину. Старайся оперировать относительными величинами (%, em, rem) а не абсолютными - px.
    А вообще не так важно правильно ты используешь BEM или нет, важнее стабильность стиля. Если начал верстку в определенном стиле, старайся придерживаться его до конца. Например хорошей практикой вертикального позицонування элементов на странице будет использование только margin-bottom, или только margin-top. А не все в кучу и margin's collaps повсюду в итоге.
    Ответ написан
    2 комментария
  • БЭМ Модификаоторы, правильно ли делаю?

    movasyl
    @movasyl
    semper tiro
    во первых, для иконки вполне есть смысл сделать блок, ибо она может быть в составе всего, что угодно, не только кнопки.

    во-вторых, мы вроде вчера договорились :))
    .b{
    //  желательно использовать для общих стилей
    }
    b--m{
    // желательно использовать для внешнего вида.
    }
    .b__e{
    //  желательно использовать для позиционирования.
    }

    в остальном согласен с Сергей . Еще раз, bem не запрещает вложенности. bem призывает использовать их с умом и, желательно, не больше одного уровня.
    Ответ написан
  • Правильный ли БЭМ?

    movasyl
    @movasyl
    semper tiro
    Слишком сложно, Sass есть инструмент для облегчения жизни, а ты ее усложняешь.
    Сделай пример на codepen, ато глаза разбегаются.
    Несколько моих примеров для понимания подхода, может пригодится:
    codepen.io/kovbassa/pen/ObrqZv?editors=1100 - нативный scss
    codepen.io/kovbassa/pen/MJveyr - scss с bem миксином (+ комменты)
    Ответ написан
    2 комментария
  • BEM Методология, правильное ли выбрано название элементов?

    movasyl
    @movasyl
    semper tiro
    Ну, так +\- .
    У тебя нет ни одного блока в середине, одни элементы.
    пример:
    button- общие стили баттона от бордера внутрь.
    button_mod- разновидности: размеры, цвета итд (от бордера внутрь).
    parent__button- все, что касается позиционирования баттона (внешняя геометрия) батона в родительском элементе (если это необходимо) - от бордера наружу.
    Ответ написан
    Комментировать
  • Нуждаюсь квалифицированные пинки по написанию классов по БЭМ?

    movasyl
    @movasyl
    semper tiro
    попробуй вместо
    <div class="block block_mod">
      <div class="block__elem block__elem_mod">

    так
    <div class="block block_mod">
      <div class="elem elem_mod block__elem">
    Ответ написан
    Комментировать
  • Как пользоваться миксинами (**модификаторами** - не то написал в задумчивости) БЭМ?

    movasyl
    @movasyl
    semper tiro
    SCSS mixin
    /// Block Element
    /// @access public
    /// @param {String} $element - Element's name
    @mixin element($element) {
        &__#{$element} {
            @content;
        }
    }
    
    /// Block Modifier
    /// @access public
    /// @param {String} $modifier - Modifier's name
    @mixin modifier($modifier) {
        &--#{$modifier} {
            @content;
        }
    }

    использование
    .block {
        /* CSS declarations for `.block` */
    
        @include element('element') {
            /* CSS declarations for `.block__element` */
        }
    
        @include modifier('modifier') {
            /* CSS declarations for `.block--modifier` */
    
            @include element('element') {
                /* CSS declarations for `.block--modifier__element` */
            }
        }
    }
    Ответ написан
  • Альтернатива html шаблонизотру от Bem?

    movasyl
    @movasyl
    semper tiro
    lavezzi1, Jade / pug лучше ничего не найдешь. Месяц назад это уже проходил. Теперь не понимаю, как я без него столько лет жил :))
    Ответ написан
    Комментировать
  • Что именно лучше использовать из БЭМ?

    movasyl
    @movasyl
    semper tiro
    Сам подход фулл стека мне очень нравится но реализация на тройку ИМХО. Пллюс документация оставляет желать лучшего. Я использую подход но на основе pug + набор тасков TARS.

    И вообще мне кажется, что ребята с Яндекса немного подзабили на поддержку опенсорсного проекта. Та система сборки, которая представленна на bem.info хорошенько устарела.
    Ответ написан
    2 комментария