Sass фоновое изображение mixin
Я вроде как новичок в Sass, но я пытаюсь создать рабочий процесс для себя. Я создаю "цветные пакеты" для своих проектов тем и должен указать следующие переменные для моего mixin. Есть ли лучший способ сделать это?:
// folder,filename,extension,repeat,x-pos,y-pos
@mixin background ($folder:style1, $img:file, $type:png, $repeat:no-repeat, $x:0, $y:0) {
background-image: url(./images/#{$folder}/#{$img}.#{$type});
background-repeat: #{$repeat};
background-position: #{$x}px #{$y}px;
}
я вставляю так:
#nav {
@include background(style2,myimage,png,repeat-x,10,10);
}
, который дает этот:
#nav {
background-image: url(./images/style2/myimage.png);
background-repeat: repeat-x;
background-position: 10px 10px;
}
Я бы предпочел использовать стенографию CSS, когда это возможно, но я столкнулся с ошибками с выходом. Я был бы признателен за любой экспертный совет, если это не лучший способ сделать его.
3 ответов
в зависимости от того, как структурированы/применены ваши пакеты, вы можете использовать цикл для создания группы общих стилей. См. документацию здесь:http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#id35
вам действительно нужны 3 отдельных компонента, чтобы получить url-адрес изображения? не: $img
а затем установить это в /folder/img.ext
быть гораздо проще?
кроме того, вам не нужно #{}
для повторения, кстати.
Я надеюсь, что это то, что вы ищете... вопрос не очень конкретный с точки зрения того, что вам нужно, чтобы результат был на самом деле.
Ура, Игры jannis
обновление:
ладно, я вижу вы обновили свой вопрос (Спасибо за это). Я считаю, что это может быть немного лучше для общего пользования:
@mixin background($imgpath,$position:0 0,$repeat: no-repeat) {
background: {
image: url($imgpath);
position: $position;
repeat: $repeat;
}
}
.testing {
@include background('/my/img/path.png');
}
это будет выводить:
.testing {
background-image: url("/my/img/path.png");
background-position: 0 0;
background-repeat: no-repeat;
}
или вы можете использовать сокращенную версию:
@mixin backgroundShorthand($imgpath,$position:0 0,$repeat: no-repeat) {
background: transparent url(#{$imgpath}) $repeat $position;
}
.testing2 {
@include backgroundShorthand('/my/img/path.png');
}
что будет создать:
.testing2 {
background: transparent url(/my/img/path.png) no-repeat 0 0;
}
и наконец если вы хотите указать базовый путь к каталогу изображений отдельно вы можете сделать следующее:
$imagedir:'/static/images/'; // define the base path before the mixin
@mixin backgroundShorthandWithExternalVar($filename,$position:0 0,$repeat: no-repeat) {
background: transparent url(#{$imagedir}#{$filename}) $repeat $position;
}
.testing3 {
@include backgroundShorthandWithExternalVar('filename.png');
}
это будет генерировать:
.testing3 {
background: transparent url(/static/images/filename.png) no-repeat 0 0;
}
это то, что вам нужно?
если не чувствуйте свободным уточнить вопрос или ответить/комментарий.
другой пример:
путь к образу:
$path--rel : "../images";
цвета
$black: #000000;
создание mixin:
@mixin background-image($img, $background-position, $background-color) {
background-image: url('#{$path--rel}/#{$img}');
background-repeat: no-repeat;
background-position: $background-position;
background-color: $background-color ;
}
С помощью смешивания:
.navbar-inverse {
@include background-image("header.png", right, $black);
}
результат:
.navbar-inverse {
background-image: url("../images/header.png");
background-repeat: no-repeat;
background-position: right;
background-color: #000000;
}
возьмите один $var, и это облегчит вам задачу.
$list: pranav shah
=author-images
@each $author in $list
.photo-#{$author}
background: image-url("avatars/#{$author}.png") no-repeat
.author-bio
+author-images
в CSS
.author-bio .photo-adam {
background: url('/images/avatars/adam.png') no-repeat;
}
.author-bio .photo-john {
background: url('/images/avatars/john.png') no-repeat;
}
.author-bio .photo-wynn {
background: url('/images/avatars/wynn.png') no-repeat;
}
.author-bio .photo-mason {
background: url('/images/avatars/mason.png') no-repeat;
}
.author-bio .photo-kuroir {
background: url('/images/avatars/kuroir.png') no-repeat;
}