@at-root
на самом деле не работает так, как вы думаете в этом случае.@at-root
просто сделает объявление вне гнезда.Чтобы лучше понять, добавьте еще одно объявление CSS, как показано ниже:
.cta-two-columns {
&__text-holder {
margin: 10px;
@at-root&#{__inner} {
padding: rem(25px);
}
}
}
Это даст следующий код CSS:
.cta-two-columns__text-holder {
margin: 10px;
}
.cta-two-columns__text-holder__inner {
padding: rem(25px);
}
Просто представьте, как селектор будет создан без @at-root
, затемсделайте это снаружи.
Без этого вы получите:
.cta-two-columns__text-holder {
margin: 10px;
}
.cta-two-columns__text-holder .cta-two-columns__text-holder__inner {
padding: rem(25px);
}
Тогда мы просто опускаем .cta-two-columns__text-holder
.
Одна идея получить то, что вы хотите, этоРассмотрим переменную, в которой вы можете объявить основной класс, тогда вы сможете вкладывать столько элементов, сколько захотите:
$sel: '.cta-two-columns';
#{$sel}__text-holder {
#{$sel}__inner {
padding: rem(25px);
}
}
Произведет:
.cta-two-columns__text-holder .cta-two-columns__inner {
padding: rem(25px);
}
с большим количеством вложенных элементов.:
$sel: '.cta-two-columns';
#{$sel}__text-holder {
#{$sel}__outer {
#{$sel}__inner{
#{$sel}__wrap{
padding: rem(25px);
}
}
}
}
Будет производить
.cta-two-columns__text-holder .cta-two-columns__outer .cta-two-columns__inner .cta-two-columns__wrap {
padding: rem(25px);
}