Source

Bootstrap de tematización

Personalice Bootstrap 4 con nuestras nuevas variables Sass integradas para preferencias de estilo global para facilitar la creación de temas y cambios de componentes.

Introducción

En Bootstrap 3, la tematización estuvo impulsada en gran medida por anulaciones de variables en LESS, CSS personalizado y una hoja de estilo de tema separada que incluimos en nuestros distarchivos. Con algo de esfuerzo, se podría rediseñar por completo el aspecto de Bootstrap 3 sin tocar los archivos principales. Bootstrap 4 proporciona un enfoque familiar, pero ligeramente diferente.

Ahora, la tematización se logra mediante variables Sass, mapas Sass y CSS personalizado. No hay una hoja de estilo de tema más dedicada; en su lugar, puede habilitar el tema incorporado para agregar degradados, sombras y más.

Hablar con descaro a

Utilice nuestros archivos Sass de origen para aprovechar variables, mapas, combinaciones y más.

Estructura de archivos

Siempre que sea posible, evite modificar los archivos principales de Bootstrap. Para Sass, eso significa crear su propia hoja de estilo que importe Bootstrap para que pueda modificarla y ampliarla. Suponiendo que está utilizando un administrador de paquetes como npm, tendrá una estructura de archivos que se ve así:

your-project/
├── scss
│   └── custom.scss
└── node_modules/
    └── bootstrap
        ├── js
        └── scss

Si descargó nuestros archivos fuente y no está utilizando un administrador de paquetes, querrá configurar manualmente algo similar a esa estructura, manteniendo los archivos fuente de Bootstrap separados de los suyos.

your-project/
├── scss
│   └── custom.scss
└── bootstrap/
    ├── js
    └── scss

Importador

En su custom.scss, importará los archivos Sass de origen de Bootstrap. Tiene dos opciones: incluir todo Bootstrap o elegir las partes que necesita. Recomendamos lo último, aunque tenga en cuenta que existen algunos requisitos y dependencias entre nuestros componentes. También deberá incluir algo de JavaScript para nuestros complementos.

// Custom.scss
// Option A: Include all of Bootstrap

@import "node_modules/bootstrap/scss/bootstrap";
// Custom.scss
// Option B: Include parts of Bootstrap

// Required
@import "node_modules/bootstrap/scss/functions";
@import "node_modules/bootstrap/scss/variables";
@import "node_modules/bootstrap/scss/mixins";

// Optional
@import "node_modules/bootstrap/scss/reboot";
@import "node_modules/bootstrap/scss/type";
@import "node_modules/bootstrap/scss/images";
@import "node_modules/bootstrap/scss/code";
@import "node_modules/bootstrap/scss/grid";

Con esa configuración en su lugar, puede comenzar a modificar cualquiera de las variables y mapas de Sass en su archivo custom.scss. También puede comenzar a agregar partes de Bootstrap en la // Optionalsección según sea necesario. Sugerimos usar la pila de importación completa de nuestro bootstrap.scssarchivo como punto de partida.

Valores predeterminados variables

Cada variable de Sass en Bootstrap 4 incluye el !defaultindicador que le permite anular el valor predeterminado de la variable en su propio Sass sin modificar el código fuente de Bootstrap. Copie y pegue las variables según sea necesario, modifique sus valores y elimine la !defaultbandera. Si ya se asignó una variable, no se reasignará con los valores predeterminados en Bootstrap.

Las anulaciones de variables dentro del mismo archivo Sass pueden estar antes o después de las variables predeterminadas. Sin embargo, al anular archivos Sass, sus anulaciones deben realizarse antes de importar los archivos Sass de Bootstrap.

Aquí hay un ejemplo que cambia el background-colory colorpor el <body>al importar y compilar Bootstrap a través de npm:

// Your variable overrides
$body-bg: #000;
$body-color: #111;

// Bootstrap and its default variables
@import "node_modules/bootstrap/scss/bootstrap";

Repita según sea necesario para cualquier variable en Bootstrap, incluidas las opciones globales a continuación.

