Theming Bootstrap
Ippersonalizza Bootstrap 4 bil-varjabbli Sass ġodda integrati tagħna għall-preferenzi globali tal-istil għal temi faċli u bidliet fil-komponenti.
Introduzzjoni
F'Bootstrap 3, it-tema kienet immexxija fil-biċċa l-kbira minn overrides varjabbli f'LESS, CSS personalizzati, u stylesheet separata tat-tema li inkludejna fil- distfajls tagħna. B'xi sforz, wieħed jista 'jfassal kompletament mill-ġdid id-dehra ta' Bootstrap 3 mingħajr ma jmiss il-fajls ewlenin. Bootstrap 4 jipprovdi approċċ familjari, iżda kemmxejn differenti.
Issa, it-tema titwettaq minn varjabbli Sass, mapep Sass, u CSS tad-dwana. M'hemm l-ebda stylesheet aktar dedikat tema; minflok, tista 'tippermetti li t-tema integrata żżid gradjenti, dellijiet, u aktar.
Sass
Uża l-fajls Sass tas-sors tagħna biex tieħu vantaġġ minn varjabbli, mapep, mixins, u aktar. Fil-bini tagħna żdidna l-preċiżjoni tal-arrotondament Sass għal 6 (b'mod awtomatiku huwa 5) biex jipprevjenu problemi bl-arrotondament tal-browser.
Struttura tal-fajl
Kull meta jkun possibbli, evita li timmodifika l-fajls ewlenin tal-Bootstrap. Għal Sass, dan ifisser li toħloq stylesheet tiegħek stess li timporta Bootstrap sabiex tkun tista' timmodifikaha u testendiha. Jekk wieħed jassumi li qed tuża maniġer tal-pakketti bħal npm, ser ikollok struttura tal-fajls li tidher bħal din:
your-project/
├── scss
│   └── custom.scss
└── node_modules/
    └── bootstrap
        ├── js
        └── scssJekk niżżilt il-fajls tas-sors tagħna u m'intix qed tuża maniġer tal-pakketti, tkun trid issettja manwalment xi ħaġa simili għal dik l-istruttura, u żżomm il-fajls tas-sors ta' Bootstrap separati minn tiegħek.
your-project/
├── scss
│   └── custom.scss
└── bootstrap/
    ├── js
    └── scssL-importazzjoni
Fil- custom.scss, int ser timporta l-fajls Sass sors ta' Bootstrap. Għandek żewġ għażliet: inkludi Bootstrap kollu, jew agħżel il-partijiet li għandek bżonn. Inħeġġu lil dawn tal-aħħar, għalkemm kun konxju li hemm xi rekwiżiti u dipendenzi madwar il-komponenti tagħna. Ikollok bżonn ukoll tinkludi xi JavaScript għall-plugins tagħna.
// 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";B'dik is-setup fis-seħħ, tista 'tibda timmodifika kwalunkwe waħda mill-varjabbli u l-mapep Sass fil- custom.scss. Tista 'wkoll tibda żżid partijiet ta' Bootstrap taħt it- // Optionaltaqsima kif meħtieġ. Nissuġġerixxu li tuża l-munzell sħiħ ta 'importazzjoni mill- bootstrap.scssfajl tagħna bħala l-punt tat-tluq tiegħek.
Inadempjenzi varjabbli
Kull varjabbli Sass f'Bootstrap 4 tinkludi l- !defaultbandiera li tippermettilek tegħleb il-valur default tal-varjabbli fis-Sass tiegħek stess mingħajr ma timmodifika l-kodiċi sors ta 'Bootstrap. Ikkopja u waħħal il-varjabbli kif meħtieġ, immodifika l-valuri tagħhom, u neħħi l- !defaultbandiera. Jekk varjabbli diġà ġiet assenjata, allura ma tkunx assenjata mill-ġdid mill-valuri awtomatiċi f'Bootstrap.
Issib il-lista kompleta tal-varjabbli ta' Bootstrap f' scss/_variables.scss.
L-overrides varjabbli fl-istess fajl Sass jistgħu jiġu qabel jew wara l-varjabbli default. Madankollu, meta tipprevali fuq il-fajls Sass, l-invalidi tiegħek għandhom jiġu qabel ma timporta l-fajls Sass ta' Bootstrap.
Hawn eżempju li jibdel l- background-coloru colorgħall- <body>meta jimporta u jikkompila Bootstrap permezz ta' npm:
// Your variable overrides
$body-bg: #000;
$body-color: #111;
// Bootstrap and its default variables
@import "../node_modules/bootstrap/scss/bootstrap";Irrepeti kif meħtieġ għal kwalunkwe varjabbli f'Bootstrap, inklużi l-għażliet globali hawn taħt.
Mapep u loops
Bootstrap 4 jinkludi numru żgħir ta 'mapep Sass, pari ta' valur ewlenin li jagħmluha aktar faċli biex jiġġeneraw familji ta 'CSS relatati. Aħna nużaw il-mapep Sass għall-kuluri tagħna, il-punti ta 'waqfien tal-grilja, u aktar. Eżatt bħall-varjabbli Sass, il-mapep kollha Sass jinkludu l- !defaultbandiera u jistgħu jiġu sostitwiti u estiżi.
Uħud mill-mapep Sass tagħna huma magħquda f'dawk vojta awtomatikament. Dan isir biex jippermetti espansjoni faċli ta 'mappa Sass partikolari, iżda jiġi għall-ispiża li tagħmel it- tneħħija ta ' oġġetti minn mappa kemmxejn aktar diffiċli.
Ibdel il-mappa
Biex timmodifika kulur eżistenti fil- $theme-colorsmappa tagħna, żid dan li ġej mal-fajl Sass tad-dwana tiegħek:
$theme-colors: (
  "primary": #0074d9,
  "danger": #ff4136
);Żid mal-mappa
Biex iżżid kulur ġdid ma' $theme-colors, żid iċ-ċavetta u l-valur il-ġdid:
$theme-colors: (
  "custom-color": #900
);Neħħi mill-mappa
Biex tneħħi kuluri minn $theme-colors, jew minn kwalunkwe mappa oħra, uża map-remove. Kun konxju li trid daħħalha bejn ir-rekwiżiti u l-għażliet tagħna:
// 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";
...Ċwievet meħtieġa
Bootstrap jassumi l-preżenza ta 'xi ċwievet speċifiċi fi ħdan il-mapep Sass kif użajna u testendi dawn aħna stess. Hekk kif tippersonalizza l-mapep inklużi, tista’ tiltaqa’ ma’ żbalji fejn tkun qed tintuża ċavetta speċifika ta’ mappa Sass.
Pereżempju, nużaw iċ- ċwievet primary, success, u minn għal links, buttuni u stati tal-formola. Is-sostituzzjoni tal-valuri ta 'dawn iċ-ċwievet m'għandha tippreżenta l-ebda problemi, iżda t-tneħħija tagħhom tista' tikkawża problemi ta 'kumpilazzjoni ta' Sass. F'dawn il-każijiet, ikollok bżonn timmodifika l-kodiċi Sass li jagħmel użu minn dawk il-valuri.danger$theme-colors
Funzjonijiet
Bootstrap tutilizza diversi funzjonijiet Sass, iżda subsett biss huma applikabbli għat-tema ġenerali. Inkludejna tliet funzjonijiet biex niksbu valuri mill-mapep tal-kuluri:
@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);
}Dawn jippermettulek tagħżel kulur wieħed minn mappa ta' Sass ħafna bħal kif tuża varjabbli tal-kulur minn v3.
.custom-element {
  color: gray("100");
  background-color: theme-color("dark");
}Għandna wkoll funzjoni oħra biex niksbu livell partikolari ta 'kulur mill- $theme-colorsmappa. Valuri tal-livell negattivi se jħaffu l-kulur, filwaqt li livelli ogħla jiskuraw.
@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);
}Fil-prattika, inti ssejjaħ il-funzjoni u tgħaddi żewġ parametri: l-isem tal-kulur minn $theme-colors(eż., primarju jew periklu) u livell numeriku.
.custom-element {
  color: theme-color-level(primary, -10);
}Funzjonijiet addizzjonali jistgħu jiġu miżjuda fil-futur jew Sass tad-dwana tiegħek biex toħloq funzjonijiet ta 'livell għal mapep Sass addizzjonali, jew saħansitra waħda ġenerika jekk ridt tkun aktar verbose.
Kuntrast tal-kulur
Funzjoni addizzjonali waħda li ninkludu f'Bootstrap hija l-funzjoni tal-kuntrast tal-kulur, color-yiq. Jutilizza l- ispazju tal- kulur YIQ biex jirritorna awtomatikament kulur ta 'kuntrast ċar ( #fff) jew skur ( #111) ibbażat fuq il-kulur bażi speċifikat. Din il-funzjoni hija speċjalment utli għal mixins jew loops fejn qed tiġġenera klassijiet multipli.
Pereżempju, biex tiġġenera kampjuni tal-kulur mill- $theme-colorsmappa tagħna:
@each $color, $value in $theme-colors {
  .swatch-#{$color} {
    color: color-yiq($value);
  }
}Jista' jintuża wkoll għal bżonnijiet ta' kuntrast ta' darba:
.custom-element {
  color: color-yiq(#000); // returns `color: #fff`
}Tista' wkoll tispeċifika kulur bażi bil-funzjonijiet tagħna tal-mappa tal-kulur:
.custom-element {
  color: color-yiq(theme-color("dark")); // returns `color: #fff`
}Għażliet Sass
Ippersonalizza Bootstrap 4 bil-fajl tal-varjabbli tad-dwana inkorporat tagħna u taqleb faċilment il-preferenzi CSS globali ma ' $enable-*varjabbli Sass ġodda. Ikkalkola l-valur ta' varjabbli u kompila mill-ġdid ma' npm run testkif meħtieġ.
Tista' ssib u tippersonalizza dawn il-varjabbli għal għażliet globali ewlenin fil- scss/_variables.scssfajl ta' Bootstrap.
| Varjabbli | Valuri | Deskrizzjoni | 
|---|---|---|
| $spacer | 1rem(default), jew kwalunkwe valur > 0 | Jispeċifika l-valur default spacer biex b'mod programmatiku jiġġenera l- utilitajiet spacer tagħna . | 
| $enable-rounded | true(default) jewfalse | Jippermetti stili predefiniti border-radiusfuq diversi komponenti. | 
| $enable-shadows | truejewfalse(default) | Jippermetti stili predefiniti box-shadowfuq diversi komponenti. | 
| $enable-gradients | truejewfalse(default) | Jippermetti gradjenti predefiniti permezz ta ' background-imagestili fuq diversi komponenti. | 
| $enable-transitions | true(default) jewfalse | Jippermetti transitions predefiniti fuq komponenti varji. | 
| $enable-prefers-reduced-motion-media-query | true(default) jewfalse | Jippermetti l prefers-reduced-motion-interrogazzjoni tal-midja , li trażżan ċerti animazzjonijiet/tranżizzjonijiet ibbażati fuq il-preferenzi tal-browser/sistema operattiva tal-utenti. | 
| $enable-hover-media-query | truejewfalse(default) | Deprecated | 
| $enable-grid-classes | true(default) jewfalse | Jippermetti l-ġenerazzjoni ta' klassijiet CSS għas-sistema tal-grilja (eż., .container,.row,.col-md-1, eċċ.). | 
| $enable-caret | true(default) jewfalse | Jippermetti psewdo element caret fuq .dropdown-toggle. | 
| $enable-print-styles | true(default) jewfalse | Jippermetti stili għall-ottimizzazzjoni tal-istampar. | 
| $enable-validation-icons | true(default) jewfalse | Jippermetti background-imageikoni fi ħdan inputs testwali u xi forom tad-dwana għal stati ta 'validazzjoni. | 
Kulur
Ħafna mill-komponenti u l-utilitajiet varji ta 'Bootstrap huma mibnija permezz ta' serje ta 'kuluri definiti f'mappa Sass. Din il-mappa tista' tiġi miġbura f'Sass biex tiġġenera malajr serje ta' settijiet ta' regoli.
Kuluri kollha
Il-kuluri kollha disponibbli f'Bootstrap 4, huma disponibbli bħala varjabbli Sass u mappa Sass fil- scss/_variables.scssfajl. Dan se jiġi estiż f'ħarġiet minuri sussegwenti biex iżżid sfumaturi addizzjonali, bħall- paletta tal-griż li diġà nkludu.
Hawn kif tista' tuża dawn fis-Sass tiegħek:
// With variable
.alpha { color: $purple; }
// From the Sass map with our `color()` function
.beta { color: color("purple"); }Klassijiet ta 'utilità tal-kulur huma wkoll disponibbli għall-issettjar coloru background-color.
Fil-futur, aħna ser nimmiraw li nipprovdu mapep u varjabbli Sass għal sfumaturi ta 'kull kulur kif għamilna bil-kuluri fuq skala griża hawn taħt.
Kuluri tat-tema
Aħna nużaw subsett tal-kuluri kollha biex noħolqu paletta tal-kuluri iżgħar biex niġġeneraw skemi ta 'kuluri, disponibbli wkoll bħala varjabbli Sass u mappa Sass fil- scss/_variables.scssfajl ta' Bootstraps.
Griżi
Sett espansiv ta 'varjabbli griż u mappa Sass scss/_variables.scssgħal sfumaturi ta' griż konsistenti fil-proġett tiegħek. Innota li dawn huma "griżi kesħin", li għandhom tendenza lejn ton blu sottili, aktar milli griżi newtrali.
Fi ħdan scss/_variables.scss, issib il-varjabbli tal-kulur ta' Bootstrap u l-mappa ta' Sass. Hawn eżempju tal- $colorsmappa 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;Żid, neħħi jew immodifika valuri fil-mappa biex taġġorna kif jintużaw f'ħafna komponenti oħra. Sfortunatament f'dan iż-żmien, mhux kull komponent juża din il-mappa Sass. Aġġornamenti futuri se jagħmlu ħilithom biex itejbu dan. Sa dakinhar, ippjana li tagħmel użu mill- ${color}varjabbli u din il-mappa Sass.
Komponenti
Ħafna mill-komponenti u l-utilitajiet ta 'Bootstrap huma mibnija @eachb'linji li jtemmu fuq mappa Sass. Dan huwa speċjalment utli għall-ġenerazzjoni ta 'varjanti ta' komponent minn tagħna $theme-colorsu l-ħolqien ta 'varjanti li jirrispondu għal kull breakpoint. Hekk kif tippersonalizza dawn il-mapep Sass u tikkompila mill-ġdid, awtomatikament tara l-bidliet tiegħek riflessi f'dawn il-linji.
Modifikaturi
Ħafna mill-komponenti tal-Bootstrap huma mibnija b'approċċ ta 'klassi ta' modifikatur bażi. Dan ifisser li l-biċċa l-kbira tal-grafika tinsab għal klassi bażi (eż, .btn) filwaqt li l-varjazzjonijiet tal-istil huma limitati għal klassijiet ta 'modifikatur (eż, .btn-danger). Dawn il-klassijiet modifikaturi huma mibnija mill- $theme-colorsmappa biex jagħmlu customizing in-numru u l-isem tal-klassijiet modifikatur tagħna.
Hawn żewġ eżempji ta 'kif aħna loop fuq il- $theme-colorsmappa biex niġġeneraw modifikaturi għall- .alertkomponent u l- .bg-*utilitajiet kollha ta' l-isfond tagħna.
// 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);
}Jirrispondi
Dawn il-linji Sass mhumiex limitati għal mapep tal-kulur, lanqas. Tista 'wkoll tiġġenera varjazzjonijiet li jirrispondu tal-komponenti jew l-utilitajiet tiegħek. Ħu pereżempju l-utilitajiet tal-allinjament tat-test li jirrispondu tagħna fejn aħna nħalltu @eachloop għall- $grid-breakpointsmappa Sass b'mistoqsija tal-midja tinkludi.
@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; }
  }
}Jekk ikollok bżonn timmodifika tiegħek $grid-breakpoints, il-bidliet tiegħek se japplikaw għal-linji kollha li jirrepetu fuq dik il-mappa.
Varjabbli CSS
Bootstrap 4 jinkludi madwar żewġ tużżani proprjetajiet personalizzati CSS (varjabbli) fis-CSS ikkumpilat tiegħu. Dawn jipprovdu aċċess faċli għal valuri użati b'mod komuni bħall-kuluri tat-temi tagħna, il-punti ta' waqfien, u l-munzell ta' font primarji meta taħdem fl-Ispettur tal-browser tiegħek, sandbox tal-kodiċi, jew prototipi ġenerali.
Varjabbli disponibbli
Hawn huma l-varjabbli li ninkludu (innota li :roothija meħtieġa). Huma jinsabu fil- _root.scssfajl tagħna.
: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;
}Eżempji
Il-varjabbli tas-CSS joffru flessibilità simili għall-varjabbli ta' Sass, iżda mingħajr il-ħtieġa ta' kumpilazzjoni qabel ma jiġu moqdija lill-browser. Pereżempju, hawnhekk qed nissettjaw mill-ġdid il-font tal-paġna tagħna u l-istili tal-link b'varjabbli CSS.
body {
  font: 1rem/1.5 var(--font-family-sans-serif);
}
a {
  color: var(--blue);
}Varjabbli ta' breakpoint
Filwaqt li oriġinarjament inkludejna breakpoints fil-varjabbli tas-CSS tagħna (eż, --breakpoint-md), dawn mhumiex appoġġjati f'mistoqsijiet tal-midja , iżda xorta jistgħu jintużaw fi ħdan settijiet ta' regoli f'mistoqsijiet tal-midja. Dawn il-varjabbli tal-breakpoint jibqgħu fis-CSS ikkumpilat għal kompatibilità b'lura peress li jistgħu jiġu utilizzati minn JavaScript. Tgħallem aktar fl-ispeċifikazzjonijiet .
Hawn eżempju ta ' dak li mhux appoġġjat:
@media (min-width: var(--breakpoint-sm)) {
  ...
}U hawn eżempju ta ' dak li huwa appoġġjat:
@media (min-width: 768px) {
  .custom-element {
    color: var(--primary);
  }
}