Theming Bootstrap
Testreszabhatja a Bootstrap 4-et az új beépített Sass-változóinkkal a globális stíluspreferenciák érdekében, az egyszerű téma- és összetevőcsere érdekében.
Bevezetés
A Bootstrap 3-ban a témát nagyrészt a LESS változó-felülírása, az egyéni CSS és egy külön témastíluslap vezérelte, amelyet a distfájljainkba foglaltunk. Némi erőfeszítéssel teljesen újratervezheti a Bootstrap 3 megjelenését anélkül, hogy megérintené az alapvető fájlokat. A Bootstrap 4 ismerős, de kissé eltérő megközelítést kínál.
Mostantól a tematikázást Sass-változók, Sass-térképek és egyéni CSS-k érik el. Nincs több dedikált téma stíluslap; ehelyett engedélyezheti a beépített témát színátmenetek, árnyékok és egyebek hozzáadásához.
Sass
Használja forrás Sass fájljainkat a változók, térképek, mixinek és egyebek előnyeinek kihasználásához, amikor a Sass -t saját eszközfolyamatával fordítja.
Fájlszerkezet
Amikor csak lehetséges, kerülje a Bootstrap alapvető fájljainak módosítását. A Sass esetében ez azt jelenti, hogy saját stíluslapot kell létrehozni, amely importálja a Bootstrap-et, így módosíthatja és kiterjesztheti azt. Feltételezve, hogy csomagkezelőt, például npm-et használ, a következőképpen néz ki a fájlszerkezet:
your-project/
├── scss
│   └── custom.scss
└── node_modules/
    └── bootstrap
        ├── js
        └── scss
     Ha letöltötte a forrásfájljainkat, és nem használ csomagkezelőt, akkor manuálisan kell beállítania valami hasonlót ehhez a struktúrához, elkülönítve a Bootstrap forrásfájljait a sajátjától.
your-project/
├── scss
│   └── custom.scss
└── bootstrap/
    ├── js
    └── scss
     Importálás
A custom.scssfájlba importálja a Bootstrap forrás Sass fájljait. Két lehetőség közül választhat: tartalmazza az összes Bootstrapet, vagy válassza ki a szükséges részeket. Ez utóbbit javasoljuk, bár ne feledje, hogy összetevőink között vannak bizonyos követelmények és függőségek. Beépülő moduljainkhoz néhány JavaScript-kódot is tartalmaznia kell.
// Custom.scss
// Option A: Include all of Bootstrap
// Include any default variable overrides here (though functions won't be available)
@import "../node_modules/bootstrap/scss/bootstrap";
// Then add additional custom code here
     // Custom.scss
// Option B: Include parts of Bootstrap
// 1. Include functions first (so you can manipulate colors, SVGs, calc, etc)
@import "../node_modules/bootstrap/scss/functions";
// 2. Include any default variable overrides here
// 3. Include remainder of required Bootstrap stylesheets
@import "../node_modules/bootstrap/scss/variables";
@import "../node_modules/bootstrap/scss/mixins";
// 4. Include any optional Bootstrap components as you like
@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";
     Ha ezt a beállítást elvégezte, megkezdheti a Sass-változók és térképek bármelyikének módosítását a custom.scss. Szükség esetén elkezdheti hozzáadni a Bootstrap részeit a // Optionalszakaszhoz. Javasoljuk, hogy bootstrap.scsskiindulási pontként használja a fájlunkból származó teljes importálási veremet.
