我对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简写,但我遇到输出错误。如果这不是最好的方法,我会感谢任何专家建议。
答案 0 :(得分:30)
取决于您的包的结构/应用方式,您可以使用循环生成一堆通用样式。请参阅此处的文档:http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#id35
您真的需要3个独立的组件来获取图片网址吗?不会:$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;
}
这是你需要的吗?
如果没有随时更新问题或回复/评论。
答案 1 :(得分:4)
其他一些样本:
图片的路径:
$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;
}
答案 2 :(得分:2)
拿一个$ 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;
}