指南针:生成精灵图像的语法,在父项上具有特定状态(:hover,.class)

时间:2011-08-27 14:24:39

标签: css css-sprites compass-sass sass

我想使用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个。


对我来说不是那么容易...感谢您的帮助。

2 个答案:

答案 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"