Mapas y bucles

Bootstrap 4 incluye un puñado de mapas Sass, pares de valores clave que facilitan la generación de familias de CSS relacionadas. Usamos mapas Sass para nuestros colores, puntos de interrupción de cuadrícula y más. Al igual que las variables de Sass, todos los mapas de Sass incluyen la !defaultbandera y se pueden anular y ampliar.

Algunos de nuestros mapas Sass se fusionan en mapas vacíos de forma predeterminada. Esto se hace para permitir una fácil expansión de un mapa Sass determinado, pero tiene el costo de hacer que la eliminación de elementos de un mapa sea un poco más difícil.

Modificar mapa

Para modificar un color existente en nuestro $theme-colorsmapa, agregue lo siguiente a su archivo Sass personalizado:

$theme-colors: (
  "primary": #0074d9,
  "danger": #ff4136
);

Añadir al mapa

Para agregar un nuevo color a $theme-colors, agregue la nueva clave y valor:

$theme-colors: (
  "custom-color": #900
);

Quitar del mapa

Para eliminar colores de $theme-colors, o de cualquier otro mapa, use map-remove:

$theme-colors: map-remove($theme-colors, "success", "info", "danger");

Claves requeridas

Bootstrap asume la presencia de algunas claves específicas dentro de los mapas de Sass tal como las usamos y las ampliamos nosotros mismos. A medida que personaliza los mapas incluidos, es posible que encuentre errores cuando se utiliza la clave de un mapa Sass específico.

Por ejemplo, usamos las teclas , y de primarypara successenlaces , botones y estados de formulario. Reemplazar los valores de estas claves no debería presentar problemas, pero eliminarlas puede causar problemas de compilación de Sass. En estos casos, deberá modificar el código Sass que utiliza esos valores.danger$theme-colors

Funciones

Bootstrap utiliza varias funciones de Sass, pero solo un subconjunto es aplicable a la tematización general. Hemos incluido tres funciones para obtener valores de los mapas de colores:

@function color($key: "blue") {
  @return map-get($colors, $key);
}

@function theme-color($key: "primary") {
  @return map-get($theme-colors, $key);
}

@function gray($key: "100") {
  @return map-get($grays, $key);
}

Estos le permiten elegir un color de un mapa Sass de forma muy similar a como usaría una variable de color de v3.

.custom-element {
  color: gray("100");
  background-color: theme-color("dark");
}

También tenemos otra función para obtener un nivel particular de color del $theme-colorsmapa. Los valores de nivel negativos aclararán el color, mientras que los niveles más altos lo oscurecerán.

