我想使用SASS& Compass生成一些特定的精灵。
这是我的代码,没有Compass / Sprite:
.ico-account-contact-informations {
width:60px; height:40px; background:url(/images/ico-account/contact-informations.png);
a[href]:hover &, .fn-active & {background:url(/images/ico-account/contact-informations_active.png);}
}
.ico-account-credit-cards {
width:60px; height:40px; background:url(/images/ico-account/credit-cards.png);
a[href]:hover &, .fn-active & {background:url(/images/ico-account/credit-cards-active_active.png);}
}
我需要与精灵图像相同的结构。 我阅读了sprite教程的“magical part”,但是我找不到正确的语法来完成我需要的工作。
例如,我尝试过:
$ico-account-sprite-dimensions: true;
@include all-ico-account-sprites();
a {@include all-ico-account-sprites();}
但有了这个,状态:悬停在“img”上,而不在“a”上。
我也试过了:
$ico-account-sprite-dimensions: true;
@import "ico-account/*_hover.png";
a[href]:hover {@include all-ico-account-sprites(true);}
@import "ico-account/*.png";
@include all-ico-account-sprites(true);
现在它生成了css类名的多个变体,但不是:
a[href]:hover .ico-account-credit-cards {...}
有2个精灵而不是1个。
对我来说不是那么容易...感谢您的帮助。
答案 0 :(得分:2)
我终于找到了解决方案。 对于我们需要支持活动(或:悬停)状态的所有图像,可以根据具体情况进行:
/* Mixin */
@mixin link-bg-sprite($map, $img, $img-active: $img + '_active') {
.#{sprite-map-name($map)}-#{$img} {
background: sprite($map, $img) no-repeat;
width: image-width(unquote("/" + sprite-map-name($map) + "/" + $img + ".png"));
height: image-height(unquote("/" + sprite-map-name($map) + "/" + $img + ".png"));
a[href]:hover &, .fn-state-active & {
background: sprite($map, $img-active) no-repeat;
}
}
}
/* Account Icons */
$map: sprite-map("ico-account/*.png");
@include link-bg-sprite($map, contact-informations);
@include link-bg-sprite($map, credit-cards);
答案 1 :(得分:2)
指南针及其精灵中有很多魔法。
您不必添加任何mixins或代码,以在Compass中添加Sprite的状态。 您可以通过以正确的方式命名它们来为精灵添加状态:
icons/myfirstsprite.png <- the path to a sprite
icons/myfirstsprite_hover.png <- this image will automatically generate
a css hover state for "myfirstsprite.png"