//// /// @group Utilidades //// /// Direcciones posibles $directions: (top, right, bottom, left); /// Crea una propiedad con prefijos de navegador, cuando no es /// soportada por estándares, por ejemplo el guionado de texto. @mixin vendor-prefix($property, $definition...) { @each $prefix in $vendor-prefixes { #{$prefix}$property: $definition; } } /// Los recursos que cargan a demanda muestran el espacio que ocupan. [loading="lazy"] { background: linear-gradient(215deg, #{$white} 0%, #{$primary} 100%); } @each $breakpoint in map-keys($grid-breakpoints) { @include media-breakpoint-up($breakpoint) { /// Obtiene el sufijo para cada clase responsive usando mixins de /// Bootstrap. Valores posibles: /// `""` (nada, aplica a todas las resoluciones), `-xs`, `-sm`, /// `-md`, `-lg`, `-xl`. $infix: breakpoint-infix($breakpoint, $grid-breakpoints); /// Ocultar la barra de scroll, útil para sliders horizontales. /// /// @example html ///
.no-scrollbar#{$infix} { scrollbar-width: none; -webkit-overflow-scrolling: touch; &::-webkit-scrollbar { display: none; } } :enabled { .show-when-disabled#{$infix} { display: none !important; } } :disabled { .hide-when-disabled#{$infix} { display: none !important; } } /// Un elemento cuadrado /// /// @example html /// .square#{$infix} { position: relative !important; padding-bottom: 100%; & > * { position: absolute !important; top: 0 !important; left: 0 !important; height: 100% !important; } } /// Cursores $cursors: (pointer, none); @each $cursor in $cursors { /// El elemento va a tener un cursor /// /// @example html /// .cursor#{$infix}-#{$cursor} { cursor: $cursor; } } /// Eventos del cursor $events: (none, auto); @each $event in $events { /// Habilita o deshabilita recibir eventos al tocar o clickear. /// /// @example html /// .pointer-event#{$infix}-#{$event} { pointer-events: $event; } } /// Agrega una transición a cualquier modificación de atributos .transition#{$infix} { @include transition($transition-base); } /// Valores posibles para la propiedad `object-fit` $objects: (contain, cover, fill, none, scale-down); @each $object in $objects { /// Ajustes de imagen y video con respecto al contenedor /// /// @example html /// .fit#{$infix}-#{$object} { object-fit: #{$object}; } } /// _Overflow_, qué hacer cuando el contenido sobrepasa los límites del /// contenedor. $overflows: (auto, hidden, scroll); /// También puede ser solo dentro de un eje $overflow-axis: (x, y); @each $overflow in $overflows { /// Manejar el contenido sobre cualquier eje /// /// @example html /// .overflow#{$infix}-#{$overflow} { overflow: $overflow !important; } @each $axis in $overflow-axis { /// Manejar el contenido sobre un eje particular /// /// @example html /// .overflow-#{$axis}#{$infix}-#{$overflow} { overflow-#{$axis}: $overflow !important; } } } @each $spacer, $length in $spacers { /// Poder aumentar o disminuir el alto de la tipografía. Los /// `spacers` están definidos en Bootstrap y pueden ser extendidos /// desde styles.scss /// /// @link assets/css/styles.scss /// @example html /// .f#{$infix}-#{$spacer} { font-size: $length !important; } /// Columnas de texto /// /// @example html /// .text-column#{$infix}-#{$spacer} { column-count: $spacer; } /// Limitar la cantidad de líneas de un bloque de texto, /// reemplazando el sobrante por puntos suspensivos. Es útil cuando /// el diseño solo pide una cantidad de líneas pero no sabemos cuál /// va a ser el largo. /// /// @example html /// .line-clamp#{$infix}-#{$spacer} { overflow: hidden; display: -webkit-box; -webkit-line-clamp: $spacer; -webkit-box-orient: vertical; } @each $direction in $directions { /// Ubicación absoluta, usar con position-* /// /// @example html /// .#{$direction}#{$infix}-#{$spacer} { #{$direction}: $length } } } /// Anchos y altos en base a `$sizes` definido por Bootstrap. Para /// personalizar los tamaños, modificarlos o agregarlos en `styles.scss` /// /// @link assets/css/styles.scss @each $prop, $abbrev in (width: w, height: h) { @each $size, $length in $sizes { .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; } .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; } .min-#{$abbrev}#{$infix}-#{$size} { min-#{$prop}: $length !important; } .max-#{$abbrev}#{$infix}-#{$size} { max-#{$prop}: $length !important; } } } /// Tipos de _scroll_ posible $scrolls: (auto, smooth); @each $scroll in $scrolls { /// Poder modificar el tipo de _scroll_ de forma _responsive_ /// /// @example html /// .scroll#{$infix}-#{$scroll} { scroll-behavior: #{$scroll}; } } /// Bordes. Bootstrap no define bordes _responsive_ /// /// @link node_modules/bootstrap/scss/utilities/_borders.scss /// @example html /// .border#{$infix} { border: $border-width solid $border-color !important; } .border#{$infix}-0 { border: 0 !important; } @each $direction in $directions { .border#{$infix}-#{$direction} { border-#{$direction}: $border-width solid $border-color !important; } .border#{$infix}-#{$direction}-0 { border-#{$direction}: 0 !important; } } $aligns: (left,center,right); @each $align in $aligns { /// Alineación _responsive_ /// /// @example html /// .text#{$infix}-#{$align} { text-align: $align !important; } } @each $position in $positions { /// Posicionamiento /// /// @example html /// .position#{$infix}-#{$position} { position: $position !important; } } @each $color, $rgb in $colors { /// Colores de fondo. Es raro que usemos versiones _responsive_, pero /// no está de más tenerlas. /// /// @link assets/css/styles.scss /// @example html /// .background#{$infix}-#{$color} { background-color: var(--#{$color}); &:focus { background-color: var(--#{$color}); } } @each $opacity, $degree in $opacities { /// Color de fondo con transparencia (opacidad) /// /// @example html /// .background#{$infix}-#{$color}-t#{$opacity} { background-color: scale-color($rgb, $alpha: $degree); } } /// Atributos de SVG $svg-attributes: (stroke, fill); @each $attr in $svg-attributes { /// Poder cambiar el relleno o la línea de un SVG /// /// @example html ///