У меня проблемы с вложением в Sass. Скажем, у меня есть следующий HTML-код:
<p href="#" class="item">Text</p>
<p href="#" class="item">Text</p>
<a href="#" class="item">Link</a>
Когда я пытаюсь вложить свои стили в следующее, я получаю ошибку компиляции:
.item {
color: black;
a& {
color:blue;
}
}
Как мне сослаться на селектор типа перед родительским селектором, если он является частью того же элемента?
sass
css-selectors
МакШаман
источник
источник
.item a.item
по какой-то причине выводится . Я тоже пробовал делатьa#{&}
это самостоятельно, и результат тот же.Метод
@at-root
-only не решит проблему, если вы собираетесь расширить ближайший селектор вверх по цепочке. Например:Будет компилироваться в:
Что делать, если вам нужно присоединить свой тег к
.element
вместо#id
?В Sass есть функция,
selector-unify()
которая решает эту проблему. Используя это@at-root
, можно нацеливаться.element
.Будет компилироваться в:
источник
#id > .element #id > div.element { color: blue; }
. Другой подход заключается в использованииselector_replace
,#id { > .element { @at-root #{selector-replace(&,'.element', 'div.element')} { color: blue;}}}
. Вот суть для лучшей читаемости.selector-replace
это еще один способ сделать это, но для этого нужно знать, что такое селектор. Преимущество этогоselector-unify
метода в том, что он используется в миксинах.Для начала (на момент написания этого ответа) нет синтаксиса sass, который использует селектор & . Если вы собирались сделать что-то подобное, вам понадобится пробел между селектором и амперсандом. Например:
Возможно, вы (неправильно) ищете другой способ использования амперсанда:
Это позволяет вам расширять селекторы другими классами, идентификаторами, псевдоселекторами и т. Д. К сожалению для вашего случая, это теоретически компилируется в нечто вроде .itema, что, очевидно, не работает.
Вы можете просто переосмыслить, как вы пишете свой CSS. Есть ли родительский элемент, который вы могли бы использовать?
Таким образом, вы можете легко написать свой SASS следующим образом:
(Боковое примечание: вы должны взглянуть на свой html. Вы смешиваете одинарные и двойные кавычки И помещаете атрибуты href в теги p.)
источник
href
тег на a,p
написать рабочий CSS..item { a& }
и для этого нет синтаксиса sass (насколько мне известно. Я предположил, что он, вероятно, искал что-то вроде синтаксиса амперсанда, который вы описали, который довольно часто используется в Sass. Однако, основываясь на примере OP,.item { &a }
это недействителен и будет компилироваться в.itema
. Как я уже сказал в своем ответе. Что-то мне не хватает?.item { a& { ... } }
Требуется OP, что теперь можно сделать, как указывает @Blaine.item { @at-root a#{&} { ... } }
. Дело в том, что если у вас есть класс для элемента, это легко сделать,.item { &.class { ... } }
так почему бы вам не сделать то же самое с необработанным элементом html. То, что на момент публикации OP не было возможности сделать это, не означает, что он был неправ, желая, чтобы функциональность действительно выполняла это.AFAIK Если вы хотите объединить амперсанд для класса и тегов одновременно, вам необходимо использовать этот синтаксис:
будет компилироваться в
Другое использование (например, использование класса до
@at-root
или использование нескольких@at-root
s) приведет к ошибкам.Надеюсь, это будет полезно
источник
#{&}
по сути, компилятор обманывает - или это всегда будет работать в будущем !?#{}
оценивается. Также&
означает текущий селектор. Так#{&}
оценивается.c1
.&
Эта функция появилась в последней версии Sass,
3.3.0.rc.1
(Maptastic Maple)
Две тесно связанные функции, которые вам необходимо использовать, - это скрипт
&
, который вы можете интерполировать во вложенных стилях для ссылки на родительские элементы, и@at-root
директива, которая помещает следующий за ним селектор или блок CSS в корень (это не будет есть родители в выведенном css)См. Эту проблему Github для получения более подробной информации.
источник