Változó alapértelmezések
A Bootstrap minden Sass-változója tartalmazza a !defaultjelzőt, amely lehetővé teszi a változó alapértelmezett értékének felülbírálását a saját Sass-ben a Bootstrap forráskódjának módosítása nélkül. Szükség szerint másolja és illessze be a változókat, módosítsa értékeiket, és távolítsa el a !defaultjelzőt. Ha egy változó már hozzá van rendelve, akkor a rendszer nem fogja újra hozzárendelni a Bootstrap alapértelmezett értékeit.
A Bootstrap változóinak teljes listáját itt találja scss/_variables.scss. Egyes változók értéke null, ezek a változók nem adják ki a tulajdonságot, hacsak nincsenek felülírva a konfigurációban.
A változók felülírásának a függvényeink, változóink és mixinjeink importálása után kell érkeznie, de a többi importálás előtt.
Íme egy példa, amely megváltoztatja a background-colorés colora <body>Bootstrap npm-en keresztüli importálásakor és fordításakor:
@import "../node_modules/bootstrap/scss/functions";
// Default variable overrides
$body-bg: #000;
$body-color: #111;
// Required
@import "../node_modules/bootstrap/scss/variables";
@import "../node_modules/bootstrap/scss/mixins";
// Optional Bootstrap components here
@import "../node_modules/bootstrap/scss/root";
@import "../node_modules/bootstrap/scss/reboot";
@import "../node_modules/bootstrap/scss/type";
// etc
     Szükség szerint ismételje meg a műveletet a Bootstrap bármely változójával, beleértve az alábbi globális beállításokat is.
Térképek és hurkok
A Bootstrap 4 tartalmaz egy maroknyi Sass térképet, kulcsértékpárokat, amelyek megkönnyítik a kapcsolódó CSS-családok létrehozását. Sass térképeket használunk színeinkhez, rácstöréspontjainkhoz és sok máshoz. Csakúgy, mint a Sass változók, minden Sass térkép tartalmazza a !defaultzászlót, és felülbírálható és kiterjeszthető.
Egyes Sass térképeink alapértelmezés szerint üresekké vannak egyesítve. Ennek célja egy adott Sass térkép egyszerű bővítése, de ennek az az ára, hogy kissé megnehezíti az elemek eltávolítását a térképről.
Térkép módosítása
Ha módosítani szeretne egy meglévő színt a $theme-colorstérképünkön, adja hozzá a következőket az egyéni Sass fájlhoz:
$theme-colors: (
  "primary": #0074d9,
  "danger": #ff4136
);
     Hozzáadás a térképhez
Új szín $theme-colorshozzáadásához adja hozzá az új kulcsot és értéket:
$theme-colors: (
  "custom-color": #900
);
     Eltávolítás a térképről
A színek eltávolításához a $theme-colorsvagy bármely más térképről használja a gombot map-remove. Ne feledje, hogy a követelményeink és a lehetőségeink közé kell beillesztenie:
// Required
@import "../node_modules/bootstrap/scss/functions";
@import "../node_modules/bootstrap/scss/variables";
@import "../node_modules/bootstrap/scss/mixins";
$theme-colors: map-remove($theme-colors, "info", "light", "dark");
// Optional
@import "../node_modules/bootstrap/scss/root";
@import "../node_modules/bootstrap/scss/reboot";
@import "../node_modules/bootstrap/scss/type";
...
     Szükséges kulcsok
A Bootstrap feltételezi bizonyos kulcsok jelenlétét a Sass térképeken belül, ahogy ezeket mi magunk használtuk és kiterjesztettük. A mellékelt térképek testreszabása során hibákat tapasztalhat, ha egy adott Sass térkép kulcsát használják.
Például a primary, successés dangera gombokat $theme-colorshasználjuk hivatkozásokhoz, gombokhoz és űrlapállapotokhoz. A kulcsok értékeinek cseréje nem okozhat problémát, de eltávolításuk Sass fordítási problémákat okozhat. Ezekben az esetekben módosítania kell az ezeket az értékeket használó Sass-kódot.
Funkciók
A Bootstrap számos Sass-függvényt használ, de csak egy részhalmaz alkalmazható az általános témákra. Három funkciót tartalmaztunk a színtérképek értékeinek lekéréséhez:
@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);
}
     Ezek lehetővé teszik egy szín kiválasztását a Sass térképről, hasonlóan ahhoz, ahogyan a v3 színváltozóját használná.
