Holi, soy Nuzkito

y me dedico al desarrollo de software

Nib, una librería de mixins para Stylus

En el primer artículo de este tutorial explicamos cómo usar Nib en Stylus. Ahora nos centraremos en para qué sirve y cómo utilizar algunas de sus funciones.

¿Para qué sirve Nib?

Nib se conoce como un plugin de Stylus que sirve para agregar los prefijos propietarios necesarios para todos los navegadores. Sin embargo, Nib también da soporte a versiones antiguas de las especificaciones de CSS - como ocurre con linear-gradient o flexbox model -. E incluso ofrece algunos pollyfils y generadores.

¿Cómo hago para instalar Nib?

Lo primero que hay que hacer es instalar Nib en el equipo. Se hace con este comando:

npm install nib

Ahora, cuando ejecutemos Stylus, debemos indicarle que queremos usar Nib:

stylus estilos.styl --use nib

Y por último, hacer un import a Nib en nuestro archivo de Stylus:

@import 'nib'

Nib nos permite usar una una o varias funciones, en lugar de usar la funcionalidad completa. Si solo queremos generar los gradientes con Nib, podemos importarlos por separado:

@import 'nib/gradients'

Revisa el código fuente de Nib para saber qué otras funcionalidades puedes importar.

Usando Nib

Nib hace todo de forma transparente, al igual que los mixins que podemos crear nosotros.

.gradiente
  background-image linear-gradient(to right, red, blue 80%)

Este código generará lo siguiente:

.gradiente {
  background-image: -webkit-linear-gradient(left, #f00, #00f 80%);
  background-image: -moz-linear-gradient(left, #f00, #00f 80%);
  background-image: -o-linear-gradient(left, #f00, #00f 80%);
  background-image: -ms-linear-gradient(left, #f00, #00f 80%);
  background-image: linear-gradient(to right, #f00, #00f 80%);
}

Como veis, tan solo hay que escribir el CSS tal y como lo haríamos si no necesitase los prefijos. Nib se encargará de incluirlos por nosotros.

En el caso de que usemos flexbox model generará lo siguiente:

.flex {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
}

En este caso Nib genera el código para la versión antigua de la especificación de flexbox, que es la que soportan IE10 y versiones anteriores de Android. Gracias a ello podemos usar flexbox casi sin problemas a día de hoy.

Pero Nib también nos ofrece alguna otra utilidad interesante.

Posicionamiento

Nib incluye algunos mixins personalizados para el posicionamiento de cajas.

.absolute
  absolute(top 10px left 20px)

Este mixins genera lo siguiente:

.absolute {
  position: absolute;
  top: 10px;
  left: 20px;
}

Es decir, nos genera las propiedades position y top/right/bottom/left. Se puede hacer lo mismo con otros valores de position como fixed o relative.

.menu-fijo
  fixed(top 0 right 0)

Aunque los paréntesis son opcionales, recomiendo usarlos en este caso, pues estas no son propiedades existentes en CSS y puede provocar confusión. Usando los paréntesis sabemos en todo momento que son un mixin.

Imágenes responsive

Nib también tiene un mixin para ayudar a generar el CSS para backgrounds con imágenes responsive. Para ello se usa image():

.background-responsive
  image('images/background.jpg')

que nos devuelve el código compatible con todos los navegadores:

.background-responsive {
  background-image: url("images/background.jpg");
}
@media all and (-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 1.5/1), (min-device-pixel-ratio: 1.5), (min-resolution: 138dpi), (min-resolution: 1.5dppx) {
  .background-responsive {
    background-image: url("images/background@2x.jpg");
    -webkit-background-size: auto auto;
    -moz-background-size: auto auto;
    background-size: auto auto;
  }
}

Aplicar prefijos usando las funciones nativas

Nib tiene diversas funciones para realizar todas las operaciones necesarias que podemos utilizar en caso necesario. Por defecto, Nib no aplica prefijo a la función calc. En caso de que lo necesitemos podemos usar la función vendor-value de la siguiente forma:

.menu-lateral
  height vendor-value(calc(100vh - 2em), webkit)

devolviendo el siguiente CSS:

.menu-lateral {
  height: -webkit-calc(100vh - 2em);
  height: calc(100vh - 2em);
}

E igualmente tenemos vendor para hacer lo mismo con las propiedades:

.class
  vendor('propiedad', valor, webkit moz official)

Puedes ver otras funciones de Nib revisando su código. Además, también podrás comprobar cómo configurar algunas de sus funciones. Por ejemplo, si quieres usar display flex pero solo la última versión de la especificación, puedes definir una variable que diga

flex-version = flex

y ahora el código generado será el siguiente:

.flex {
  display: -webkit-flex;
  display: flex;
}