@function theme-color-level($color-name: "primary", $level: 0) {
  $color: theme-color($color-name);
  $color-base: if($level > 0, #000, #fff);
  $level: abs($level);

  @return mix($color-base, $color, $level * $theme-color-interval);
}

En la práctica, llamaría a la función y pasaría dos parámetros: el nombre del color $theme-colors(p. ej., primario o peligro) y un nivel numérico.

.custom-element {
  color: theme-color-level(primary, -10);
}

Se podrían agregar funciones adicionales en el futuro o su propio Sass personalizado para crear funciones de nivel para mapas Sass adicionales, o incluso uno genérico si desea ser más detallado.

Contraste de color

Una función adicional que incluimos en Bootstrap es la función de contraste de color, color-yiq. Utiliza el espacio de color YIQ para devolver automáticamente un color de contraste claro ( #fff) u oscuro ( #111) basado en el color base especificado. Esta función es especialmente útil para mixins o bucles en los que genera varias clases.

Por ejemplo, para generar muestras de color a partir de nuestro $theme-colorsmapa:

@each $color, $value in $theme-colors {
  .swatch-#{$color} {
    color: color-yiq($value);
  }
}

También se puede utilizar para necesidades puntuales de contraste:

.custom-element {
  color: color-yiq(#000); // returns `color: #fff`
}

También puede especificar un color base con nuestras funciones de mapa de colores:

.custom-element {
  color: color-yiq(theme-color("dark")); // returns `color: #fff`
}

Opciones descaradas

Personalice Bootstrap 4 con nuestro archivo de variables personalizadas incorporado y alterne fácilmente las preferencias globales de CSS con las nuevas $enable-*variables de Sass. Anule el valor de una variable y vuelva a compilar npm run testsegún sea necesario.

Puede encontrar y personalizar estas variables para opciones globales clave en nuestro _variables.scssarchivo.

Variable Valores Descripción
$spacer 1rem(predeterminado) o cualquier valor > 0 Especifica el valor de espaciador predeterminado para generar mediante programación nuestras utilidades de espaciador .
$enable-rounded true(predeterminado) ofalse Habilita border-radiusestilos predefinidos en varios componentes.
$enable-shadows trueo false(predeterminado) Habilita box-shadowestilos predefinidos en varios componentes.
$enable-gradients trueo false(predeterminado) Habilita gradientes predefinidos a través background-imagede estilos en varios componentes.
$enable-transitions true(predeterminado) ofalse Habilita correos electrónicos predefinidos transitionen varios componentes.
$enable-hover-media-query trueo false(predeterminado) Obsoleto
$enable-grid-classes true(predeterminado) ofalse Habilita la generación de clases CSS para el sistema grid (por ejemplo, .container, .row, .col-md-1, etc.).
$enable-caret true(predeterminado) ofalse Habilita el signo de intercalación de pseudo elemento en .dropdown-toggle.
$enable-print-styles true(predeterminado) ofalse Habilita estilos para optimizar la impresión.

Color

Muchos de los diversos componentes y utilidades de Bootstrap se construyen a través de una serie de colores definidos en un mapa Sass. Este mapa se puede reproducir en bucle en Sass para generar rápidamente una serie de conjuntos de reglas.

Todos los colores

Todos los colores disponibles en Bootstrap 4 están disponibles como variables Sass y un mapa Sass en nuestro scss/_variables.scssarchivo. Esto se ampliará en versiones menores posteriores para agregar tonos adicionales, al igual que la paleta de escala de grises que ya incluimos.

Azul
Índigo
Violeta
Rosado
Rojo
Naranja
Amarillo
Verde
verde azulado
cian

Así es como puede usarlos en su Sass:

// With variable
.alpha { color: $purple; }

// From the Sass map with our `color()` function
.beta { color: color("purple"); }

Las clases de utilidad de color también están disponibles para configurar colory background-color.

En el futuro, nuestro objetivo será proporcionar mapas Sass y variables para los tonos de cada color, tal como lo hemos hecho con los colores de la escala de grises a continuación.

colores del tema

Usamos un subconjunto de todos los colores para crear una paleta de colores más pequeña para generar esquemas de color, también disponible como variables Sass y un mapa Sass en nuestro scss/_variables.scssarchivo.

Primario
Secundario
Éxito
Peligro
Advertencia
Información
Luz
Oscuro

grises

Un amplio conjunto de variables grises y un mapa Sass scss/_variables.scsspara obtener tonos de gris consistentes en todo su proyecto.

100
200
300
400
500
600
700
800
900

En _variables.scss, encontrará nuestras variables de color y el mapa Sass. Aquí hay un ejemplo del $colorsmapa Sass:

$colors: (
  "blue": $blue,
  "indigo": $indigo,
  "purple": $purple,
  "pink": $pink,
  "red": $red,
  "orange": $orange,
  "yellow": $yellow,
  "green": $green,
  "teal": $teal,
  "cyan": $cyan,
  "white": $white,
  "gray": $gray-600,
  "gray-dark": $gray-800
) !default;

Agregue, elimine o modifique valores dentro del mapa para actualizar cómo se usan en muchos otros componentes. Desafortunadamente, en este momento, no todos los componentes utilizan este mapa de Sass. Las actualizaciones futuras se esforzarán por mejorar esto. Hasta entonces, planee hacer uso de las ${color}variables y este mapa de Sass.

Componentes

Muchos de los componentes y utilidades de Bootstrap están construidos con @eachbucles que iteran sobre un mapa de Sass. Esto es especialmente útil para generar variantes de un componente $theme-colorsy crear variantes de respuesta para cada punto de interrupción. A medida que personaliza estos mapas de Sass y los vuelve a compilar, verá automáticamente sus cambios reflejados en estos bucles.

modificadores

Muchos de los componentes de Bootstrap están construidos con un enfoque de clase de modificador de base. Esto significa que la mayor parte del estilo está contenido en una clase base (p. ej., .btn) mientras que las variaciones de estilo se limitan a las clases de modificadores (p. ej., .btn-danger). Estas clases de modificadores se construyen a partir del $theme-colorsmapa para personalizar el número y el nombre de nuestras clases de modificadores.

Aquí hay dos ejemplos de cómo recorremos el $theme-colorsmapa para generar modificadores para el .alertcomponente y todas nuestras .bg-*utilidades en segundo plano.

// Generate alert modifier classes
@each $color, $value in $theme-colors {
  .alert-#{$color} {
    @include alert-variant(theme-color-level($color, -10), theme-color-level($color, -9), theme-color-level($color, 6));
  }
}

// Generate `.bg-*` color utilities
@each $color, $value in $theme-colors {
  @include bg-variant('.bg-#{$color}', $value);
}

Sensible

Estos bucles de Sass tampoco se limitan a mapas de colores. También puede generar variaciones sensibles de sus componentes o utilidades. Tomemos, por ejemplo, nuestras utilidades de alineación de texto receptivo donde mezclamos un @eachbucle para el $grid-breakpointsmapa Sass con una consulta de medios incluida.

@each $breakpoint in map-keys($grid-breakpoints) {
  @include media-breakpoint-up($breakpoint) {
    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);

    .text#{$infix}-left   { text-align: left !important; }
    .text#{$infix}-right  { text-align: right !important; }
    .text#{$infix}-center { text-align: center !important; }
  }
}

