2011-10-07 10 views
19

Digamos que usted tiene un mixin de sombra como por ejemplo:¿Es posible sobrecargar las mezclas en sass?

@mixin box-shadow($offset, $blur, $color) 
{ 
    -moz-box-shadow: $offset $offset $blur $color; 
    -webkit-box-shadow: $offset $offset $blur $color; 
    box-shadow: $offset $offset $blur $color; 
} 

¿Es posible sobrecarga que mixin con algo como:

@mixin box-shadow($offset, $blur) 
{ 
    @include box-shadow($offset, $blur, #999); 
} 

O tengo que usar distintos nombres para los mixins?

+0

Solamente una punta, gestionar proveedor prefijos de sass es difícil, los navegadores web se actualizan continuamente y es difícil mantener nuestro código para que siga funcionando correctamente con cada actualización, por lo que recomiendo usar [autoprefixer] (http://stackoverflow.com/questions/20150621/sass-mixin-for- animation-keyframe-which-includes-multiple-stages-and-transform-p/20166008 # 20166008) –

Respuesta

20

No se puede sobrecargar, pero la práctica habitual sería establecer los valores predeterminados.

/* this would take color as an arg, or fall back to #999 on a 2 arg call */ 
@mixin box-shadow($offset, $blur, $color: #999) { 
    -webkit-box-shadow: $offset $offset $blur $color; 
    -moz-box-shadow: $offset $offset $blur $color; 
    box-shadow: $offset $offset $blur $color; 
} 
+0

Sweet ... pero eso es básicamente una sobrecarga :). –

+3

@Tomas Aunque funciona en su caso, eso no es realmente una sobrecarga: la sobrecarga le permitiría tener dos mixins separados con este 'border-radius ($ radius);' y 'border-radius ($ top-esquinas, $ bottom -corners) ' – Armstrongest

+4

Esto tampoco cuenta cuando la mezcla existente es parte de una librería de proveedores que no puede o no quiere modificar. –

2

Si necesita modificar un poco mixin proveedor puede copiarlo a otro archivo - incluida después de la original - y editarlo allí, y se ignorará original del proveedor.

@import "_their-mixins"; 
@import "_our-mixins"; 

Advertencia - esto puede depender de qué procesador que está utilizando. Al momento de escribir funciona muy bien usando grunt y grunt-contrib-compass

+1

Sí, gruñido lo hace - trago no – mate64

2

@ numbers1311407 solución es correcta, pero se puede usar la directiva @each para crear un mixin más corto:

@mixin box-shadow($offset, $blur, $color: #999) { 
    @each $prefix in -moz-, -webkit-, null { 
    #{$prefix}box-shadow: $offset $offset $blur $color; 
    } 
} 
Cuestiones relacionadas