API di utilità
L'API di utilità è uno strumento basato su Sass per generare classi di utilità.
Le utilità Bootstrap sono generate con la nostra API di utilità e possono essere utilizzate per modificare o estendere il nostro set predefinito di classi di utilità tramite Sass. La nostra utility API si basa su una serie di mappe e funzioni Sass per la generazione di famiglie di classi con varie opzioni. Se non hai dimestichezza con le mappe di Sass, leggi i documenti ufficiali di Sass per iniziare.
La $utilities
mappa contiene tutte le nostre utilità e viene successivamente unita alla tua $utilities
mappa personalizzata, se presente. La mappa delle utilità contiene un elenco con chiave di gruppi di utilità che accettano le seguenti opzioni:
Opzione | Tipo | Valore di default | Descrizione |
---|---|---|---|
property |
Necessario | – | Nome della proprietà, può essere una stringa o un array di stringhe (ad es. spaziatura interna o margini). |
values |
Necessario | – | Elenco di valori o una mappa se non si desidera che il nome della classe sia uguale al valore. Se null viene utilizzata come chiave della mappa, non viene compilata. |
class |
Opzionale | nullo | Nome della classe generata. Se non viene fornito ed property è un array di stringhe, class verrà impostato automaticamente il primo elemento property dell'array. |
css-var |
Opzionale | false |
Booleano per generare variabili CSS invece delle regole CSS. |
local-vars |
Opzionale | nullo | Mappa delle variabili CSS locali da generare in aggiunta alle regole CSS. |
state |
Opzionale | nullo | Elenco di varianti di pseudo-classi (ad es. :hover o :focus ) da generare. |
responsive |
Opzionale | false |
Booleano che indica se devono essere generate classi reattive. |
rfs |
Opzionale | false |
Booleano per abilitare il rescaling fluido con RFS . |
print |
Opzionale | false |
Booleano che indica se è necessario generare classi di stampa. |
rtl |
Opzionale | true |
Booleano che indica se l'utilità deve essere mantenuta in RTL. |
Spiegazione dell'API
Tutte le variabili di utilità vengono aggiunte alla $utilities
variabile all'interno del nostro _utilities.scss
foglio di stile. Ogni gruppo di utilità ha un aspetto simile a questo:
$utilities: (
"opacity": (
property: opacity,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
Che produce quanto segue:
.opacity-0 { opacity: 0; }
.opacity-25 { opacity: .25; }
.opacity-50 { opacity: .5; }
.opacity-75 { opacity: .75; }
.opacity-100 { opacity: 1; }
Proprietà
La property
chiave richiesta deve essere impostata per qualsiasi utilità e deve contenere una proprietà CSS valida. Questa proprietà viene utilizzata nel set di regole dell'utilità generata. Quando la class
chiave viene omessa, funge anche da nome di classe predefinito. Considera l' text-decoration
utilità:
$utilities: (
"text-decoration": (
property: text-decoration,
values: none underline line-through
)
);
Produzione:
.text-decoration-none { text-decoration: none !important; }
.text-decoration-underline { text-decoration: underline !important; }
.text-decoration-line-through { text-decoration: line-through !important; }
I valori
Utilizzare la values
chiave per specificare quali valori per l'oggetto specificato property
devono essere utilizzati nei nomi e nelle regole delle classi generate. Può essere una lista o una mappa (impostata nelle utilità o in una variabile Sass).
Come elenco, come con text-decoration
le utilità :
values: none underline line-through
Come una mappa, come con opacity
le utilità :
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
Come variabile Sass che imposta l'elenco o la mappa, come nelle nostre position
utilità :
values: $position-values
Classe
Utilizzare l' class
opzione per modificare il prefisso di classe utilizzato nel CSS compilato. Ad esempio, per passare da .opacity-*
a .o-*
:
$utilities: (
"opacity": (
property: opacity,
class: o,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
Produzione:
.o-0 { opacity: 0 !important; }
.o-25 { opacity: .25 !important; }
.o-50 { opacity: .5 !important; }
.o-75 { opacity: .75 !important; }
.o-100 { opacity: 1 !important; }
Utilità delle variabili CSS
Imposta l' css-var
opzione booleana su true
e l'API genererà variabili CSS locali per il selettore specificato invece delle normali property: value
regole. Considera le nostre .text-opacity-*
utilità:
$utilities: (
"text-opacity": (
css-var: true,
class: text-opacity,
values: (
25: .25,
50: .5,
75: .75,
100: 1
)
),
);
Produzione:
.text-opacity-25 { --bs-text-opacity: .25; }
.text-opacity-50 { --bs-text-opacity: .5; }
.text-opacity-75 { --bs-text-opacity: .75; }
.text-opacity-100 { --bs-text-opacity: 1; }
Variabili CSS locali
Utilizzare l' local-vars
opzione per specificare una mappa Sass che genererà variabili CSS locali all'interno del set di regole della classe di utilità. Tieni presente che potrebbe essere necessario un lavoro aggiuntivo per utilizzare quelle variabili CSS locali nelle regole CSS generate. Ad esempio, considera le nostre .bg-*
utilità:
$utilities: (
"background-color": (
property: background-color,
class: bg,
local-vars: (
"bg-opacity": 1
),
values: map-merge(
$utilities-bg-colors,
(
"transparent": transparent
)
)
)
);
Produzione:
.bg-primary {
--bs-bg-opacity: 1;
background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
}
stati
Utilizzare l' state
opzione per generare variazioni di pseudo-classe. Esempi di pseudo-classi sono :hover
e :focus
. Quando viene fornito un elenco di stati, i nomi delle classi vengono creati per quella pseudo-classe. Ad esempio, per modificare l'opacità al passaggio del mouse, aggiungi state: hover
e otterrai .opacity-hover:hover
il tuo CSS compilato.
Hai bisogno di più pseudo-classi? Utilizzare un elenco di stati separati da spazi: state: hover focus
.
$utilities: (
"opacity": (
property: opacity,
class: opacity,
state: hover,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
Produzione:
.opacity-0-hover:hover { opacity: 0 !important; }
.opacity-25-hover:hover { opacity: .25 !important; }
.opacity-50-hover:hover { opacity: .5 !important; }
.opacity-75-hover:hover { opacity: .75 !important; }
.opacity-100-hover:hover { opacity: 1 !important; }
reattivo
Aggiungi il responsive
booleano per generare utilità reattive (ad es. .opacity-md-25
) su tutti i punti di interruzione .
$utilities: (
"opacity": (
property: opacity,
responsive: true,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
Produzione:
.opacity-0 { opacity: 0 !important; }
.opacity-25 { opacity: .25 !important; }
.opacity-50 { opacity: .5 !important; }
.opacity-75 { opacity: .75 !important; }
.opacity-100 { opacity: 1 !important; }
@media (min-width: 576px) {
.opacity-sm-0 { opacity: 0 !important; }
.opacity-sm-25 { opacity: .25 !important; }
.opacity-sm-50 { opacity: .5 !important; }
.opacity-sm-75 { opacity: .75 !important; }
.opacity-sm-100 { opacity: 1 !important; }
}
@media (min-width: 768px) {
.opacity-md-0 { opacity: 0 !important; }
.opacity-md-25 { opacity: .25 !important; }
.opacity-md-50 { opacity: .5 !important; }
.opacity-md-75 { opacity: .75 !important; }
.opacity-md-100 { opacity: 1 !important; }
}
@media (min-width: 992px) {
.opacity-lg-0 { opacity: 0 !important; }
.opacity-lg-25 { opacity: .25 !important; }
.opacity-lg-50 { opacity: .5 !important; }
.opacity-lg-75 { opacity: .75 !important; }
.opacity-lg-100 { opacity: 1 !important; }
}
@media (min-width: 1200px) {
.opacity-xl-0 { opacity: 0 !important; }
.opacity-xl-25 { opacity: .25 !important; }
.opacity-xl-50 { opacity: .5 !important; }
.opacity-xl-75 { opacity: .75 !important; }
.opacity-xl-100 { opacity: 1 !important; }
}
@media (min-width: 1400px) {
.opacity-xxl-0 { opacity: 0 !important; }
.opacity-xxl-25 { opacity: .25 !important; }
.opacity-xxl-50 { opacity: .5 !important; }
.opacity-xxl-75 { opacity: .75 !important; }
.opacity-xxl-100 { opacity: 1 !important; }
}
Stampa
L'abilitazione print
dell'opzione genererà anche classi di utilità per la stampa, che vengono applicate solo all'interno della @media print { ... }
media query.
$utilities: (
"opacity": (
property: opacity,
print: true,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
Produzione:
.opacity-0 { opacity: 0 !important; }
.opacity-25 { opacity: .25 !important; }
.opacity-50 { opacity: .5 !important; }
.opacity-75 { opacity: .75 !important; }
.opacity-100 { opacity: 1 !important; }
@media print {
.opacity-print-0 { opacity: 0 !important; }
.opacity-print-25 { opacity: .25 !important; }
.opacity-print-50 { opacity: .5 !important; }
.opacity-print-75 { opacity: .75 !important; }
.opacity-print-100 { opacity: 1 !important; }
}
Importanza
Tutte le utilità generate dall'API includono !important
per garantire che sostituiscano i componenti e le classi di modifica come previsto. È possibile attivare o disattivare questa impostazione globalmente con la $enable-important-utilities
variabile (predefinita su true
).
Utilizzando l'API
Ora che hai familiarità con il funzionamento dell'API delle utilità, scopri come aggiungere le tue classi personalizzate e modificare le nostre utilità predefinite.
Sostituisci utilità
Sostituisci le utilità esistenti utilizzando la stessa chiave. Ad esempio, se desideri classi di utilità di overflow reattive aggiuntive, puoi farlo:
$utilities: (
"overflow": (
responsive: true,
property: overflow,
values: visible hidden scroll auto,
),
);
Aggiungi utilità
È possibile aggiungere nuove utilità alla $utilities
mappa predefinita con un file map-merge
. Assicurati che i nostri file Sass richiesti e _utilities.scss
siano prima importati, quindi usa map-merge
per aggiungere le tue utilità aggiuntive. Ad esempio, ecco come aggiungere cursor
un'utilità reattiva con tre valori.
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities,
(
"cursor": (
property: cursor,
class: cursor,
responsive: true,
values: auto pointer grab,
)
)
);
Modifica utilità
Modifica le utilità esistenti nella mappa predefinita $utilities
con le funzioni map-get
e map-merge
. Nell'esempio seguente, stiamo aggiungendo un valore aggiuntivo alle width
utenze. Inizia con un'iniziale map-merge
e quindi specifica quale utilità desideri modificare. Da lì, recupera la mappa nidificata "width"
con map-get
per accedere e modificare le opzioni e i valori dell'utilità.
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities,
(
"width": map-merge(
map-get($utilities, "width"),
(
values: map-merge(
map-get(map-get($utilities, "width"), "values"),
(10: 10%),
),
),
),
)
);
Abilita reattivo
È possibile abilitare classi reattive per un insieme esistente di utilità che attualmente non sono reattive per impostazione predefinita. Ad esempio, per rendere le border
classi reattive:
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities, (
"border": map-merge(
map-get($utilities, "border"),
( responsive: true ),
),
)
);
Questo genererà ora variazioni reattive di .border
e .border-0
per ogni punto di interruzione. Il tuo CSS generato sarà simile a questo:
.border { ... }
.border-0 { ... }
@media (min-width: 576px) {
.border-sm { ... }
.border-sm-0 { ... }
}
@media (min-width: 768px) {
.border-md { ... }
.border-md-0 { ... }
}
@media (min-width: 992px) {
.border-lg { ... }
.border-lg-0 { ... }
}
@media (min-width: 1200px) {
.border-xl { ... }
.border-xl-0 { ... }
}
@media (min-width: 1400px) {
.border-xxl { ... }
.border-xxl-0 { ... }
}
Rinomina utilità
Utilità v4 mancanti o abituati a un'altra convenzione di denominazione? L'API delle utilità può essere utilizzata per sovrascrivere il risultato class
di una determinata utilità, ad esempio per rinominare .ms-*
le utilità in oldish .ml-*
:
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities, (
"margin-start": map-merge(
map-get($utilities, "margin-start"),
( class: ml ),
),
)
);
Rimuovere le utilità
Rimuovere qualsiasi utilità predefinita impostando la chiave di gruppo su null
. Ad esempio, per rimuovere tutte le nostre width
utilità, crea un $utilities
map-merge
e aggiungi "width": null
all'interno.
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities,
(
"width": null
)
);
Rimuovere l'utilità in RTL
Alcuni casi limite rendono difficile lo stile RTL , come le interruzioni di riga in arabo. Pertanto le utilità possono essere eliminate dall'output RTL impostando l' rtl
opzione su false
:
$utilities: (
"word-wrap": (
property: word-wrap word-break,
class: text,
values: (break: break-word),
rtl: false
),
);
Produzione:
/* rtl:begin:remove */
.text-break {
word-wrap: break-word !important;
word-break: break-word !important;
}
/* rtl:end:remove */
Questo non produce nulla in RTL, grazie alla direttiva di controllo RTLCSSremove
.