npm package: @guajiritos/layouts
Description: `Guajiritos Layouts` es una librería para Angular que proporciona de una forma amigable el trabajo con las propiedades flex de css, además incluye una serie de clases para un mejor aprovechamiento de nuestros estilos.
Author: Guajiritos SRL
Latest version: 20.0.1

# Guajiritos Layouts

`Guajiritos Layouts` es una librería para Angular que proporciona de una forma amigable el trabajo con las propiedades flex de css, además incluye una serie de clases para un mejor aprovechamiento de nuestros estilos.

## Instalación

Con `npm`

```sh
npm i @guajiritos/layouts --save
```

Con `yarn`

```sh
yarn add @guajiritos/layouts
```

Importar la dependencia en tu proyecto

`styles.scss`

```scss
...
@import "@guajiritos/layouts/layouts";
...
```
    
O puedes agregarlo directamente en la sección de `assets` del archivo `angular.json`

```json
"styles": [
  "./node_modules/@guajiritos/layouts/layouts.scss"
]
```

Importar `../layouts` realiza la importación de todos los módulos de la librería, si solo necesitas un módulo puedes importar solamente el módulo necesario.

```text
layouts     - Todos los módulos de la librería
flex        - Módulo de utilidades para el trabajo con flex
colors      - Módulo de utilidades para el trabajo con colores ("color", "background-color", "border-color")
positions   - Módulo de utilidades para el trabajo con el posicionamiento
cursors     - Módulo de utilidades para el trabajo la propiedad "cursor"
fonts-utils - Módulo de utilidades para el trabajo con las propiedades "font-size" y "font-weight"
utils       - Módulo de utilidades generales (tamaños, espaciados e incluye la propiedad "cursor-pointer")
```
Ejemplo de uso para importar solo los módulos `Flex` y `Utils`

```scss
...
@import "@guajiritos/layouts/flex";
@import "@guajiritos/layouts/utils";
...
```

## Breakpoints

```text
xs - Dispositivos hasta 576 píxeles de pantalla
sm - Dispositivos hasta 768 píxeles de pantalla
md - Dispositivos hasta 992 píxeles de pantalla
lg - Dispositivos hasta 1200 píxeles de pantalla
xl - Dispositivos hasta 1400 píxeles de pantalla
Para dispositivos de mayor resolución no es necesario usar breakpoint
```

Para el trabajo responsive es necesario conocer los `breakpoints` definidos. Por regla general primero usamos el `prefijo` requerido, luego de forma opcional el `breakpoint` y por último el `valor` que queremos adicionar `{prefijo}-{breakpoint}-{valor}`.

```html
<div class="d-flex flex-column flex-xs-row">
  Tenemos una caja con visualización en columna para todas las resoluciones excepto para las resoluciones de hasta "576px" en las cuales se visualizará en fila.
</div>
```

## Usos

A continuación se listan todas las propiedades de esta librería

### Posiciones

La propiedad position especifica el tipo de método de posicionamiento utilizado para un elemento, se puede modificar usando el prefijo "position-" seguido de uno de los posibles valores. Existen 5 diferentes valores:

```text
"static"   - Un elemento con "position: static" no está posicionado de ninguna manera especial; siempre se coloca de acuerdo con el flujo normal de la página.
"relative" - Un elemento con "position: relative" se coloca en relación con su posición normal.
"fixed"    - Un elemento con "position: fixed" se coloca en relación con la ventana gráfica, lo que significa que siempre permanece en el mismo lugar, incluso si se desplaza la página. Las propiedades superior, derecha, inferior e izquierda se utilizan para colocar el elemento.
"absolute" - Un elemento con "position: absolute" se coloca en relación con el ancestro posicionado más cercano (en lugar de posicionarse en relación con la ventana gráfica, como fijo).
"sticky"   - Un elemento con "position: sticky" se posiciona en función de la posición de desplazamiento del usuario.
```

```html

<div class="position-relative">
    <span class="position-absolute">Posicionado absoluto</span>
</div>
```