Si necesita modificar su $grid-breakpoints, sus cambios se aplicarán a todos los bucles que iteren sobre ese mapa.

Variables CSS

Bootstrap 4 incluye alrededor de dos docenas de propiedades personalizadas de CSS (variables) en su CSS compilado. Estos brindan un fácil acceso a los valores de uso común, como nuestros colores de tema, puntos de interrupción y pilas de fuentes primarias cuando se trabaja en el Inspector de su navegador, un espacio aislado de código o creación de prototipos en general.

Variables disponibles

Estas son las variables que incluimos (tenga en cuenta que :rootes obligatorio). Están ubicados en nuestro _root.scssarchivo.

:root {
  --blue: #007bff;
  --indigo: #6610f2;
  --purple: #6f42c1;
  --pink: #e83e8c;
  --red: #dc3545;
  --orange: #fd7e14;
  --yellow: #ffc107;
  --green: #28a745;
  --teal: #20c997;
  --cyan: #17a2b8;
  --white: #fff;
  --gray: #6c757d;
  --gray-dark: #343a40;
  --primary: #007bff;
  --secondary: #6c757d;
  --success: #28a745;
  --info: #17a2b8;
  --warning: #ffc107;
  --danger: #dc3545;
  --light: #f8f9fa;
  --dark: #343a40;
  --breakpoint-xs: 0;
  --breakpoint-sm: 576px;
  --breakpoint-md: 768px;
  --breakpoint-lg: 992px;
  --breakpoint-xl: 1200px;
  --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
  --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}

Ejemplos

Las variables de CSS ofrecen una flexibilidad similar a las variables de Sass, pero sin necesidad de compilación antes de ser enviadas al navegador. Por ejemplo, aquí estamos restableciendo la fuente de nuestra página y los estilos de enlace con variables CSS.

body {
  font: 1rem/1.5 var(--font-family-sans-serif);
}
a {
  color: var(--blue);
}

También puede usar nuestras variables de punto de interrupción en sus consultas de medios:

.content-secondary {
  display: none;
}

@media (min-width(var(--breakpoint-sm))) {
  .content-secondary {
    display: block;
  }
}