La directiva @mixin te permite crear código CSS que se reutilizará en todo el sitio web. La directiva @include se crea para permitirte usar (incluir) el mixin.
Definiendo un Mixin
Un mixin se define con la directiva @mixin.
Su sintaxis es:
@mixin name {
property: value;
property: value;
...
}
El siguiente ejemplo crea un mixin llamado «important-text»:
@mixin important-text {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
}
Consejo: un consejo sobre guiones y guiones bajos en Sass: los guiones y los guiones bajos se consideran iguales. ¡Esto significa que @mixin important-text { } y @mixin important_text { } se consideran el mismo mixin!.
Usar un mixin
La directiva @include se usa para incluir un mixin.
Su sintaxis es la siguiente:
selector {
@include mixin-name;
}
Entonces, para incluir la combinación de texto importante creada anteriormente, la sintaxis sería
.danger {
@include important-text;
background-color: green;
}
El transpilador Sass convertirá lo anterior a CSS normal:
.danger {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
background-color: green;
}
Una mixin también puede incluir otras mixins:
@mixin special-text {
@include important-text;
@include link;
@include special-border;
}
Pasar variables a mixin
Los mixins aceptan argumentos. De esta manera puedes pasar variables a un mixin. Aquí se explica cómo definir un mixin con argumentos.
Ejm
@mixin bordered($color, $width) {
border: $width solid $color;
}
.myArticle {
@include bordered(blue, 1px); // Call mixin with two values
}
.myNotes {
@include bordered(red, 2px); // Call mixin with two values
}
Observa que los argumentos se establecen como variables y luego se usan como los valores (color y ancho) de la propiedad border.
Después de la compilación, el CSS se verá así:
.myArticle {
border: 1px solid blue;
}
.myNotes {
border: 2px solid red;
}
Valores por defecto para un Mixin
También es posible definir valores predeterminados para Mixin:
@mixin bordered($color: blue, $width: 1px) {
border: $width solid $color;
}
Luego, solo necesitas especificar los valores que cambian cuando incluye el mixin:
.myTips {
@include bordered($color: orange);
}
Uso de un Mixin para prefijos de proveedores
Otro buen uso de un mixin es para prefijos de proveedores. Aquí hay un ejemplo para transformar:
@mixin transform($property) {
-webkit-transform: $property;
-ms-transform: $property;
transform: $property;
}
.myBox {
@include transform(rotate(20deg));
}
Después de la compilación, el CSS se verá así:
.myBox {
-webkit-transform: rotate(20deg);
-ms-transform: rotate(20deg);
transform: rotate(20deg);
}