2010-11-10 20 views
1

Ce que je veux faire est de créer un mixin qui prend des arguments et utilise un ou plusieurs des arguments comme noms pour d'autres mixins à inclure.sont des noms mixin variables dans moins possible?

que je ne suis pas sûr au sujet des termes appropriés, je vais essayer d'expliquer par l'exemple:

@gradients{ 
    light:#fafafa; //Should these also be prefixed with @? 
    dark:#888888; 
} 
@gradientBackground(@name,@height){ 
    background-image:url('../img/gradients/{@name}-{@height}.png'); //this works 
    background-color:@gradients[@name]; 
} 

.someBox{ 
    @gradientBackground(light;150); 
} 

//Expected result: 
.someBox{ 
    background-image:url('../img/gradients/light-150.png'); //This works 
    background-color:#fafafa; //This doesn't work. 
} 

Les travaux d'image mais je ne l'ai pas encore compris comment référencer la couleur appropriée de @gradients . Est-ce possible?

+0

Vous ne pouvez pas utiliser @dark_gradient et @light_gradient à la place? –

+0

Je pourrais et à la fin fait, mais je cherchais une solution plus élégante. Je pourrais le comparer à des tableaux en PHP ou n'importe quelle autre langue. Si vous avez beaucoup de couleurs à stocker, préférez-vous avoir un seul tableau qui peut être facilement accessible en tant que groupe et est propre dans le code ou une variable différente pour chaque couleur? :) – jpeltoniemi

Répondre

2

Je ne pense pas que vous ayez besoin de la variable @gradients du tout. Définissez simplement vos variables:

@light:#fafafa; 
@dark:#888888; 

Votre mixin ne doit pas commencer par @, qui définit une variable. Un mixin est fondamentalement juste une classe.

.gradientBackground(@name:@dark, @height:500){ 
    background-image:url('../img/gradients/{@name}-{@height}.png'); 
    background-color:@name; 
} 

À titre d'exemple, je définir les attributs pour le mixin être la couleur de @dark et 500 pour la hauteur.

Ensuite, lorsque vous voulez utiliser votre mixin dans une autre définition, il serait comme si:

.somebox { 
    .gradientBackground(@light, 150); 
} 

Donc, au point ont été vous utilisez le mixin vous pouvez conserver les valeurs par défaut ou passer de nouvelles (c'est-à-dire: @light & 150)

Espérons que ça aide!

+0

Voilà comment j'ai finalement décidé de faire. J'ai demandé, parce que la documentation LessPhp (http://bit.ly/8kBTyS) est un peu floue et à ce moment-là il n'y avait pas de meilleurs exemples. Cela ressemblait plus à un type de question 'je peux faire ça' :) Mon but principal était de rendre le code plus propre en ayant des couleurs et des variables liées aux thèmes dans leurs propres groupes de mixage afin qu'ils puissent être consultés noms, mais je suppose que c'est impossible après tout. – jpeltoniemi