.custom-element {
  color: gray("100");
  background-color: theme-color("dark");
}
     Van egy másik funkciónk is, amellyel egy adott színszintet kaphatunk a térképről $theme-colors. A negatív szintértékek világosabbá teszik a színt, míg a magasabb szintek sötétítik.
@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);
}
     A gyakorlatban meghívja a függvényt, és két paramétert ad át: a szín nevét $theme-colors(pl. elsődleges vagy veszély) és egy numerikus szintet.
.custom-element {
  color: theme-color-level(primary, -10);
}
     A jövőben további funkciókat is hozzáadhat, vagy saját egyéni Sass-t, amellyel szintfüggvényeket hozhat létre további Sass-térképekhez, vagy akár egy általánosat is, ha bőbeszédűbb szeretne lenni.
Színkontraszt
Egy további funkció, amelyet a Bootstrap-ban tartalmaz, a színkontraszt funkció, color-yiq. A YIQ színteret használja fel , hogy automatikusan világos ( #fff) vagy sötét ( #111) kontrasztszínt adjon vissza a megadott alapszín alapján. Ez a funkció különösen hasznos mixineknél vagy ciklusoknál, ahol több osztályt generál.
Például színminták létrehozásához a $theme-colorstérképünkről:
@each $color, $value in $theme-colors {
  .swatch-#{$color} {
    color: color-yiq($value);
  }
}
     Egyszeri kontraszt igényekhez is használható:
