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 {
  propertyvalue;
  propertyvalue;
  ...
}

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

/* Define mixin with two arguments */
@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);
}