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 | 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 | Variabile per il nome della classe se non si desidera che sia uguale alla proprietà. Nel caso in cui non fornisci la class chiave e la property chiave è un array di stringhe, il nome della classe sarà il primo elemento property dell'array. |
state |
Opzionale | Elenco di varianti di pseudo-classi simili a :hover o :focus da generare per l'utilità. Nessun valore predefinito. |
responsive |
Opzionale | Booleano che indica se è necessario generare classi reattive. false per impostazione predefinita. |
rfs |
Opzionale | Booleano per abilitare il ridimensionamento fluido. Dai un'occhiata alla pagina RFS per scoprire come funziona. false per impostazione predefinita. |
print |
Opzionale | Booleano che indica se è necessario generare classi di stampa. false per impostazione predefinita. |
rtl |
Opzionale | Booleano che indica se l'utilità deve essere mantenuta in RTL. true per impostazione predefinita. |
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; }
Prefisso di classe personalizzato
Utilizzare l' class
opzione per modificare il prefisso di classe utilizzato nel CSS compilato:
$utilities: (
"opacity": (
property: opacity,
class: o,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
Produzione:
.o-0 { opacity: 0; }
.o-25 { opacity: .25; }
.o-50 { opacity: .5; }
.o-75 { opacity: .75; }
.o-100 { opacity: 1; }
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; }
Utilità reattive
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; }
}
Cambiare 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,
),
);
Utilità di 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.
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
.