Sass не будет компилироваться при использовании Libsass (аргумент не должен быть пустым)
Поэтому я использую довольно сложный Sass, чтобы удалить все остальные селекторы из "&"
.test, .test-2, .test-3, .test-4 {
$selectors: (&);
@if length(&) != 1 {
$selectors: (); // Works only with Ruby Sass
$i: 1;
@each $item in (&) {
$i: $i + 1;
@if $i % 2 == 0 {
$i: 0;
}@else{
$selectors: append($selectors, $item);
}
}
$selectors: to-string($selectors, ", ");
content: "#{$selectors}";
}
}
Мой ожидаемый результат для атрибута содержимого:
content: ".test-2, .test-4";
При использовании Ruby Sass это именно то, что я получаю. При использовании Libsass я получаю эту ошибку:
argument `$list` of `nth($list, $n)` must not be empty
Эта ошибка относится к коду внутри пользовательской функции "to-string", которую я использую:
@function to-string($list, $glue: '', $is-nested: false, $recursive: false) {
$result: null;
@for $i from 1 through length($list) {
$e: nth($list, $i);
@if type-of($e) == list and $recursive {
$result: $result#{to-string($e, $glue, true)};
}
@else {
$result: if(
$i != length($list) or $is-nested,
$result#{$e}#{$glue}, $result#{$e}
);
}
}
@return $result;
}
Более конкретно, эта строка:
$e: nth($list, $i);
Похоже, что значение, которое я передаю to-string
функция (которая является $selectors
переменная) пуста, когда этого не должно быть. Я изначально определяю как пустой ($selectors: ();
), но затем я добавляю все остальные элементы из &
, Так что я не уверен, почему он пуст в данный момент.
Вот Sassmesiter, демонстрирующий проблему: http://sassmeister.com/gist/332dae9a27983edd9d15
Измените компилятор в вышеприведенной демонстрации на Libsass, чтобы увидеть ошибку.
Я не уверен, если это проблема с моим кодом или с Libsass. Я не хочу открывать вопрос о Libsass, если я точно не знаю, что это проблема Libsass.
Спасибо
1 ответ
Хорошо, я докопался до этого. Совершенно уверен, что это проблема Libsass.
Похоже, вы не можете пройти через каждый элемент в &
напрямую, но если я храню &
в переменной он продолжает работать.
Итак, чтобы уточнить, изменив это:
@each $item in & {
...
}
к этому:
$this: &;
@each $item in $this {
...
}
Решает проблему.