API d'utilitat
L'API d'utilitat és una eina basada en Sass per generar classes d'utilitat.
Les utilitats d'arrencada es generen amb la nostra API d'utilitats i es poden utilitzar per modificar o ampliar el nostre conjunt predeterminat de classes d'utilitats mitjançant Sass. La nostra API d'utilitat es basa en una sèrie de mapes i funcions Sass per generar famílies de classes amb diverses opcions. Si no esteu familiaritzat amb els mapes de Sass, llegiu els documents oficials de Sass per començar.
El $utilities
mapa conté totes les nostres utilitats i després es fusiona amb el vostre $utilities
mapa personalitzat, si n'hi ha. El mapa d'utilitats conté una llista amb claus de grups d'utilitats que accepten les opcions següents:
Opció | Tipus | Valor per defecte | Descripció |
---|---|---|---|
property |
Obligatori | – | Nom de la propietat, pot ser una cadena o una matriu de cadenes (p. ex., farciments horitzontals o marges). |
values |
Obligatori | – | Llista de valors o un mapa si no voleu que el nom de la classe sigui el mateix que el valor. Si null s'utilitza com a clau de mapa, no es compila. |
class |
Opcional | nul | Nom de la classe generada. Si no es proporciona i property és una matriu de cadenes, class serà per defecte el primer element de la property matriu. |
css-var |
Opcional | false |
Booleà per generar variables CSS en lloc de regles CSS. |
local-vars |
Opcional | nul | Mapa de variables CSS locals per generar a més de les regles CSS. |
state |
Opcional | nul | Llista de variants de pseudo-classe (p. ex., :hover o :focus ) per generar. |
responsive |
Opcional | false |
Booleà que indica si s'han de generar classes responsives. |
rfs |
Opcional | false |
Booleà per habilitar el reescala de fluids amb RFS . |
print |
Opcional | false |
Booleà que indica si cal generar classes d'impressió. |
rtl |
Opcional | true |
Booleà que indica si la utilitat s'ha de mantenir a RTL. |
API explicada
Totes les variables d'utilitat s'afegeixen a la $utilities
variable dins del nostre _utilities.scss
full d'estil. Cada grup d'utilitats té un aspecte semblant a això:
$utilities: (
"opacity": (
property: opacity,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
Que produeix el següent:
.opacity-0 { opacity: 0; }
.opacity-25 { opacity: .25; }
.opacity-50 { opacity: .5; }
.opacity-75 { opacity: .75; }
.opacity-100 { opacity: 1; }
Propietat
La property
clau necessària s'ha d'establir per a qualsevol utilitat i ha de contenir una propietat CSS vàlida. Aquesta propietat s'utilitza al conjunt de regles de la utilitat generada. Quan class
s'omet la clau, també serveix com a nom de classe per defecte. Considereu la text-decoration
utilitat:
$utilities: (
"text-decoration": (
property: text-decoration,
values: none underline line-through
)
);
Sortida:
.text-decoration-none { text-decoration: none !important; }
.text-decoration-underline { text-decoration: underline !important; }
.text-decoration-line-through { text-decoration: line-through !important; }
Valors
Utilitzeu la values
clau per especificar quins valors de l'especificat property
s'han d'utilitzar als noms i regles de classe generats. Pot ser una llista o un mapa (establert a les utilitats o en una variable de Sass).
Com a llista, com amb text-decoration
les utilitats :
values: none underline line-through
Com a mapa, com amb opacity
les utilitats :
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
Com a variable Sass que estableix la llista o el mapa, com a les nostres position
utilitats :
values: $position-values
Classe
Utilitzeu l' class
opció per canviar el prefix de classe utilitzat al CSS compilat. Per exemple, per canviar de .opacity-*
a .o-*
:
$utilities: (
"opacity": (
property: opacity,
class: o,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
Sortida:
.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; }
Utilitats variables CSS
Estableix l' css-var
opció booleana true
i l'API generarà variables CSS locals per al selector donat en lloc de les property: value
regles habituals. Considereu les nostres .text-opacity-*
utilitats:
$utilities: (
"text-opacity": (
css-var: true,
class: text-opacity,
values: (
25: .25,
50: .5,
75: .75,
100: 1
)
),
);
Sortida:
.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; }
Variables CSS locals
Utilitzeu l' local-vars
opció per especificar un mapa Sass que generarà variables CSS locals dins del conjunt de regles de la classe d'utilitat. Tingueu en compte que pot requerir treball addicional consumir aquestes variables CSS locals a les regles CSS generades. Per exemple, considereu les nostres .bg-*
utilitats:
$utilities: (
"background-color": (
property: background-color,
class: bg,
local-vars: (
"bg-opacity": 1
),
values: map-merge(
$utilities-bg-colors,
(
"transparent": transparent
)
)
)
);
Sortida:
.bg-primary {
--bs-bg-opacity: 1;
background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
}
Estats
Utilitzeu l' state
opció per generar variacions de pseudo-classe. Les pseudoclasses d'exemple són :hover
i :focus
. Quan es proporciona una llista d'estats, es creen noms de classe per a aquesta pseudo-classe. Per exemple, per canviar l'opacitat en passar el cursor, afegiu state: hover
-lo i obtindreu .opacity-hover:hover
el vostre CSS compilat.
Necessites diverses pseudoclasses? Utilitzeu una llista d'estats separats per espais: state: hover focus
.
$utilities: (
"opacity": (
property: opacity,
class: opacity,
state: hover,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
Sortida:
.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; }
Responent
Afegiu el responsive
booleà per generar utilitats sensibles (per exemple, .opacity-md-25
) a tots els punts d'interrupció .
$utilities: (
"opacity": (
property: opacity,
responsive: true,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
Sortida:
.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; }
}
Imprimir
Si activeu l' print
opció també es generaran classes d'utilitat per a la impressió, que només s'apliquen a la @media print { ... }
consulta de mitjans.
$utilities: (
"opacity": (
property: opacity,
print: true,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
Sortida:
.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; }
}
Importància
Totes les utilitats generades per l'API inclouen !important
per assegurar-se que anul·len components i classes modificadores tal com es pretén. Podeu canviar aquesta configuració globalment amb la $enable-important-utilities
variable (per defecte és true
).
Utilitzant l'API
Ara que ja coneixeu com funciona l'API d'utilitats, apreneu a afegir les vostres classes personalitzades i a modificar les nostres utilitats predeterminades.
Anul·lar utilitats
Substituïu les utilitats existents utilitzant la mateixa clau. Per exemple, si voleu classes d'utilitat de desbordament responsives addicionals, podeu fer això:
$utilities: (
"overflow": (
responsive: true,
property: overflow,
values: visible hidden scroll auto,
),
);
Afegeix utilitats
Es poden afegir noves utilitats al $utilities
mapa predeterminat amb un map-merge
. Assegureu-vos que els nostres fitxers Sass necessaris _utilities.scss
s'importin primer i, a continuació, utilitzeu map-merge
per afegir les vostres utilitats addicionals. Per exemple, aquí s'explica com afegir una cursor
utilitat sensible amb tres valors.
@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,
)
)
);
Modificar les utilitats
Modifiqueu les utilitats existents al $utilities
mapa predeterminat amb map-get
i map-merge
funcions. A l'exemple següent, estem afegint un valor addicional a les width
utilitats. Comenceu amb una inicial map-merge
i després especifiqueu quina utilitat voleu modificar. A partir d'aquí, obteniu el mapa imbricat "width"
amb map-get
per accedir i modificar les opcions i els valors de la utilitat.
@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%),
),
),
),
)
);
Activa la resposta
Podeu habilitar les classes responsives per a un conjunt existent d'utilitats que actualment no responen de manera predeterminada. Per exemple, per fer que les border
classes responguin:
@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 ),
),
)
);
Això ara generarà variacions sensibles de .border
i .border-0
per a cada punt d'interrupció. El vostre CSS generat tindrà aquest aspecte:
.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 { ... }
}
Canviar el nom de les utilitats
Falten les utilitats v4 o s'utilitzen amb una altra convenció de nomenclatura? L'API d'utilitats es pot utilitzar per anul·lar el resultat class
d'una utilitat determinada, per exemple, per canviar el nom .ms-*
de les utilitats a 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 ),
),
)
);
Elimina les utilitats
Elimineu qualsevol de les utilitats predeterminades configurant la clau de grup a null
. Per exemple, per eliminar totes les nostres width
utilitats, creeu un $utilities
map-merge
i afegiu-hi "width": null
.
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities,
(
"width": null
)
);
Elimina la utilitat a RTL
Alguns casos extrems dificulten l'estil RTL , com ara els salts de línia en àrab. Així, les utilitats es poden eliminar de la sortida RTL establint l' rtl
opció a false
:
$utilities: (
"word-wrap": (
property: word-wrap word-break,
class: text,
values: (break: break-word),
rtl: false
),
);
Sortida:
/* rtl:begin:remove */
.text-break {
word-wrap: break-word !important;
word-break: break-word !important;
}
/* rtl:end:remove */
Això no genera res a RTL, gràcies a la directiva de control RTLCSSremove
.