Концепция CSS БЭМ

Я пытаюсь обойти концепцию Block-Element-Modifier в CSS, и я немного запутался. Вот пример кода

<div class = "block">
    <div class = "block-header">
        <h3>Block Title</h3>
    </div>
    <div class = "block-content">
        <p>Lorem Ipsum</p>
    </div>
    <div class = "block-footer">
        <p>Footer</p>
    </div>
</div>

Насколько я понимаю, классы .block, .block-header, .block-content и .block-footer являются БЛОКАМИ концепции БЭМ (поправьте меня, если это не так), но тогда что такое <h3> and <p> блок или элемент?

меня просто поразило, так что редактирование вопроса,

Если оба <h3> and <p> являются блоками (в случае, если это), что, вероятно, может быть элементами этих двух тегов?

отредактировано снова

Вот блок кода в html

<div class = "block">
    <div class = "block-content">
        <div class = "user-image"> <img class = "user-image__image" src = "image/1.jpg" alt = ""> </div>
        <div class = "user-meta">
            <h3 class = "user-meta__username user-meta__username-red"> Trump </h3>
        </div>
        <ul class = "nav">
            <li class = "nav__item nav__item_active"><a class = "nav__link">One</a></li>
            <li class = "nav__item"><a class = "nav__link">Two</a></li>
            <li class = "nav__item"><a class = "nav__link">Three</a></li>
        </ul>
    </div>
</div>

Не могли бы вы просмотреть приведенный выше код и сообщить мне, правильно ли это,

  1. .block, .block-content, .block-image, .user-meta and .navявляются БЛОКАМИ БЭМ

  2. user-meta__username and nav__item — Элементы БЭМ.

  3. user-meta__username-red — Модификатор БЭМ.

Привет. БЭМ четко указывает, что за элементами должны следовать двойные символы подчеркивания, например block__header вместо block-header. Но, конечно же, вы можете сами выбирать стиль элементов. Концепция четко объяснена здесь. Если вы предпочитаете визуальное руководство, обратитесь к этому раздел. Удачи!

Helenesh 11.03.2019 09:37

Я начал пару дней назад, поэтому новичок в этом, да, я читал о соглашениях об именах, я думал, что класс block-header тоже был блоком. Это то, что я тоже написал .. Так является ли блок-заголовок, блок-контент и блок-нижний колонтитул Элементами или Блоками?

Daksh B 11.03.2019 09:40

Эй, это красивый учебник .... спасибо, @Helenesh.

Daksh B 11.03.2019 09:42

Это зависит. Я бы исследовал это как можно больше и просматривал примеры. Поначалу это может быть трудно понять, но вы справитесь. Все, что я могу сделать, это повторить то, что находится внутри документации. Удачи!

Helenesh 11.03.2019 09:43

@Helenesh, я только что прошел урок, который вы опубликовали. В нем говорится, что блоки могут быть вложены друг в друга, и у вас может быть любое количество уровней вложенности, поэтому я понимаю, что блок-заголовок, блок-содержимое и блок-нижний колонтитул являются блоками. Можете ли вы проверить.

Daksh B 11.03.2019 10:46
ru.bem.info/methodology/faq/…
connexo 11.03.2019 12:19
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
6
603
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

БЭМ следует соглашению об именах block__element--modifier Приведение примера

<ul class = "menu">
  <li class = "menu__item menu__item--active"></li>
  <li class = "menu__item"></li>
  <li class = "menu__item"></li>
  <li class = "menu__item"></li>
</ul>

Блок - menu, Элемент - menu__item, Модификатор - menu__item--active

Вы так и не ответили на мой вопрос, являются ли .block, .block-header, .block-content и .block-footer блоками или элементами, а как насчет h3 и p? Я не ищу соглашения об именах.

Daksh B 11.03.2019 10:38

Насколько я читал и понимаю, что блок может быть вложен в другой блок, поэтому все три класса являются блоками, но ответ выше меня еще больше смущает.

Daksh B 11.03.2019 10:41

