Scss перед родительским селектором

У меня есть проект, в котором у устаревшего кода есть такие классы, как

promogame-promo

У меня есть шанс очистить css, изменив его на scss, но проблема, которую я пытаюсь решить, заключается в том, что я хотел бы вложить promo и сделать так, чтобы game- добавлял родительский элемент.

.promo {
  display: flex;
  game-& {
    color: black;
  }
}

Мне бы хотелось, чтобы вышеперечисленное работало, но это не так, и мне интересно, встречал ли кто-нибудь способы достижения того, что мне нужно?

Вы забыли индикатор класса: .. Вы пробовали .game-& { ...?

Joseph Marikle 23.03.2018 14:18

@JosephMarikle, который дает мне .game- .promo вместо .game-promo

ngDough 23.03.2018 14:21

нет я думаю ты не можешь

Temani Afif 23.03.2018 14:21
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
3
86
4

Ответы 4

.game-promo {
  color: black;
  @at-root .promo {
    display: flex;
  }
}

Кажется, это невозможно, поэтому после повторной перестановки кода я получил это.

Вы не можете делать то, что пытаетесь. «&» Используется для получения текущего селектора, в вашем случае: game-.promo или .game-.promo, если вы добавляете селектор класса, но он не может работать.

В вашем случае вы можете:

.game-promo {
    color: black;
    .promo {
        display: flex;
    }
}

Или переименуйте свои классы в название: (я привожу пример с инвертированием логики ваших имён)

  • Родитель с ".promo"
  • Ребенок с ".промо-игрой"

Итак, вы могли:

.promo {
    //properties
    &-game {
        //properties
    }
}

Это возможно, но не очень красиво (код на jsFiddle):

/** see https://gist.github.com/Bamieh/912a6f0b63cbb53f3ad0bd8df7171c6a */
@function parse-dotless($class) {
  $this: quote($class);
  @return if (str-slice($this, 0, 1) == ".", str-slice($this, 2, str-length($this)), $this);
}

.promo {
  color:yellow;
  @at-root .game-#{parse-dotless(&)} {
    color: blue;
  }
}
<span class = "promo">Hello</span>
<span class = "game-promo">World</span>

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

.btn {
  &-primary {}
  &-secondary {}
}

Что переводится на:

.btn-primary {}
.btn-secondary {}

В вашем примере кода вы можете инвертировать имена правил:

.promo {
  display: flex;

  &-game {
    color: black;
  }
}

Узнать больше о нахальный амперсанд

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