Mixin para gestionar los puntos de interrupción | Programar Plus

Las creaciones de diseño web receptivo a menudo existen en varios puntos de interrupción diferentes. Gestionar esos puntos críticos no siempre es fácil. Usarlos y actualizarlos a veces puede resultar tedioso. De ahí la necesidad de un mixin para manejar la configuración y el uso de los puntos de interrupción.

Versión simple

Primero necesita un mapa de puntos de interrupción, asociados a nombres.

$breakpoints: (
  'small':  767px,
  'medium': 992px,
  'large':  1200px
) !default;

Entonces, el mixin usará este mapa.

/// Mixin to manage responsive breakpoints
/// @author Kitty Giraudel
/// @param {String} $breakpoint - Breakpoint name
/// @require $breakpoints
@mixin respond-to($breakpoint) {
  // If the key exists in the map
  @if map-has-key($breakpoints, $breakpoint) {
    // Prints a media query based on the value
    @media (min-width: map-get($breakpoints, $breakpoint)) {
      @content;
    }
  }
 
  // If the key doesn't exist in the map
  @else {
    @warn "Unfortunately, no value could be retrieved from `#{$breakpoint}`. "
        + "Available breakpoints are: #{map-keys($breakpoints)}.";
  }
}

Uso:

.selector {
  color: red;
  
  @include respond-to('small') {
    color: blue;
  }
}

Resultado:

.selector {
  color: red;
}
@media (min-width: 767px) {
  .selector {
    color: blue;
  }
}

Versión avanzada

La versión simple solo permite usar min-width preguntas de los medios. Para utilizar consultas más avanzadas, podemos modificar nuestro mapa inicial y mezclar un poco.

$breakpoints: (
  'small':  ( min-width:  767px ),
  'medium': ( min-width:  992px ),
  'large':  ( min-width: 1200px )
) !default;
/// Mixin to manage responsive breakpoints
/// @author Kitty Giraudel
/// @param {String} $breakpoint - Breakpoint name
/// @require $breakpoints
@mixin respond-to($breakpoint) {
  // If the key exists in the map
  @if map-has-key($breakpoints, $breakpoint) {
    // Prints a media query based on the value
    @media #{inspect(map-get($breakpoints, $breakpoint))} {
      @content;
    }
  }
 
  // If the key doesn't exist in the map
  @else {
    @warn "Unfortunately, no value could be retrieved from `#{$breakpoint}`. "
        + "Available breakpoints are: #{map-keys($breakpoints)}.";
  }
}

Uso

.selector {
  color: red;
  
  @include respond-to('small') {
    color: blue;
  }
}

Resultado

.selector {
  color: red;
}
@media (min-width: 767px) {
  .selector {
    color: blue;
  }
}
(Visited 3 times, 1 visits today)