Во-первых, нам не нужно упоминать «блок», когда сам заголовок/контент/нижний колонтитул является блочным элементом. когда дело доходит до h3 и p, в большинстве случаев эти теги будут использоваться как элементы (возможно, «заголовок» или «описание»). Приведем еще один пример - контент, контент__название, контент__описание

Vivekraj K R 11.03.2019 10:45

Я называю div моего блока страницы, так что это делает его блоком, я мог бы использовать блок, но блок звучит лучше, во-вторых, этот блок далее разделен на три раздела: заголовок, контент и нижний колонтитул, я знаю, что я делаю прямо сейчас так что да, вы можете назвать это БЛОК. И после прохождения ru.bem.info/methodology/quick-start/#block я чувствую, что да, эти разделы определенно являются блоками концепции БЭМ. h3 и p - элементы, и я думаю, что они и в этом случае.

Daksh B 11.03.2019 10:51

как насчет этого, заголовок, нижний колонтитул или контент могут дополнительно содержать набор блоков. Навигация - это блок, в котором есть еще блок логотипа, блок меню и блок панели поиска... Да, да, да, да, я получил часть блока, теперь к элементу.

Daksh B 11.03.2019 10:59
Ответ принят как подходящий

Во-первых, название и структура — дело личное. Хотя концепция БЭМ вполне ясна. Это инструкция, а не закон.

Блокировать: Сколько блоков, элементов или модификаторов у вас есть, зависит от того, насколько вы хотите повторно использовать свой собственный код. Количество блоков (повторяющихся элементов) может быть таким большим или маленьким, как вы хотите в своем собственном проекте. Мои собственные рекомендации заключаются в том, что я использую блок только тогда, когда знаю, что ситуация будет повторяться.

Руководство по CSS для блоков:

  1. Использовать только селектор имени класса
  2. Нет имени тега или идентификатора Нет зависимости от
  3. другие блоки/элементы на странице

Элемент: Элементной частью БЭМ является блок его «статического» содержимого. Это могут быть неповторяющиеся элементы, такие как одноразовые стили заголовков, стили списков, графические элементы и т. д. Вы никогда не смешиваете элементы других блоков внутри своего собственного блока. Пример:

ХОРОШО:

<div class = "logo"> <img src = "/" class = "logo__image"> </div>

ПЛОХОЙ:

<div class = "logo"> <img src = "/" class = "branding__logo"> </div>

Руководство по CSS для элементов

  1. Использовать только селектор имени класса
  2. Нет имени тега или идентификатора
  3. Отсутствие зависимости от других блоков/элементов на странице

Модификатор: Модификаторы можно использовать для блоков и элементов в зависимости от того, насколько сильно вы хотите изменить макет, когда происходит действие. Это может быть выделение чего-то, чтобы полностью изменить внешний вид дизайна. Или просто спрятать вещи.

Руководство по CSS для модификаторов

  1. Чтобы изменить элементы на основе модификатора уровня блока
  2. Чтобы изменить элементы на основе модификатора элемента

Подробнее о БЭМ можно узнать здесь: http://getbem.com/

Пример вашего кода:

<!-- Begin block: topbar -->
<div class = "topbar">
  <div class = "topbar__content">
    
    <!-- Begin block: user -->
    <div class = "user">
      <img class = "user__image" src = "image/1.jpg" alt = "">
      <div class = "user__meta">
        <h3 class = "user__username user__username--red"> Trump </h3>
      </div>
    </div>

    <!-- Begin block: nav -->
    <ul class = "nav">
      <li class = "nav__item nav__item--active"><a class = "nav__link">One</a></li>
      <li class = "nav__item"><a class = "nav__link">Two</a></li>
      <li class = "nav__item"><a class = "nav__link">Three</a></li>
    </ul>
    
  </div>
</div>

Имейте в виду, что это мой личный вывод из концепции БЭМ. Будьте свободны не соглашаться или использовать другие методы.

Arno Tenkink 11.03.2019 12:19

Другие вопросы по теме