Estoy escribiendo un mixin como este:
@mixin box-shadow($top, $left, $blur, $color, $inset:"") {
-webkit-box-shadow: $top $left $blur $color $inset;
-moz-box-shadow: $top $left $blur $color $inset;
box-shadow: $top $left $blur $color $inset;
}
Cuando se llama lo que realmente quiero es que si no $inset
se pasa ningún valor, no se genera nada, en lugar de compilarse en algo como esto:
-webkit-box-shadow: 2px 2px 5px #555555 "";
-moz-box-shadow: 2px 2px 5px #555555 "";
box-shadow: 2px 2px 5px #555555 "";
¿Cómo reescribo el mixin para que si no se pasa ningún valor $inset
, no se emite nada?
blank
ninil
valor.null
para omitir attr / prop.ie @include box-shadow($top, $left, $blur, $color, null)
Respuestas:
Una manera SECA de hacerlo
Y, en general, un buen truco para eliminar las comillas.
SASS Versión 3+, puede usar
unquote()
:Recogí esto aquí: pasar una lista a un mixin como argumento único con SASS
fuente
null
el valor predeterminado de los parámetros opcionales en lugar de""
, y no se mostrarán en la salida!@mixin box-shadow($top, $left,... , $inset:null) {}
Una forma SECA mucho mejor
es pasar
$args...
a la@mixin
. De esa manera, no importa cuántos$args
pases. En la@input
llamada, puede pasar todos los argumentos necesarios. Al igual que:Y ahora puede reutilizar su sombra de cuadro en cada clase que desee pasando todos los argumentos necesarios:
fuente
mixin
está a la espera, como$top
,$left
,$blur
, etc. argumentos variables, como usted ha demostrado, son ideales para la máxima flexibilidad, sin embargo.Sass apoya
@if
declaraciones. (Ver la documentación ).Podrías escribir tu mixin así:
fuente
inset
parte debe excluirse cuando es nula, no todas las propiedades de sombreado de cajaelse
e incluya todas las propiedades no insertadas en su interior.Puede colocar la propiedad con nulo como valor predeterminado y, si no pasa el parámetro, no se interpretará.
Esto significa que puede escribir la declaración de inclusión de esta manera.
En lugar de escribirlo así.
Como se muestra en la respuesta aquí
fuente
@include box-shadow($top, $left, $blur, $color);
lugar de@include box-shadow($top, $left, $blur, $color, null);
. Por lo tanto, esta respuesta es mucho más benéfica.Antigua pregunta, lo sé, pero creo que esto sigue siendo relevante. Podría decirse que una forma más clara de hacerlo es usar la función unquote () (que SASS ha tenido desde la versión 3.0.0):
Esto es más o menos equivalente a la respuesta de Josh, pero creo que la función explícitamente nombrada está menos ofuscada que la sintaxis de interpolación de cadenas.
fuente
Sé que no es exactamente la respuesta que estabas buscando, pero podrías pasar
"null"
como último argumento cuando@include box-shadow
mezclas, así@include box-shadow(12px, 14px, 2px, green, null);
Ahora, si ese argumento es solo uno en esa propiedad que esa propiedad (y su valor (predeterminado)) no se compilará . Si hay dos o más argumentos en esa "línea", solo los que anuló no se compilarán (su caso).La salida de CSS es exactamente como la quería, pero debe escribir su
null
s :)fuente
Aquí está la solución que uso, con las notas a continuación:
fuente
Con [email protected]:
y usar sin valor, el botón será azul
y con valor, el botón será rojo
también funciona con hexa
fuente
Incluso más seco!
Y ahora puedes reutilizar tu sombra de caja aún más inteligente:
fuente
fuente
Manera super simple
Simplemente agregue un valor predeterminado de
none
$ inset, así queAhora, cuando no se pasa $ inset, no se mostrará nada.
fuente
Siempre puede asignar nulo a sus argumentos opcionales. Aquí hay una solución simple
fuente
Soy nuevo en compiladores CSS, espero que esto ayude,
fuente