按照关于魔法维度函数的Spriting with Compass页面说明,我正在尝试使用类似的东西设置每个精灵的大小:
.top-bar-section {
ul {
& > li {
// Generate the sprite map.
$menu_icons-sprite-map: sprite-map("menu_icons/*.png", $layout: smart);
// Set the background image.
& > a:before {
background: sprite-url($menu_icons-sprite-map) 0 0 no-repeat;
display: inline-block;
content: "";
@include background-size(cover);
}
// Set the background position for each sprite.
$menu_icons-sprite-names: sprite-names($menu_icons-sprite-map);
@each $name in $menu_icons-sprite-names {
&.menu_icons-#{$name} > a:before {
background-position: sprite-position($menu_icons-sprite-map, $name);
$height: menu_icons-sprite-height($name);
$width: menu_icons-sprite-width($name);
height: $height;
width: $width;
}
}
}
}
然而,生成的CSS看起来像:
...
.top-bar .top-bar-section ul > li.menu_icons-omino_001 > a:before {
background-position: 0 0;
height: menu_icons-sprite-height(omino_001);
width: menu_icons-sprite-width(omino_001);
}
.top-bar .top-bar-section ul > li.menu_icons-omino_002 > a:before {
background-position: 0 -64px;
height: menu_icons-sprite-height(omino_002);
width: menu_icons-sprite-width(omino_002);
}
...
似乎神奇的功能不是由指南针创造的:我错过了什么吗?
答案 0 :(得分:2)
使用sprite-map
生成精灵时,未定义魔术函数。
幸运的是,Compass为此目的定义了sprite-dimensions mixin:
@mixin sprite-dimensions($map, $sprite) {
height: image-height(sprite-file($map, $sprite));
width: image-width(sprite-file($map, $sprite));
}
在您的SCSS中,您可以简单地包含此mixin以设置正确的尺寸:
&.menu_icons-#{$name} > a:before {
background-position: sprite-position($menu_icons-sprite-map, $name);
@include sprite-dimensions($menu_icons-sprite-map, $name);
}
如果您需要单独使用高度或宽度的值,请使用与mixin相同的函数调用:
$height: image-height(sprite-file($menu_icons-sprite-map, $name));
$width: image-width(sprite-file($menu_icons-sprite-map, $name));