.custom-element {
  color: color-yiq(#000); // returns `color: #fff`
}
     Színtérkép funkcióinkkal alapszínt is megadhat:
.custom-element {
  color: color-yiq(theme-color("dark")); // returns `color: #fff`
}
     Escape SVG
A escape-svgfüggvényt használjuk a <, >és #karakterek kihagyására SVG háttérképeknél. Ezeket a karaktereket meg kell szabadítani a háttérképek megfelelő megjelenítéséhez az IE-ben. A escape-svgfüggvény használatakor az adat URI-kat idézni kell.
Összeadás és kivonás függvények
A addés subtractfüggvényeket használjuk a CSS calcfüggvény burkolására. Ezeknek a függvényeknek az elsődleges célja a hibák elkerülése, amikor „egység nélküli” 0értéket adnak át egy calckifejezésbe. A hasonló kifejezések calc(10px - 0)minden böngészőben hibát adnak vissza, annak ellenére, hogy matematikailag helyesek.
Példa, ahol a számítás érvényes:
$border-radius: .25rem;
$border-width: 1px;
.element {
  // Output calc(.25rem - 1px) is valid
  border-radius: calc($border-radius - $border-width);
}
.element {
  // Output the same calc(.25rem - 1px) as above
  border-radius: subtract($border-radius, $border-width);
}
     Példa, ahol a számítás érvénytelen:
$border-radius: .25rem;
$border-width: 0;
.element {
  // Output calc(.25rem - 0) is invalid
  border-radius: calc($border-radius - $border-width);
}
.element {
  // Output .25rem
  border-radius: subtract($border-radius, $border-width);
}
     Sass opciók
Testreszabhatja a Bootstrap 4-et a beépített egyéni változófájlunkkal, és könnyedén válthat a globális CSS-beállítások között az új $enable-*Sass-változókkal. Írja felül a változó értékét, és npm run testszükség szerint fordítsa újra.
Ezeket a változókat megtalálhatja és testreszabhatja a kulcsfontosságú globális beállításokhoz a Bootstrap scss/_variables.scssfájljában.
| Változó | Értékek | Leírás | 
|---|---|---|
$spacer |  
        1rem(alapértelmezett), vagy bármely 0-nál nagyobb érték |  
        Megadja az alapértelmezett spacer értéket a spacer segédprogramok programozott létrehozásához . | 
$enable-rounded |  
        true(alapértelmezett) vagyfalse |  
        Lehetővé teszi az előre definiált border-radiusstílusokat a különböző összetevőknél. |  
       
$enable-shadows |  
        truevagy false(alapértelmezett) |  
        Lehetővé teszi az előre definiált dekorációs box-shadowstílusokat a különböző alkatrészeken. Nem befolyásolja box-shadowa fókuszállapotokhoz használt s-t. |  
       
$enable-gradients |  
        truevagy false(alapértelmezett) |  
        Lehetővé teszi az előre meghatározott színátmeneteket background-imagea különböző összetevők stílusain keresztül. |  
       
$enable-transitions |  
        true(alapértelmezett) vagyfalse |  
        Lehetővé teszi az előre definiált transitions-eket a különböző komponenseken. |  
       
$enable-prefers-reduced-motion-media-query |  
        true(alapértelmezett) vagyfalse |  
        Engedélyezi a prefers-reduced-motionmédialekérdezést , amely a felhasználók böngészőjének/operációs rendszerének beállításai alapján letilt bizonyos animációkat/átmeneteket. |  
       
$enable-hover-media-query |  
        truevagy false(alapértelmezett) |  
        Elavult | 
$enable-grid-classes |  
        true(alapértelmezett) vagyfalse |  
        Lehetővé teszi CSS-osztályok létrehozását a rácsrendszerhez (pl. .container, .row, .col-md-1, stb.). |  
       
$enable-caret |  
        true(alapértelmezett) vagyfalse |  
        Engedélyezi a pszeudoelem caret on .dropdown-toggle. |  
       
$enable-pointer-cursor-for-buttons |  
        true(alapértelmezett) vagyfalse |  
        Adja hozzá a „kéz” kurzort a nem letiltott gombelemekhez. | 
$enable-print-styles |  
        true(alapértelmezett) vagyfalse |  
        Stílusokat engedélyez a nyomtatás optimalizálásához. | 
$enable-responsive-font-sizes |  
        truevagy false(alapértelmezett) |  
        Engedélyezi az adaptív betűméreteket . | 
$enable-validation-icons |  
        true(alapértelmezett) vagyfalse |  
        Engedélyezi background-imageaz ikonokat a szöveges bevitelekben és néhány egyéni űrlapon az érvényesítési állapotokhoz. |  
       
$enable-deprecation-messages |  
        true(alapértelmezett) vagyfalse |  
        Állítsa értékre, falsehogy elrejtse a figyelmeztetéseket, ha olyan elavult keverőket és funkciókat használ, amelyek eltávolítását tervezik a -ban v5. |  
       
Szín
A Bootstrap számos összetevője és segédprogramja egy Sass térképen meghatározott színsorozaton keresztül épül fel. Ez a térkép áthurkolható a Sass-ban, hogy gyorsan generáljon egy sor szabálykészletet.
Minden szín
A Bootstrap 4-ben elérhető összes szín elérhető Sass változóként és Sass térképként scss/_variables.scssfájlban. Ezt a későbbi kisebb kiadásokban kibővítjük, és további árnyalatokat adunk hozzá, hasonlóan az általunk már szereplő szürkeárnyalatos palettához .
A következőképpen használhatja ezeket a Sass-ban:
// With variable
.alpha { color: $purple; }
// From the Sass map with our `color()` function
.beta { color: color("purple"); }
     Színhasználati osztályok is rendelkezésre állnak a beállításhoz colorés background-color.
Téma színei
Az összes szín egy részhalmazát használjuk, hogy létrehozzunk egy kisebb színpalettát a színsémák létrehozásához, amelyek Sass változóként és Sass térképként is elérhetők a Bootstrap scss/_variables.scssfájljában.
Szürkék
Szürke változók kiterjedt készlete és egy Sass térkép a scss/_variables.scssszürke szín egységes árnyalataihoz a projektben. Vegye figyelembe, hogy ezek „hűvös szürkék”, amelyek inkább a finom kék tónus felé hajlanak, mint a semleges szürkékre.
Ezen belül scss/_variables.scssmegtalálja a Bootstrap színváltozóit és a Sass térképet. Íme egy példa a $colorsSass térképre:
$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;
     Adjon hozzá, távolítson el vagy módosítson értékeket a térképen, hogy frissítse azok felhasználási módját sok más összetevőben. Sajnos jelenleg nem minden összetevő használja ezt a Sass térképet. A jövőbeli frissítések ezen javítani fognak. Addig is tervezze a ${color}változók és a Sass térkép felhasználását.
Alkatrészek
A Bootstrap számos összetevője és segédprogramja ciklusokkal épül fel, @eachamelyek Sass térképen iterálnak. Ez különösen akkor hasznos, ha egy összetevő változatait generáljuk, $theme-colorsés minden törésponthoz érzékeny változatokat hozunk létre. A Sass-leképezések testreszabása és újrafordítása során automatikusan látni fogja a változtatásokat ezekben a ciklusokban.
Módosítók
A Bootstrap számos összetevője alapmódosító osztályú megközelítéssel készült. Ez azt jelenti, hogy a stílus nagy része egy alaposztályhoz (pl. .btn), míg a stílusváltozatok módosító osztályokhoz (pl. .btn-danger) korlátozódik. Ezek a módosító osztályok a térképből épülnek fel $theme-colors, hogy testreszabhassák módosító osztályaink számát és nevét.
Íme két példa arra, hogyan hurkoljuk át a $theme-colorstérképet, hogy módosítókat generáljunk az .alertösszetevőhöz és az összes .bg-*háttér-segédprogramunkhoz.
// 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);
}
     Fogékony
