У меня около 196 изображений флагов страны, и каждое изображение названо в честь двухбуквенного кода страны. Я создал спрайт со всеми этими изображениями, используя пакет gulp.spritesmith npm. Он также создает файл css (в моем случае, файл scss), чтобы ссылаться на них в нашем проекте.
Для простоты следующий сгенерированный код является результатом двух изображений.
/*generated code*/
$ad-name: 'ad';
$ad-x: 0px;
$ad-y: 14px;
$ad-offset-x: 0px;
$ad-offset-y: -14px;
$ad-width: 19px;
$ad-height: 14px;
$ad-total-width: 19px;
$ad-total-height: 1932px;
$ad-image: 'locate-sprite.png';
$ad: (0px, 14px, 0px, -14px, 19px, 14px, 19px, 1932px, 'locate-sprite.png', 'ad',);
$ae-name: 'ae';
$ae-x: 0px;
$ae-y: 966px;
$ae-offset-x: 0px;
$ae-offset-y: -966px;
$ae-width: 19px;
$ae-height: 14px;
$ae-total-width: 19px;
$ae-total-height: 1932px;
$ae-image: 'locate-sprite.png';
$ae: (0px, 966px, 0px, -966px, 19px, 14px, 19px, 1932px, 'locate-sprite.png', 'ae',);
$spritesheet-sprites: ($ad, $ae,);
$spritesheet: (19px, 1932px, 'locate-sprite.png', $spritesheet-sprites,);
@mixin sprite-width($sprite) {
width: nth($sprite, 5);
}
@mixin sprite-height($sprite) {
height: nth($sprite, 6);
}
@mixin sprite-position($sprite) {
$sprite-offset-x: nth($sprite, 3);
$sprite-offset-y: nth($sprite, 4);
background-position: $sprite-offset-x $sprite-offset-y;
}
@mixin sprite-image($sprite) {
$sprite-image: nth($sprite, 9);
background-image: url(#{$sprite-image});
}
@mixin sprite($sprite) {
@include sprite-image($sprite);
@include sprite-position($sprite);
@include sprite-width($sprite);
@include sprite-height($sprite);
}
В моем проекте я создал mixin, который переопределяет вышеупомянутый сметный микс. Это выглядит следующим образом:
@mixin blah($sprite){
&:before{
display: inline-block;
content: "\00a0";
position: relative;
vertical-align: middle;
top: -2px;
@include sprite-image($sprite);
@include sprite-position($sprite);
@include sprite-width($sprite);
@include sprite-height($sprite);
}
}
Когда я использую этот подмешать в моем проекте, я просто импортировать файл SCSS сгенерированный и включить этот подмешать. Ниже приводится реализация:
@import "_gen.sprite";
$country-list: ad ae;
@each $current-country in $country-list {
.imageflag-#{$current-country}{
@include blah($ad); // This works
@include blah($current-country); //This doesn't because, a string is passed instead of a variable.
margin-right: 10px;
}
}
Но, в такой реализации, я хочу передать данные значения списка (объявления и ая) в качестве переменных (то есть, $ объявления и $ ае) во время каждого цикла.
Вы можете сказать, почему вы не можете просто список стран, как следующее:
$country-list: $ad $ae;
Я не могу это сделать, потому что, $ Объявление и $ аи значения уже генерируются с помощью плагина в scss-файл и эквивалентны значению, которое не может быть передано в mixin, поскольку оно снова вызовет ошибку. Ожидание переменной, а не строки.
Итак, я подумал об использовании интерполяции. Итак, я сделал следующее:
$dollar: '$';
$country-list: ad ae;
@each $current-country in $country-list {
.imageflag-#{$current-country}{
@include blah(#{$dollar}#{$current-country}); //expected $ad and $ae but throws an error.
margin-right: 10px;
}
}
Но интерполяция не работает на доллар. Я не могу добавить доллар к строковой переменной.
Итак, есть ли другой способ интерполяции или добавления символа доллара к переменной или строке для достижения требуемого результата.
Любые отзывы или предложения приветствуются.
спасибо.
Можете ли вы предоставить codepen (/ jsfiddle/что-у-вы) минимального воспроизводимого случае? – Andrew
@Andrew Вот суть sassmeister http://www.sassmeister.com/gist/d907c9046779acf8510ef3103af86992 – ShellZero
В конце дня мой вопрос просто «как добавить« $ »к переменной». Если я это получу, в основном это все решает. – ShellZero