Синтаксис БЭМ в SASS

У меня простой HTML и CSS с БЭМ. Мне нужен стиль для класса .block__item-header-mark внутри класса .block__item-header — имеет раунд. Я использую CSS .block__item-header--has-round .block__item-header-mark { /стиль здесь/ }. Но я не думаю, что это хороший синтаксис.

Мой вопрос:

  1. Как вызвать .block__item-header-mark внутри .block__item-header--has-round с лучшим синтаксисом в моем коде SCSS?
  2. Мой синтаксис БЭМ хорош?

Код

.block {
  &__item {
    &-header {
      &--has-round {
        /* How to call .block__item-header-mark with better syntax ??? */
        .block__item-header-mark {
          /*overide style*/
        }
      }
      &-mark {
        /*normal style*/
      }
    }
  }
}
<div class = "block">
  <div class = "block__item">
    <div class = "block__item-header block__item-header--has-round"><span class = "block__item-header-mark"></span></div>
    <div class = "block__item-body"></div>
  </div>
</div>

Это совершенно прекрасный подход.

Obsidian Age 15.07.2019 05:14

Классы БЭМ на вашем HTML идеально подходят. В CSS я не думаю, что вам нужно использовать всю иерархию, так как если вам нужен какой-то селектор для переопределения вашего стиля, математика будет сложной. Максимально ограничьте специфичность вашего селектора CSS.

Toan Lu 15.07.2019 07:23
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
3
2
263
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете создать переменную для ссылки на желаемую область

.block {
  &__item {
    &-header {
      $header: &;
      &--has-round {
        #{ header }-mark {
          /* override style */
        }
      }
      &-mark {
        /*normal style*/
      }
    }
  }
}
&--has-round &-mark <- не нарушит ли это БЭМ?
zerkms 15.07.2019 07:15

@zerkms Я не думаю, что это нарушает, но опять же, я давно не использовал БЭМ и могу ошибаться

iagowp 15.07.2019 16:41
ru.bem.info/методология/быстрый старт "эта блочная структура всегда представлена ​​в виде плоского списка элементов в методологии БЭМ:" БЭМ подразумевает, что вы не используете каскад.
zerkms 15.07.2019 22:32

@zerkms has-round — это модификатор, поэтому я вижу ошибку в том, что он должен быть &_has-round &-mark

iagowp 16.07.2019 04:38

Да, но &--has-round &-mark каскадный и больше не "плоский".

zerkms 16.07.2019 04:57

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

iagowp 16.07.2019 06:17

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