Mixins Sass recomendados - Parte I

sass-mixins.jpg
Solucionex
03
Ago 18

Buenas a tod@s.

Es esta ocasión comenzamos un serie de posts en los que iremos recomendando algunos de los mixins de SASS que consideramos interesantes y que nosotros mismos utilizamos en algunos de nuestros proyectos.

Para comenzar con la serie, recomendamos un mixin para escribir reglas @font-face en SASS y que podéis encontrar aquí.

El código del mixins es el siguiente:


    // =============================================================================
    // String Replace
    // =============================================================================
    @function str-replace($string, $search, $replace: "") {
        $index: str-index($string, $search);
        @if $index {
            @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
        }
        @return $string;
    }
    // =============================================================================
    // Font Face
    // =============================================================================
    @mixin font-face($name, $path, $weight: null, $style: null, $exts: eot woff2 woff ttf svg) {
        $src: null;
        $extmods: ( eot: "?", svg: "#" + str-replace($name, " ", "_") );
        $formats: ( otf: "opentype", ttf: "truetype" );
        @each $ext in $exts {
            $extmod: if(map-has-key($extmods, $ext), $ext + map-get($extmods, $ext), $ext);
            $format: if(map-has-key($formats, $ext), map-get($formats, $ext), $ext);
            $src: append($src, url(quote($path + "." + $extmod)) format(quote($format)), comma);
        }
        @font-face {
            font-family: quote($name);
            font-style: $style;
            font-weight: $weight;
            src: $src;
        }
    }

Su uso es muy sencillo, nos vale con hacer el siguiente include: @include font-face(Samplino, fonts/Samplino);

Todos los formatos OpenType, WOFF2, WOFF, TrueType y SVG son añadidos automáticamente, generándose el css siguiente:


    @font-face {
        font-family: "Samplino";
        src: url("fonts/Samplino.eot?") format("eot"),
             url("fonts/Samplino.woff2") format("woff2"),
             url("fonts/Samplino.woff") format("woff"),
             url("fonts/Samplino.ttf") format("truetype"),
             url("fonts/Samplino.svg#Samplino") format("svg");
    }

Pero, además, nos permite otras opciones como, por ejemplo:

  • Una regla que aplica a textos en negrita y cursiva simplemente de la siguiente manera:

    @include font-face("Samplina Neue", fonts/SamplinaNeue, bold, italic);
  • Una regla que solo aplica a formato WOFF, con:

    @include font-face(Samplinoff, fonts/Samplinoff, null, null, woff);
  • O una regla que, por ejemplo, solo aplica a textos con font-weight 500 y formatos EOT, WOFF2, y WOFF, con:

    @include font-face(Samplinal, fonts/Samplinal, 500, normal, eot woff2 woff);

Os animamos a que lo probéis y saquéis vuestras propias conclusiones, y si os ayuda en algo mucho mejor.