Ezek a Sass hurkok nem korlátozódnak a színes térképekre sem. Az összetevők vagy segédprogramok adaptív változatait is létrehozhatja. Vegyük például reszponzív szövegigazító segédprogramjainkat, ahol @eacha $grid-breakpointsSass-térkép ciklusát keverjük egy médialekérdezéssel.
@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; }
  }
}
     Ha módosítania kell a -t $grid-breakpoints, a módosítások az adott térképen iteráló összes hurokra vonatkoznak.
CSS-változók
A Bootstrap 4 körülbelül két tucat egyéni CSS-tulajdonságot (változót) tartalmaz a lefordított CSS-ben. Ezek egyszerű hozzáférést biztosítanak a gyakran használt értékekhez, például a témaszínekhez, a töréspontokhoz és az elsődleges betűkészletekhez, amikor a böngésző Inspector-jában, kód-sandboxban vagy általános prototípus-készítésben dolgozik.
Elérhető változók
Itt vannak az általunk használt változók (megjegyezzük, hogy :rootez kötelező). Az aktánkban találhatók _root.scss.
: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, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
     Példák
A CSS-változók hasonló rugalmasságot kínálnak, mint a Sass változói, de nincs szükség fordításra, mielőtt kiszolgálnák őket a böngészőnek. Itt például visszaállítjuk oldalunk betűtípusát és hivatkozási stílusát CSS-változókkal.
body {
  font: 1rem/1.5 var(--font-family-sans-serif);
}
a {
  color: var(--blue);
}
     Töréspont változók
Míg eredetileg töréspontokat vettünk fel CSS-változóinkba (pl. --breakpoint-md), ezeket a médialekérdezések nem támogatják , de a médialekérdezések szabálykészletében továbbra is használhatók . Ezek a töréspont-változók a visszafelé kompatibilitás érdekében a lefordított CSS-ben maradnak, mivel a JavaScript felhasználhatja őket. További információ a specifikációban .
Íme egy példa arra, hogy mi nem támogatott:
@media (min-width: var(--breakpoint-sm)) {
  ...
}
     És itt van egy példa a támogatott dolgokra:
@media (min-width: 768px) {
  .custom-element {
    color: var(--primary);
  }
}