```text
"static"   - Un elemento con "position: static" no está posicionado de ninguna manera especial; siempre se coloca de acuerdo con el flujo normal de la página.
"relative" - Un elemento con "position: relative" se coloca en relación con su posición normal.
"fixed"    - Un elemento con "position: fixed" se coloca en relación con la ventana gráfica, lo que significa que siempre permanece en el mismo lugar, incluso si se desplaza la página. Las propiedades superior, derecha, inferior e izquierda se utilizan para colocar el elemento.
"absolute" - Un elemento con "position: absolute" se coloca en relación con el ancestro posicionado más cercano (en lugar de posicionarse en relación con la ventana gráfica, como fijo).
"sticky"   - Un elemento con "position: sticky" se posiciona en función de la posición de desplazamiento del usuario.
```

Posibles valores

```css
.position-static
.position-xs-static
.position-sm-static
.position-md-static
.position-lg-static
.position-xl-static
.position-xxl-static
.position-relative
.position-xs-relative
.position-sm-relative
.position-md-relative
.position-lg-relative
.position-xl-relative
.position-xxl-relative
.position-fixed
.position-xs-fixed
.position-sm-fixed
.position-md-fixed
.position-lg-fixed
.position-xl-fixed
.position-xxl-fixed
.position-absolute
.position-xs-absolute
.position-sm-absolute
.position-md-absolute
.position-lg-absolute
.position-xl-absolute
.position-xxl-absolute
.position-sticky
.position-xs-sticky
.position-sm-sticky
.position-md-sticky
.position-lg-sticky
.position-xl-sticky
.position-xxl-sticky
```

### Unidades de longitud absoluta

```text
"px" - Píxeles --> 1px = 1/96 de 1in
```

### Unidades de longitud relativa

```text
rem - Tamaño de la letra del elemento raíz.
vw  - 1% del ancho de la ventana gráfica.
vh  - 1% de la altura de la ventana gráfica.
```

En todas las propiedades qeu utilicen unidades de medida si no se específica siempre se tomará el `%` como unidad de medida por defecto.

### Tamaño de la fuente

Se puede modificar el grosor de la fuente usando el prefijo "fs-", de forma opcional puedes utilizar un breakpoint o seguir con uno de los valores correspondientes para terminar de forma opcional con una unidad de medida. 

```html
<!-- Tamaño de fuente de 1 rem para dispositivos con resolución de hasta 576 píxeles -->
<span class="fs-xs-1rem"></span>
<span class="fs-16px">Tamaño de fuente de 16 píxeles</span>
```

### Grosor de la fuente

Se puede modificar el grosor de la fuente usando el prefijo "fw-", de forma opcional puedes utilizar un breakpoint o seguir con uno de los siguientes valores:

```text
normal
bold
lighter
bolder
100 - Delgada (rayita)
200 - Extra Ligero (Ultra Ligero)
300 - Ligera
400 - Normal (Regular)
500 - Medio
600 - Semi negrita (Semin negrita)
700 - Negrita
800 - Extra Negrita (Ultra Negrita)
900 - Negra (pesada)
950 - Extra Negra (Ultra Negra)
```

```html
<span class="fw-400">Fuente normal</span>
<span class="fw-xs-700">Fuente en negrita para dispositivos con resolución de hasta 576 píxeles</span>
```

### Width | Height

Se puede modificar la propiedad `width` usando el prefijo "w-" y la propiedad `height` usando el prefijo "h-", de forma opcional puedes utilizar un breakpoint o seguir con uno de los valores correspondientes y opcional también se puede especificar una unidad de medida:

```html
<div class="w-50">Width del 50%</div>
<span class="h-100px">Height de 100 píxeles</span>
```

### Cursor

Se puede modificar la propiedad `cursor`

```html
<div class="cursor-pointer">
  ...
```

Posibles valores

```css
.cursor-none
.cursor-pointer
.cursor-text
.cursor-copy
.cursor-move
.cursor-no-drop
.cursor-not-allowed
```

### Color

