2011-08-13 10 views
31

Używam Compass (struktura CSS) do generowania obrazów sprite. Działa, ale kompas generuje tylko położenie w tle dla każdego obrazu.Kompas: generowanie Sprites, a także szerokość/wysokość na każdym obrazku w ikonce

Czy można uzyskać szerokość i wysokość każdego obrazu w ikonce?

To jest mój kod:

@import "ico/*.png"; 
@include all-ico-sprites; 

Wygenerowany kod:

.ico-sprite, .ico-bag-blue, .ico-bag-black { 
    background: url('../images/ico-s78b1a1919b.png') no-repeat; 
} 

.ico-bag-blue { 
    background-position: 0 0; 
} 

.ico-bag-black { 
    background-position: 0 -24px; 
} 

I kod chciałbym posiadać:

.ico-sprite, .ico-bag-blue, .ico-bag-black { 
    background: url('../images/ico-s78b1a1919b.png') no-repeat; 
} 

.ico-bag-blue { 
    background-position: 0 0; 
    width:40px; 
    height:24px; 
} 

.ico-bag-black { 
    background-position: 0 -24px; 
    width:44px; 
    height:30px; 
} 

Czy ktoś może mi wyjaśnić, w jaki sposób mogę to zrobić? Dzięki.

Odpowiedz

74

to działa:

@include all-<map>-sprites(true); 

Ale może warto rozważyć udokumentowany sposób za pomocą zmiennych konfiguracyjnych:
http://compass-style.org/help/tutorials/spriting/

Wystarczy określić zmienną config przed importem. W twoim przypadku:

$ico-sprite-dimensions: true; 
@import "ico/*png". 
@include all-ico-sprites; 

Wysyłanie true do wszystkich to działa, ale jak to nieudokumentowane, wydaje się, że zmienne konfiguracyjne są preferowaną metodą.

Oprócz wymiarów są inne zmienne konfiguracyjne dostępne:

$<map>-spacing   // space in px around the sprites 
$<map>-repeat   // whether to repeat the sprite bg 
$<map>-position   // the x position of the sprite on the map 
$<map>-sprite-base-class // the base class (default ".<map>-sprite") 
$<map>-clean-up   // whether to delete old image maps 
$<map>-<sprite>-spacing // spacing, for individual sprites 
$<map>-<sprite>-repeat // repeat, for individual sprites 
$<map>-<sprite>-position // position, for individual sprites 
+0

Dziękujemy za wyjaśnienia. Teraz jest to bardziej jasne. – Etienne

+0

Człowieku, uratowałeś mój dzień! – dgilperez

+0

Bez względu na to, co przekażę klasie bazowej, zawsze generuje błąd. Ta opcja konfiguracji wydaje się być uszkodzona w tych dniach. – Drew

7

Znalazłem rozwiązanie. Po prostu podaj true jako drugi argument:

@include all-ico-sprites(true); 

Po prostu.

+0

@ Etienne- To działa. Dzięki –