Podemos modificar las propiedades `color`, `background-color` y `border-color`

```html
<!-- Caja con color de fondo negro -->
<div class="bk-black">
  <h1 class="c-white">Text en color blanco</h1>
  <div class="bc-red">
    <!-- Caja con color de border rojo -->
  </div>
</div>
```

Solo debemos combinar los prefijos con el color correspondiente:

```text
Para la propiedad "color" el prefijo "c-"
Para la propiedad "background-color" el prefijo "bk-"
Para la propiedad "border-color" el prefijo "bc-"
```

Los colores disponibles son los siguientes:

![black](https://placehold.co/25x25/black/black) `black`
![red](https://placehold.co/25x25/red/red) `red`
![white](https://placehold.co/25x25/white/white) `white`

### Márgenes, rellenos y bordes

Podemos controlar los márgenes y los rellenos con las propiedades `margin`, `padding` y `border`. Al igual que en los casos anteriores se puede lograr con la combinación de un prefijo que se encuentra predefinido, de forma opcional se puede agregar un breakpoint y luego un sufijo variable.

```html
<!-- Caja con márgenes izquierdo y derecho de 8% --->
<div class="mx-8">
  <!-- Span con relleno izquierdo de 16 píxeles y borde derecho de 4% --->
  <span class="pl-16px br-4"></span>
  <!-- Span con relleno derecho de 16 píxeles para dispositivos con resolución de hasta 576 píxeles y borde derecho de 4 píxeles --->
  <span class="pr-xs-16px br-4px"></span>
</div>
```

Como ejemplo tenemos que para combinar márgenes izquierdo y derecho usaríamos el prefijo `mx-` seguido de un número que puede ir de 0 a 100 y luego la unidad de medida. Por defecto, cuando no se pone unidad de medida se toma como unidad de medida `%`.

```text
"auto" - Es reemplazado por algún valor apropiado. Por ejemplo, puede usarse para centrar horizontalmente un elemento bloque. div { width:50%; margin:0 auto; } centrará el div horizontalmente.
```

#### Prefijos

```text
"m-"      - Para todos los márgenes
"mx-"     - Para los márgenes izquierdo y derecho
"my-"     - Para los márgenes superior e inferior
"ml-"     - Para el margen izquierdo
"mr-"     - Para el margen derecho
"mt-"     - Para el margen superior
"mb-"     - Para el margen inferior
"ml-auto" - Para el margen izquierdo automático
"mr-auto" - Para el margen derecho automático
"mt-auto" - Para el margen superior automático
"mb-auto" - Para el margen inferior automático
```

```text
"p-"      - Para todos los rellenos
"px-"     - Para los rellenos izquierdo y derecho
"py-"     - Para los rellenos superior e inferior
"pl-"     - Para el relleno izquierdo
"pr-"     - Para el relleno derecho
"pt-"     - Para el relleno superior
"pb-"     - Para el relleno inferior
"pl-auto" - Para el relleno izquierdo automático
"pr-auto" - Para el relleno derecho automático
"pt-auto" - Para el relleno superior automático
"pb-auto" - Para el relleno inferior automático
```

```text
"b-"   - Para todos los bordes
"bx-"  - Para los bordes izquierdo y derecho
"by-"  - Para los bordes superior e inferior
"bl-"  - Para el borde izquierdo
"br-"  - Para el borde derecho
"bt-"  - Para el borde superior
"bb-"  - Para el borde inferior
"br-"  - Para la propiedad "border-radius"
"btl-" - Para el radio del borde superior izquierdo
"btr-" - Para el radio del borde superior derecho
"bbl-" - Para el radio del borde inferior izquierdo
"bbr-" - Para el radio del borde inferior derecho
"bt-"  - Para el radio del borde superior izquierdo y derecho
"bb-"  - Para el radio del borde inferior izquierdo y derecho
"bl-"  - Para el radio del borde izquierdo superior e inferior
"br-"  - Para el radio del borde derecho superior e inferior
"bn"   - Para no mostrar bordes
```

Atención con los últimos prefijos para el radio de los bordes no lleva `-` antes del número, ejemplo:

```html
<!-- Caja con borde superior izquierdo y derecho de 8 píxeles --->
<div class="bt-8px"></div>
```

### Display

Administre la propiedad display con los siguientes valores

```css
.d-block
.d-xs-block
.d-sm-block
.d-md-block
.d-lg-block
.d-xl-block
.d-xxl-block
.d-inline
.d-xs-inline
.d-sm-inline
.d-md-inline
.d-lg-inline
.d-xl-inline
.d-xxl-inline
.d-grid
.d-xs-grid
.d-sm-grid
.d-md-grid
.d-lg-grid
.d-xl-grid
.d-xxl-grid
.d-inline-block
.d-xs-inline-block
.d-sm-inline-block
.d-md-inline-block
.d-lg-inline-block
.d-xl-inline-block
.d-xxl-inline-block
.d-inline-grid
.d-xs-inline-grid
.d-sm-inline-grid
.d-md-inline-grid
.d-lg-inline-grid
.d-xl-inline-grid
.d-xxl-inline-grid
```

### Flex

Administre rápidamente el diseño, la alineación y el tamaño de las columnas de la cuadrícula, la navegación, los componentes y más con un conjunto completo de utilidades flexibles de respuesta. Para implementaciones más complejas, puede ser necesario un CSS personalizado.

#### Display Flex

Aplique utilidades de visualización para crear un contenedor de caja flexible y transformar elementos secundarios directos en elementos flexibles. Los contenedores y elementos flexibles se pueden modificar aún más con propiedades flexibles adicionales.

```css
.d-flex
.d-inline-flex
.d-sm-flex
.d-sm-inline-flex
.d-md-flex
.d-md-inline-flex
.d-lg-flex
.d-lg-inline-flex
.d-xl-flex
.d-xl-inline-flex
.d-xxl-flex
.d-xxl-inline-flex
```

#### Flex Direction

Utilice "flex-row" para establecer una dirección horizontal (el valor predeterminado del navegador), o .flex-row-reverse para iniciar la dirección horizontal desde el lado opuesto.

```css
.flex-row
.flex-row-reverse
.flex-column
.flex-column-reverse
.flex-sm-row
.flex-sm-row-reverse
.flex-sm-column
.flex-sm-column-reverse
.flex-md-row
.flex-md-row-reverse
.flex-md-column
.flex-md-column-reverse
.flex-lg-row
.flex-lg-row-reverse
.flex-lg-column
.flex-lg-column-reverse
.flex-xl-row
.flex-xl-row-reverse
.flex-xl-column
.flex-xl-column-reverse
.flex-xxl-row
.flex-xxl-row-reverse
.flex-xxl-column
.flex-xxl-column-reverse
```

#### Justify Content

Use las utilidades de justificación de contenido en los contenedores de flexbox para cambiar la alineación de los elementos flexibles en el eje principal (el eje x para comenzar, el eje y si es dirección flexible: columna). Elija entre inicio (predeterminado del navegador), final, centro, entre, alrededor o uniformemente.

```css
.justify-content-start
.justify-content-end
.justify-content-center
.justify-content-between
.justify-content-around
.justify-content-evenly
.justify-content-sm-start
.justify-content-sm-end
.justify-content-sm-center
.justify-content-sm-between
.justify-content-sm-around
.justify-content-sm-evenly
.justify-content-md-start
.justify-content-md-end
.justify-content-md-center
.justify-content-md-between
.justify-content-md-around
.justify-content-md-evenly
.justify-content-lg-start
.justify-content-lg-end
.justify-content-lg-center
.justify-content-lg-between
.justify-content-lg-around
.justify-content-lg-evenly
.justify-content-xl-start
.justify-content-xl-end
.justify-content-xl-center
.justify-content-xl-between
.justify-content-xl-around
.justify-content-xl-evenly
.justify-content-xxl-start
.justify-content-xxl-end
.justify-content-xxl-center
.justify-content-xxl-between
.justify-content-xxl-around
.justify-content-xxl-evenly
```

#### Align Items

Use las utilidades de alineación de elementos en los contenedores de flexbox para cambiar la alineación de los elementos flexibles en el eje transversal (el eje y para comenzar, el eje x si es dirección flexible: columna). Elija entre inicio, final, centro, línea de base o extensión (predeterminado del navegador).

```css
.align-items-start
.align-items-end
.align-items-center
.align-items-baseline
.align-items-stretch
.align-items-sm-start
.align-items-sm-end
.align-items-sm-center
.align-items-sm-baseline
.align-items-sm-stretch
.align-items-md-start
.align-items-md-end
.align-items-md-center
.align-items-md-baseline
.align-items-md-stretch
.align-items-lg-start
.align-items-lg-end
.align-items-lg-center
.align-items-lg-baseline
.align-items-lg-stretch
.align-items-xl-start
.align-items-xl-end
.align-items-xl-center
.align-items-xl-baseline
.align-items-xl-stretch
.align-items-xxl-start
.align-items-xxl-end
.align-items-xxl-center
.align-items-xxl-baseline
.align-items-xxl-stretch
```

#### Align Self

Use las utilidades de autoalineación en los elementos de Flexbox para cambiar individualmente su alineación en el eje transversal (el eje Y para comenzar, el eje X si es de dirección flexible: columna). Elija entre las mismas opciones que los elementos de alineación: inicio, fin, centro, línea de base o estiramiento (predeterminado del navegador).

```css
.align-self-start
.align-self-end
.align-self-center
.align-self-baseline
.align-self-stretch
.align-self-sm-start
.align-self-sm-end
.align-self-sm-center
.align-self-sm-baseline
.align-self-sm-stretch
.align-self-md-start
.align-self-md-end
.align-self-md-center
.align-self-md-baseline
.align-self-md-stretch
.align-self-lg-start
.align-self-lg-end
.align-self-lg-center
.align-self-lg-baseline
.align-self-lg-stretch
.align-self-xl-start
.align-self-xl-end
.align-self-xl-center
.align-self-xl-baseline
.align-self-xl-stretch
.align-self-xxl-start
.align-self-xxl-end
.align-self-xxl-center
.align-self-xxl-baseline
.align-self-xxl-stretch
```

### Flex Fill

Use la clase "flex-fill" en una serie de elementos hermanos para obligarlos a tener anchos iguales a su contenido (o anchos iguales si su contenido no supera sus cuadros de borde) mientras ocupa todo el espacio horizontal disponible.

```css
.flex-fill
.flex-sm-fill
.flex-md-fill
.flex-lg-fill
.flex-xl-fill
.flex-xxl-fill
```

### Flex Grow | Shrink

#### Grow

Use las utilidades `.flex-grow-*` para alternar la capacidad de crecimiento de un elemento flexible para llenar el espacio disponible. En el siguiente ejemplo, los elementos "flex-grow-1" usan todo el espacio disponible que pueden, mientras permiten que los dos elementos flexibles restantes tengan el espacio necesario.

#### Shrink

Use las utilidades `.flex-shrink-*` para alternar la capacidad de encoger un elemento flexible si es necesario. En el siguiente ejemplo, el segundo elemento flexible con "flex-shrink-1" se ve obligado a envolver su contenido en una nueva línea, "reduciéndose" para dejar más espacio para el elemento flexible anterior con "w-100".

```css
.flex-{grow|shrink}-0
.flex-{grow|shrink}-1
.flex-sm-{grow|shrink}-0
.flex-sm-{grow|shrink}-1
.flex-md-{grow|shrink}-0
.flex-md-{grow|shrink}-1
.flex-lg-{grow|shrink}-0
.flex-lg-{grow|shrink}-1
.flex-xl-{grow|shrink}-0
.flex-xl-{grow|shrink}-1
.flex-xxl-{grow|shrink}-0
.flex-xxl-{grow|shrink}-1
```

### Flex Wrap

Cambie la forma en que los elementos flexibles se envuelven en un contenedor flexible. Elija entre ningún ajuste (el valor predeterminado del navegador) con "flex-nowrap", ajuste con "flex-wrap" o ajuste inverso con "flex-wrap-reverse".

```css
.flex-nowrap
.flex-wrap
.flex-wrap-reverse
.flex-sm-nowrap
.flex-sm-wrap
.flex-sm-wrap-reverse
.flex-md-nowrap
.flex-md-wrap
.flex-md-wrap-reverse
.flex-lg-nowrap
.flex-lg-wrap
.flex-lg-wrap-reverse
.flex-xl-nowrap
.flex-xl-wrap
.flex-xl-wrap-reverse
.flex-xxl-nowrap
.flex-xxl-wrap
.flex-xxl-wrap-reverse
```


### Flex Order

Cambie el orden visual de elementos flexibles específicos con un puñado de utilidades de pedido. Solo proporcionamos opciones para hacer que un artículo sea el primero o el último, así como un reinicio para usar el orden DOM. Como order toma cualquier valor entero de 0 a 5, agregue CSS personalizado para cualquier valor adicional necesario.

```css
.order-0
.order-1
.order-2
.order-3
.order-4
.order-5
.order-sm-0
.order-sm-1
.order-sm-2
.order-sm-3
.order-sm-4
.order-sm-5
.order-md-0
.order-md-1
.order-md-2
.order-md-3
.order-md-4
.order-md-5
.order-lg-0
.order-lg-1
.order-lg-2
.order-lg-3
.order-lg-4
.order-lg-5
.order-xl-0
.order-xl-1
.order-xl-2
.order-xl-3
.order-xl-4
.order-xl-5
.order-xxl-0
.order-xxl-1
.order-xxl-2
.order-xxl-3
.order-xxl-4
.order-xxl-5
```

Además, también hay clases receptivas "order-first" y "order-last" que cambian el orden de un elemento aplicando orden: -1 y orden: 6, respectivamente.

```css
.order-first
.order-last
.order-sm-first
.order-sm-last
.order-md-first
.order-md-last
.order-lg-first
.order-lg-last
.order-xl-first
.order-xl-last
.order-xxl-first
.order-xxl-last
```

### Align Content

Use las utilidades de alineación de contenido en los contenedores de flexbox para alinear los elementos flexibles en el eje transversal. Elija entre inicio (predeterminado del navegador), final, centro, entre, alrededor o estirar. Para demostrar estas utilidades, aplicamos flex-wrap: wrap y aumentamos la cantidad de elementos flexibles.

```css
.align-content-start
.align-content-end
.align-content-center
.align-content-around
.align-content-stretch
.align-content-sm-start
.align-content-sm-end
.align-content-sm-center
.align-content-sm-around
.align-content-sm-stretch
.align-content-md-start
.align-content-md-end
.align-content-md-center
.align-content-md-around
.align-content-md-stretch
.align-content-lg-start
.align-content-lg-end
.align-content-lg-center
.align-content-lg-around
.align-content-lg-stretch
.align-content-xl-start
.align-content-xl-end
.align-content-xl-center
.align-content-xl-around
.align-content-xl-stretch
.align-content-xxl-start
.align-content-xxl-end
.align-content-xxl-center
.align-content-xxl-around
.align-content-xxl-stretch
```

### Gap

La propiedad gap CSS establece los espacios (canalones) entre filas y columnas. Es una forma abreviada de espacio entre filas y espacio entre columnas. Se puede utilizar con el prefijo "gap-" seguido del valor correspondientes.

```html
<!--- Esta propiedad establece un espaciado de 8% --->
<div class="d-flex gap-8"></div>
```

Nota: Funciona de la misma forma de los valores anteriores, si no específica una unidad de medida por defecto tomara `%`

```html
<!--- Esta propiedad establece un espaciado de 8 píxeles para las filas y 4 píxeles para las columnas --->
<div class="d-flex gap-8px-4px"></div>
```