Naršykite CSS mixin'ų taikymą nuo pirminių procesorių, tokių kaip Sass, iki natūralaus CSS, įvaldydami kodo pakartotinį naudojimą, palaikymą ir geriausias globalios žiniatinklio plėtros praktikas efektyviam stiliavimui.
CSS @apply taisyklės įvaldymas: išsamus mixin'ų taikymo vadovas globaliai žiniatinklio plėtrai
Plačiame ir nuolat besikeičiančiame žiniatinklio kūrimo pasaulyje efektyvumas, palaikomumas ir mastelio keitimas yra svarbiausi dalykai. Kai CSS stilių lentelės tampa sudėtingesnės, pasikartojančio kodo valdymas ir nuoseklumo užtikrinimas įvairiuose žiniatinklio projektuose tampa dideliu iššūkiu. Būtent čia "mixin'ų" koncepcija iškyla kaip galingas sprendimas, siūlantis tvirtą mechanizmą kodo pakartotiniam naudojimui ir supaprastintoms kūrimo darbo eigoms.
Šis išsamus vadovas gilinasi į CSS mixin'ų taikymo pasaulį, nagrinėdamas jo pamatinius principus, praktinius įgyvendinimus naudojant populiarius CSS pirminius procesorius ir istorinį natūralios CSS @apply
taisyklės kontekstą. Išanalizuosime, kaip mixin'ai įgalina kūrėjus rašyti švaresnį, labiau organizuotą ir lengviau prižiūrimą CSS – tai esminis aspektas komandoms, bendradarbiaujančioms skirtingose laiko juostose ir kultūriniuose kontekstuose, užtikrinant nuoseklią vartotojo patirtį visame pasaulyje.
Pagrindinė mixin'ų koncepcija CSS kūrime
Iš esmės, mixin'as yra CSS deklaracijų blokas, kurį galima pakartotinai naudoti visoje stilių lentelėje. Pagalvokite apie tai kaip apie funkciją programavimo kalbose, bet skirtą CSS. Užuot apibrėžę tą patį savybių rinkinį pakartotinai įvairiems elementams, jūs apibrėžiate jį vieną kartą mixin'e, o tada tiesiog "įtraukiate" arba "pritaikote" tą mixin'ą visur, kur tų savybių reikia. Šis Nesikartok (angl. Don't Repeat Yourself – DRY) principo laikymasis yra esminis šiuolaikiniame, efektyviame žiniatinklio kūrime.
Pagrindinės motyvacijos, skatinančios naudoti mixin'us, yra aiškios:
-
Patobulintas pakartotinis naudojimas: Apibrėžkite bendrus stilius vieną kartą ir taikykite juos visur, taip sumažindami pertekliškumą.
-
Pagerintas palaikomumas: Stiliaus bloko pakeitimus reikia atlikti tik vienoje vietoje – mixin'o apibrėžime – ir jie automatiškai išplinta visur, kur mixin'as yra naudojamas. Tai neįkainojama ilgalaikiuose projektuose ir didelėse komandose.
-
Didesnis nuoseklumas: Užtikrinkite vienodą išvaizdą ir pojūtį visoje svetainėje ar programoje, standartizuodami dažnai naudojamus dizaino šablonus, tokius kaip mygtukų stiliai, tipografijos skalės ar maketo konfigūracijos.
-
Sumažintas failo dydis (po kompiliavimo): Nors pirminio procesoriaus šaltinio failuose gali būti mixin'ų apibrėžimų, kompiliuotas CSS dažnai pasižymi geresne organizacija, nors galutinis failo dydis priklauso nuo to, kiek kartų mixin'as yra įtraukiamas ir kaip efektyviai jis parašytas.
-
Paspartintas kūrimas: Turėdami iš anksto apibrėžtus stilių blokus, kūrėjai gali daug greičiau kurti komponentus ir puslapius, sutelkdami dėmesį į unikalius aspektus, o ne į pasikartojančias stiliavimo užduotis.
Anksčiau pasiekti tokį pakartotinio naudojimo lygį gryname CSS buvo sudėtinga. Kūrėjai dažnai griebdavosi pagalbinių klasių ar sudėtingų selektorių grandinių, o tai galėjo lemti išpūstą HTML arba sunkiai valdomas stilių lenteles. CSS pirminių procesorių atsiradimas tai revoliucionavo, o pastaruoju metu natūralios CSS funkcijos, tokios kaip individualizuotos savybės, siūlo naujus būdus valdyti pasikartojančius stilius.
Mixin'ai CSS pirminiuose procesoriuose: pakartotinio naudojimo darbiniai arkliai
CSS pirminiai procesoriai, tokie kaip Sass (Syntactically Awesome Style Sheets), Less ir Stylus, jau seniai yra pagrindiniai įrankiai, išplečiantys CSS su programavimui būdingomis galimybėmis, įskaitant kintamuosius, funkcijas ir, svarbiausia, mixin'us. Nors jų sintaksė skiriasi, jų pagrindinė filosofija dėl mixin'ų yra gana panaši: apibrėžti pakartotinai naudojamą stilių bloką ir jį įtraukti.
Sass Mixin'ai: išsamus taikymo nagrinėjimas
Sass, būdamas vienas populiariausių ir funkcijomis turtingiausių pirminių procesorių, siūlo tvirtą mixin'ų sistemą. Ji suteikia lankstumo per argumentus, numatytąsias reikšmes ir turinio blokus, todėl yra neįtikėtinai galinga daugybei naudojimo atvejų.
Paprasto mixin'o apibrėžimas
Mixin'as Sasse apibrėžiamas naudojant @mixin
direktyvą, po kurios eina pavadinimas. Aiškumo dėlei šis pavadinimas paprastai naudoja "kebab-case" rašymo stilių.
Pavyzdys: paprastas centravimo mixin'as
@mixin center-element {
display: flex;
justify-content: center;
align-items: center;
}
Šis paprastas mixin'as apima bendras savybes, reikalingas elemento centravimui naudojant Flexbox. Be mixin'o, šias tris eilutes tektų kartoti kiekvieną kartą, kai reikėtų ką nors centruoti.
Mixin'o įtraukimas
Norėdami naudoti apibrėžtą mixin'ą, CSS taisyklėje naudojate @include
direktyvą. Kompiliuojant, pirminis procesorius pakeičia @include
iškvietimą tikrosiomis CSS deklaracijomis iš mixin'o.
Pavyzdys: centravimo mixin'o įtraukimas
.card {
width: 300px;
height: 200px;
background-color: #f0f0f0;
@include center-element;
}
.modal {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
@include center-element;
}
Po kompiliavimo, .card
klasės CSS išvestis atrodytų taip:
.card {
width: 300px;
height: 200px;
background-color: #f0f0f0;
display: flex;
justify-content: center;
align-items: center;
}
Tai parodo pagrindinę mixin'ų galią: mažiau eilučių rašyti, lengviau valdyti.
Mixin'ai su argumentais: dinaminis stiliavimas
Tikroji mixin'ų galia atsiskleidžia, kai įvedate argumentus, leidžiančius jiems priimti dinamines reikšmes. Tai įgalina kurti labai lanksčius ir pritaikomus stilių blokus.
Poziciniai argumentai
Argumentai apibrėžiami skliausteliuose po mixin'o pavadinimo, panašiai kaip funkcijos parametrai. Įtraukdami mixin'ą, reikšmes perduodate ta pačia tvarka.
Pavyzdys: dinaminiai mygtukų stiliai
@mixin button-styles($bg-color, $text-color, $padding) {
display: inline-block;
padding: $padding;
background-color: $bg-color;
color: $text-color;
border: none;
border-radius: 5px;
cursor: pointer;
text-decoration: none;
font-weight: bold;
}
.btn-primary {
@include button-styles(#007bff, #fff, 10px 20px);
}
.btn-secondary {
@include button-styles(#6c757d, #fff, 8px 16px);
}
Šis mixin'as dabar leidžia jums generuoti įvairius mygtukų stilius tiesiog pateikiant skirtingus argumentus fono spalvai, teksto spalvai ir atitraukimui, dramatiškai sumažinant pasikartojantį kodą.
Raktiniai argumentai ir numatytosios reikšmės
Sass taip pat palaiko raktinius argumentus, leidžiančius perduoti reikšmes pagal pavadinimą, o tai pagerina skaitomumą, ypač mixin'ams su daugeliu argumentų. Taip pat galite priskirti numatytąsias reikšmes argumentams, todėl jie tampa neprivalomi įtraukiant mixin'ą.
Pavyzdys: adaptyvios tipografijos mixin'as su numatytosiomis reikšmėmis
@mixin responsive-text($font-size, $line-height: 1.5, $color: #333) {
font-size: $font-size;
line-height: $line-height;
color: $color;
}
.hero-heading {
@include responsive-text(48px, 1.2, #1a1a1a);
}
.body-text {
@include responsive-text(16px);
/* line-height numatytoji reikšmė 1.5, color numatytoji reikšmė #333 */
}
.caption {
@include responsive-text($font-size: 14px, $color: #777);
/* line-height numatytoji reikšmė 1.5 */
}
Numatytosios reikšmės yra neįtikėtinai naudingos teikiant protingas atsargines parinktis ir sumažinant argumentų, kuriuos reikia perduoti įprastose situacijose, skaičių. Raktiniai argumentai pagerina aiškumą, ypač kai argumentų tvarka gali būti ne iš karto akivaizdi.
Likę argumentai (...
) kintamam įvesčių skaičiui
Situacijoms, kai mixin'as turi priimti savavališką argumentų skaičių, Sass siūlo likusius argumentus, naudojant ...
. Tai ypač naudinga savybėms, kurios priima kelias reikšmes, pvz., box-shadow
ar text-shadow
.
Pavyzdys: lankstus šešėlių mixin'as
@mixin multi-shadow($shadows...) {
box-shadow: $shadows;
}
.element-with-shadow {
@include multi-shadow(0 2px 4px rgba(0,0,0,0.1), 0 8px 16px rgba(0,0,0,0.2));
}
.another-element {
@include multi-shadow(inset 0 0 10px red);
}
Šis mixin'as lanksčiai tvarko bet kokį jam perduotą šešėlių apibrėžimų skaičių, kompiliuodamas juos tiesiai į box-shadow
savybę.
Mixin'ai su turiniu: stilių blokų perdavimas
@content
direktyva Sasse yra galinga funkcija, leidžianti perduoti CSS taisyklių ar deklaracijų bloką tiesiai į mixin'ą. Tai neįkainojama kuriant apvalkalus ar specifinius kontekstus, kur turėtų būti taikomi tam tikri stiliai.
Pavyzdys: medijos užklausos mixin'as su turiniu
@mixin breakpoint($point) {
@if $point == desktop {
@media (min-width: 1024px) {
@content;
}
} @else if $point == tablet {
@media (min-width: 768px) and (max-width: 1023px) {
@content;
}
} @else if $point == mobile {
@media (max-width: 767px) {
@content;
}
}
}
.my-component {
width: 100%; /* Numatytasis mobiliesiems pirmiausia */
@include breakpoint(tablet) {
width: 75%;
margin: 0 auto;
}
@include breakpoint(desktop) {
width: 50%;
max-width: 960px;
margin: 0 auto;
}
}
Šiame pavyzdyje @content
direktyva viduje @mixin breakpoint
leidžia apibrėžti specifinius stilius skirtingiems ekrano dydžiams tiesiogiai komponento taisyklių rinkinyje, išlaikant medijos užklausas lokalizuotas atitinkamam komponentui. Šis modelis yra neįtikėtinai populiarus valdant adaptyvų dizainą ir gerinant stilių lentelių skaitomumą, ypač komponentais pagrįstose architektūrose, paplitusiose globaliose komandose.
Pažangūs mixin'ų modeliai ir svarstymai
Mixin'ai gali būti derinami su kitomis Sass funkcijomis, kad būtų sukurti dar sudėtingesni ir dinamiškesni stiliai.
Sąlyginė logika mixin'uose
Mixin'ų viduje galite naudoti @if
, @else if
ir @else
direktyvas, kad pritaikytumėte stilius pagal sąlygas. Tai įgalina kurti labai konfigūruojamus mixin'us.
Pavyzdys: temai pritaikytas mygtuko mixin'as
@mixin themed-button($theme: default) {
@if $theme == default {
background-color: #007bff;
color: #fff;
} @else if $theme == dark {
background-color: #343a40;
color: #fff;
} @else if $theme == light {
background-color: #f8f9fa;
color: #333;
border: 1px solid #ddd;
} @else {
@warn "Unknown theme #{$theme} used in themed-button mixin.";
background-color: #ccc;
color: #000;
}
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
}
.btn-buy {
@include themed-button(dark);
}
.btn-checkout {
@include themed-button(light);
}
Šis mixin'as suteikia skirtingus mygtukų stilius pagal nurodytą temą, siūlydamas tvirtą būdą nuosekliai valdyti vizualines variacijas.
Ciklai mixin'uose
Sass ciklai (@for
, @each
, @while
) gali būti integruoti į mixin'us, kad programiškai generuotų pasikartojančius stilius, tokius kaip atstumų pagalbinės klasės ar stulpelių tinkleliai.
Pavyzdys: atstumų pagalbinių klasių mixin'as su ciklu
@mixin generate-spacing-utilities($max: 5, $step: 5px) {
@for $i from 1 through $max {
$value: $i * $step;
.margin-#{$i} {
margin: $value;
}
.padding-#{$i} {
padding: $value;
}
}
}
@include generate-spacing-utilities(5, 10px);
/* Tai sugeneruos klases kaip .margin-1 { margin: 10px; } iki .margin-5 { margin: 50px; } */
Šis mixin'as generuoja pagalbinių klasių rinkinį nuosekliam atstumui, sutaupydamas daug rankinio darbo ir užtikrindamas vieningą dizaino sistemą. Tokios pagalbinės klasės yra neįkainojamos dideliuose, globaliai paskirstytuose projektuose, kur kūrėjams reikia greitos prieigos prie standartizuotų atstumų reikšmių.
Mixin'ai, funkcijos ir placeholder'iai (%extend
)
Sass siūlo ir kitų funkcijų, kurios gali atrodyti panašios į mixin'us, tačiau tarnauja skirtingiems tikslams:
-
Funkcijos: Sass funkcijos (apibrėžiamos su
@function
) apskaičiuoja ir grąžina vieną reikšmę. Jos naudojamos skaičiavimams, spalvų manipuliacijoms ar eilutės operacijoms. Jos tiesiogiai negeneruoja CSS. Mixin'ai, kita vertus, generuoja CSS savybes.Pavyzdys: funkcija vs. mixin'as
@function px-to-rem($px) { @return $px / 16px * 1rem; /* Funkcija grąžina apskaičiuotą reikšmę */ } .element { font-size: px-to-rem(24px); } @mixin custom-heading($font-size) { font-size: $font-size; /* Mixin'as generuoja CSS */ font-weight: bold; } .page-title { @include custom-heading(px-to-rem(32px)); }
-
Placeholder'iai (
%extend
): Placeholder'ių selektoriai (pvz.,%button-base
) yra panašūs į mixin'us tuo, kad juose yra pakartotinai naudojamų stilių blokų, tačiau jie yra skirti būti išplėsti naudojant@extend
direktyvą. Skirtingai nuo mixin'ų, kurie dubliuoja CSS deklaracijas kiekvieną kartą, kai yra įtraukiami,@extend
protingai sugrupuoja selektorius, o tai gali lemti mažesnį kompiliuotą CSS, nes išvengiama dubliavimo. Tačiau@extend
kartais gali sukelti netikėtą selektorių išvestį arba didesnius failų dydžius, jei naudojamas netinkamai, ypač su sudėtingais įdėtais selektoriais. Mixin'ai paprastai yra pageidautini atskiriems savybių blokams įtraukti, o@extend
labiau tinka bendriems pagrindiniams stiliams tarp susijusių komponentų dalintis.Pavyzdys: Mixin'as vs. Extend
@mixin alert-style { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; } %message-base { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; } .alert-success { @include alert-style; background-color: #d4edda; color: #155724; } .message-error { @extend %message-base; background-color: #f8d7da; color: #721c24; }
Kompiliuota
.alert-success
išvestis dubliuotųalert-style
savybes..message-error
atveju,%message-base
savybės būtų sugrupuotos su.message-error
selektoriumi./* Kompiliuota išvestis mixin'ui */ .alert-success { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; background-color: #d4edda; color: #155724; } /* Kompiliuota išvestis extend'ui */ .message-error, .some-other-class-that-extends-it { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; } .message-error { background-color: #f8d7da; color: #721c24; }
Pasirinkimas tarp mixin'ų ir
@extend
dažnai priklauso nuo konkretaus scenarijaus: mixin'ai skirti atskiriems, galbūt parametrizuotiems savybių blokams, o@extend
– bendram taisyklių rinkiniui tarp skirtingų selektorių dalintis, kai minimalus dubliavimas yra kritiškai svarbus.
Mixin'ai Less ir Stylus kalbose
Nors Sass yra plačiai pritaikytas, Less ir Stylus taip pat siūlo panašias mixin'ų galimybes:
-
Less Mixin'ai: Less kalboje mixin'ai iš esmės yra CSS taisyklių rinkiniai, kuriuos galite iškviesti. Jie apibrėžiami kaip įprastos CSS klasės ar ID ir įtraukiami tiesiog iškviečiant jų pavadinimą kitoje taisyklių rinkinyje. Less mixin'ai taip pat gali priimti argumentus ir numatytąsias reikšmes.
Pavyzdys: Less Mixin'as
.border-radius(@radius: 5px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } #header { .border-radius(10px); } .footer { .border-radius(); /* Naudoja numatytąjį 5px */ }
Less taip pat turi parametrinius mixin'us (tuos su argumentais) ir apsaugotus mixin'us (sąlyginius mixin'us, naudojant
when
raktinį žodį). -
Stylus Mixin'ai: Stylus siūlo bene lanksčiausią sintaksę, leidžiančią naudoti neprivalomus skliaustus ir dvitaškius. Mixin'ai yra tiesiog kodo blokai, kuriuos galima įtraukti. Stylus taip pat palaiko argumentus, numatytąsias reikšmes ir koncepciją, panašią į turinio blokus (nors ne per aiškią
@content
direktyvą kaip Sass, bet per bloko argumentus).Pavyzdys: Stylus Mixin'as
border-radius(radius = 5px) -webkit-border-radius radius -moz-border-radius radius border-radius radius #header border-radius 10px .footer border-radius
Stylus sintaksės lankstumas gali lemti labai glaustą kodą.
Nepriklausomai nuo pirminio procesoriaus, pagrindinė nauda išlieka ta pati: pasikartojančio CSS abstrahavimas į pakartotinai naudojamus blokus, o tai žymiai padeda valdyti dideles ir besikeičiančias stilių lenteles globalioms programoms.
Natūrali CSS @apply
taisyklė: istorinė perspektyva ir dabartinė būsena
Nors pirminių procesorių mixin'ai yra gerai įsitvirtinusi ir esminė front-end kūrimo dalis, CSS darbo grupė taip pat tyrinėjo būdus, kaip panašų pakartotinį naudojimą pritaikyti natūraliame CSS. Tai lėmė @apply
taisyklės pasiūlymą, sukurtą veikti kartu su CSS individualizuotomis savybėmis (CSS kintamaisiais).
Kokia buvo siūloma @apply
taisyklė?
CSS @apply
taisyklė buvo eksperimentinė CSS funkcija, kurios tikslas buvo leisti autoriams apibrėžti individualizuotų savybių rinkinius ir juos pritaikyti elementams, iš esmės veikiant kaip natūralus CSS mixin'as individualizuotoms savybėms. Ji atrodė maždaug taip:
Pavyzdys: Siūloma natūrali @apply
(nebenaudojama)
:root {
--brand-button-theme: {
background-color: #007bff;
color: #fff;
padding: 10px 20px;
border-radius: 5px;
};
}
.my-button {
@apply --brand-button-theme;
font-weight: bold;
text-transform: uppercase;
}
Idėja buvo patraukli: apibrėžti pavadintą savybių rinkinį ("mixin'ą" ar "savybių rinkinį") naudojant individualizuotų savybių sintaksę, o tada jį įtraukti naudojant @apply
. Tai būtų suteikę natūralų būdą valdyti CSS deklaracijų pluoštus be pirminių procesorių poreikio.
Kodėl ji buvo pasiūlyta ir kodėl jos buvo atsisakyta
Motyvacija, slypinti už @apply
, buvo aiški: išspręsti tų pačių CSS deklaracijų blokų kartojimo problemą. Nors CSS individualizuotos savybės (pvz., --main-color: blue; color: var(--main-color);
) leidžia pakartotinai naudoti *reikšmes*, jos pačios savaime neleidžia pakartotinai naudoti *savybių grupių*. @apply
buvo skirta šiai spragai užpildyti, į naršyklę įdiegiant CSS "dalinio" ar "mixin'o" formą.
Tačiau @apply
taisyklė galiausiai buvo pripažinta nebenaudojama ir pašalinta iš CSS specifikacijų. Pagrindinės jos atsisakymo priežastys buvo šios:
-
Sudėtingumas ir našumas: Efektyvus
@apply
įgyvendinimas naršyklėse pasirodė sudėtingesnis nei tikėtasi, ypač atsižvelgiant į tai, kaip pritaikytų savybių rinkinių pakeitimai kaskaduotų ir sukeltų maketo/piešimo operacijas. -
Sutapimas su kitomis funkcijomis: Buvo didelis sutapimas su besivystančiomis pačių CSS individualizuotų savybių galimybėmis ir potencialu sukurti tvirtesnį sprendimą tobulinant individualizuotas savybes ir naujas natūralias funkcijas.
-
Stilistiniai nuogąstavimai: Kai kuriems sintaksė ir semantika atrodė griozdiška, galinti sukelti sunkiai derinamas kaskadavimo problemas.
Šiuo metu natūrali CSS @apply
taisyklė nėra standarto dalis ir neturėtų būti naudojama gamyboje. Naršyklių palaikymas jai buvo minimalus ir buvo pašalintas.
Dabartinės alternatyvos natūraliame CSS
Nors @apply
nebėra, natūralus CSS evoliucionavo, siūlydamas galingas alternatyvas pakartotiniam naudojimui, daugiausia per tvirtą CSS individualizuotų savybių naudojimą ir strateginį komponentų dizainą.
CSS individualizuotos savybės (CSS kintamieji)
Individualizuotos savybės leidžia apibrėžti pakartotinai naudojamas reikšmes, kurias vėliau galima pritaikyti kelioms CSS savybėms ar net naudoti skaičiavimuose. Nors jos negrupuoja savybių, jos yra neįtikėtinai veiksmingos valdant dizaino žetonus (design tokens) ir globalius temos kintamuosius.
Pavyzdys: reikšmių pakartotinis naudojimas su individualizuotomis savybėmis
:root {
--primary-color: #007bff;
--text-color-light: #f8f9fa;
--button-padding: 10px 20px;
--border-radius-default: 5px;
}
.btn-primary {
background-color: var(--primary-color);
color: var(--text-color-light);
padding: var(--button-padding);
border-radius: var(--border-radius-default);
/* ... kitos savybės ... */
}
.card-header {
background-color: var(--primary-color);
padding: var(--button-padding);
border-radius: var(--border-radius-default) var(--border-radius-default) 0 0;
/* ... */
}
Šis metodas efektyviai centralizuoja reikšmes, todėl lengva pakeisti pagrindinę spalvą ar atitraukimą visoje svetainėje pakeitus vieną individualizuotą savybę. Tai labai naudinga globaliam prekės ženklo valdymui ir temų kūrimui, leidžiant greitai prisitaikyti prie skirtingų regionų dizaino preferencijų ar sezoninių kampanijų.
Pagalbinės klasės ir komponentais pagrįstas CSS
Savybių grupavimui standartinis natūralus CSS metodas išlieka pagalbinių klasių arba gerai apibrėžtų komponentų klasių naudojimas. Tokios karkasai kaip Bootstrap, Tailwind CSS ir kiti plačiai naudoja šį modelį.
Pavyzdys: pagalbinės klasės pakartotiniam naudojimui
/* CSS */
.flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.btn {
display: inline-block;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
}
.btn-primary {
background-color: blue;
color: white;
}
/* HTML */
Nors tai perkelia dalį stiliavimo atsakomybės į HTML (pridedant daugiau klasių), tai yra plačiai priimtas ir labai našus būdas valdyti pakartotinai naudojamus stilių blokus gryname CSS. Jis sklandžiai integruojasi su šiuolaikinėmis JavaScript karkasais, tokiais kaip React, Vue ir Angular, kurie skatina komponentais pagrįstą kūrimą.
Tinkamo požiūrio pasirinkimas: pirminiai procesoriai vs. natūralus CSS
Atsižvelgiant į pirminių procesorių ir natūralių CSS funkcijų stipriąsias puses, sprendimas, kurį požiūrį naudoti mixin'ams panašiai funkcijai, priklauso nuo projekto reikalavimų, komandos susipažinimo ir reikalingo stiliavimo sudėtingumo.
Kada naudoti pirminių procesorių mixin'us
-
Sudėtinga logika ir skaičiavimai: Kai jūsų stiliams reikalinga pažangi logika (
@if
,@for
,@each
), sudėtingi matematiniai skaičiavimai ar dinaminis savybių generavimas, pirminių procesorių mixin'ai yra pranašesni. -
Tiekėjų prefiksai: Nors Autoprefixer tai tvarko po apdorojimo, pirminių procesorių mixin'ai gali tiesiogiai apimti tiekėjų prefiksus, o tai buvo pagrindinis istorinis naudojimo atvejis.
-
Gilus įdėjimas ir paveldėjimas (atsargiai): Pirminiai procesoriai palengvina selektorių įdėjimą ir savybių paveldėjimą, o tai kartais gali supaprastinti sudėtingą komponentų stiliavimą (nors per didelis įdėjimo naudojimas gali lemti pernelyg specifinį ir sunkiai perrašomą CSS).
-
Įsitvirtinę įrankių rinkiniai: Jei jūsų komanda jau naudoja pirminį procesorių ir turi brandžią darbo eigą, natūralu pasinaudoti jo mixin'ų galimybėmis.
-
Parametrinis pakartotinis naudojimas: Kai reikia sukurti labai pritaikomus stilių blokus, kurie priima kelis argumentus (pvz., mixin'as dinamiškiems tinklelio stulpeliams ar lankstiems mygtukų dydžiams).
Kada pasikliauti tik natūraliu CSS (ir individualizuotomis savybėmis)
-
Paprastesni projektai: Mažesniuose projektuose arba tuose, kuriems nereikia sudėtingo stiliavimo, pirminio procesoriaus kūrimo žingsnio pridėtinės išlaidos gali būti nepateisinamos.
-
Našumui kritiškos aplinkos: Kūrimo įrankių grandinės sudėtingumo sumažinimas kartais gali lemti greitesnius kūrimo ciklus labai liesose aplinkose.
-
Reikšmių pakartotinis naudojimas: Paprastam bendrų reikšmių (spalvų, šriftų, atstumų vienetų) pakartotiniam naudojimui CSS individualizuotos savybės yra natūralus, labai našus ir kūrėjams draugiškas sprendimas.
-
Manipuliavimas vykdymo metu: Individualizuotas savybes galima manipuliuoti JavaScript vykdymo metu, o tai neįmanoma su pirminių procesorių mixin'ais (nes jie kompiliuojami į statinį CSS).
-
Suderinamumas: Individualizuotos savybės yra natūralios naršyklei, todėl jos yra visuotinai suprantamos ir derinamos be šaltinio žemėlapio ar žinių apie pirminį procesorių.
Hibridiniai požiūriai ir post-procesoriai
Daugelis šiuolaikinių kūrimo darbo eigų taiko hibridinį požiūrį. Įprasta naudoti pirminį procesorių, pvz., Sass, dėl jo galingų funkcijų (įskaitant mixin'us sudėtingai logikai ir parametrizuotiems stiliams), o tada naudoti post-procesorių, pvz., PostCSS. PostCSS su įskiepiais gali atlikti tokias užduotis kaip:
-
Automatinis prefiksavimas: Automatiškai pridedami tiekėjų prefiksai.
-
CSS minifikavimas: Failo dydžio mažinimas.
-
Būsimo CSS polifilinimas: Naujų, eksperimentinių CSS funkcijų pavertimas plačiai palaikomu CSS (nors
@apply
jau nebėra). -
Individualizuotų savybių atsarginės parinktys: Suderinamumo užtikrinimas senesnėms naršyklėms.
Šis derinys leidžia kūrėjams pasinaudoti geriausiu iš abiejų pasaulių: išraiškinga pirminių procesorių galia kūrimui ir optimizavimo bei ateities apsaugos galimybėmis, kurias suteikia post-procesoriai diegimui.
Globalios geriausios mixin'ų taikymo praktikos
Nepriklausomai nuo pasirinktų įrankių, geriausių mixin'ų taikymo praktikų laikymasis yra labai svarbus norint palaikyti švarų, keičiamo mastelio ir bendradarbiavimui tinkamą kodo bazę, ypač globalioms komandoms, kur nuoseklumas ir aiškumas yra svarbiausi.
1. Mixin'ų pavadinimų suteikimo taisyklės
Priimkite aiškias, aprašomąsias ir nuoseklias pavadinimų suteikimo taisykles savo mixin'ams. Naudokite "kebab-case" ir užtikrinkite, kad pavadinimas tiksliai atspindėtų mixin'o paskirtį.
-
Gerai:
@mixin flex-center
,@mixin button-variant($color)
,@mixin font-size($scale)
-
Blogai:
@mixin fc
,@mixin btn(c)
,@mixin fs
(per daug paslaptinga)
2. Mixin'ų organizavimas (daliniai ir moduliai)
Augant projektui, augs ir jūsų mixin'ų biblioteka. Organizuokite mixin'us į logiškus dalinius failus (pvz., _mixins.scss
, _typography.scss
, _buttons.scss
) ir importuokite juos į savo pagrindinę stilių lentelę. Tai skatina moduliškumą ir leidžia kūrėjams lengvai rasti ir pakartotinai naudoti esamus mixin'us.
Struktūros pavyzdys:
scss/
├── base/
│ ├── _reset.scss
│ └── _typography.scss
├── components/
│ ├── _button.scss
│ └── _card.scss
├── layouts/
│ └── _grid.scss
├── utilities/
│ ├── _mixins.scss /* Visi bendrosios paskirties mixin'ai */
│ └── _functions.scss
├── vendors/
│ └── _normalize.scss
└── main.scss
Jei _mixins.scss
failas tampa per didelis, jame galite turėti specifinius failus skirtingoms mixin'ų kategorijoms (pvz., _mixins-layout.scss
, _mixins-effects.scss
).
3. Mixin'ų dokumentavimas
Didelėms ar globaliai paskirstytoms komandoms išsamus mixin'ų dokumentavimas yra būtinas. Paaiškinkite, ką kiekvienas mixin'as daro, kokius argumentus priima (jų tipus, numatytąsias reikšmes) ir pateikite naudojimo pavyzdžių. Įrankiai, tokie kaip SassDoc, gali automatiškai generuoti dokumentaciją iš komentarų jūsų Sass failuose, o tai labai padeda įtraukti naujus komandos narius iš įvairių sluoksnių.
Pavyzdys: mixin'o dokumentavimas
/// Generuoja adaptyvias atitraukimo pagalbines klases.
/// @param {Number} $max - Maksimalus indeksas pagalbinėms klasėms (pvz., 5 klasei .padding-5).
/// @param {String} $step - Pagrindinis atitraukimo vienetas (pvz., '5px', '0.5rem').
/// @example
/// @include generate-padding-utilities(3, 10px);
/// // .padding-1 { padding: 10px; }
/// // .padding-2 { padding: 20px; }
/// // .padding-3 { padding: 30px; }
@mixin generate-padding-utilities($max, $step) {
/* ... mixin'o kodas ... */
}
4. Našumo svarstymai
Nors mixin'ai skatina švaresnį kodą, būkite atidūs kompiliuoto CSS išvesčiai:
-
Išvesties dydis: Kiekvieną kartą, kai mixin'as yra
@include
'inamas, jo CSS savybės yra dubliuojamos kompiliuotoje išvestyje. Dideliems mixin'ams, įtrauktiems daug kartų, tai gali lemti didesnius CSS failų dydžius. Naudokite minifikavimą kūrimo proceso metu, kad tai sušvelnintumėte. -
Kompiliavimo laikas: Labai sudėtingi mixin'ai su plačiais ciklais ar sąlygine logika, arba didžiulis mixin'ų įtraukimų skaičius, gali padidinti CSS kompiliavimo laiką. Optimizuokite mixin'us efektyvumui, kur įmanoma.
-
Specifiškumas: Patys mixin'ai nesukelia specifiškumo problemų, išskyrus tuos selektorius, į kuriuos jie yra įtraukti. Tačiau užtikrinkite, kad jūsų mixin'ų generuojamas CSS gerai integruotųsi su jūsų bendros CSS architektūros specifiškumo taisyklėmis.
5. Prieinamumo pasekmės
Nors mixin'ai yra CSS kūrimo įrankis, jų generuojami stiliai tiesiogiai veikia prieinamumą. Užtikrinkite, kad bet kokie mixin'ai, susiję su fokuso būsenomis, spalvų kontrastu ar interaktyviais elementais, atitiktų WCAG (Web Content Accessibility Guidelines) standartus. Pavyzdžiui, mygtuko mixin'as turėtų apimti tinkamus fokuso stilius.
Pavyzdys: prieinamas fokuso stilius mixin'e
@mixin interactive-focus-styles {
&:focus-visible {
outline: 2px solid var(--focus-ring-color, #007bff);
outline-offset: 2px;
}
}
.my-link {
@include interactive-focus-styles;
color: blue;
text-decoration: underline;
}
:focus-visible
(arba jo polifilo) naudojimas yra šiuolaikinė geriausia praktika prieinamumui, nes fokuso kontūras rodomas tik tada, kai vartotojas naršo klaviatūra ar kita ne žymeklio įvestimi.
6. Palaikomumas ir komandinis bendradarbiavimas
Globalioms komandoms nuoseklumas yra raktas. Nustatykite aiškias gaires, kada kurti naują mixin'ą, kada modifikuoti esamą ir kada rinktis paprastesnes pagalbines klases ar natūralias CSS individualizuotas savybes. Kodo peržiūros yra būtinos siekiant užtikrinti šių gairių laikymąsi ir palaikyti aukštos kokybės, skaitomą kodo bazę, kurią gali suprasti ir prie kurios gali prisidėti kūrėjai iš įvairių techninių sluoksnių.
Ateities tendencijos CSS pakartotiniame naudojime
Žiniatinklio platforma nuolat evoliucionuoja. Nors pirminių procesorių mixin'ai išlieka labai aktualūs, CSS darbo grupė toliau tiria naujas natūralias funkcijas, kurios galėtų paveikti, kaip mes artėjame prie pakartotinio naudojimo ateityje.
-
Konteinerių užklausos: Nors tai nėra tiesioginis mixin'o pakaitalas, konteinerių užklausos (
@container
) leidžia elementus stilizuoti pagal jų tėvinio konteinerio dydį, o ne pagal peržiūros sritį. Tai įgalina kurti labiau inkapsuliuotus, pakartotinai naudojamus komponentus, kur komponento vidinis išdėstymas gali prisitaikyti pagal jam skirtą erdvę, nepriklausomai nuo to, kur jis yra puslapyje. Tai sumažina sudėtingų, globalių medijos užklausų mixin'ų poreikį. -
CSS sluoksniai (
@layer
): CSS sluoksniai suteikia būdą organizuoti stilių lenteles į atskirus sluoksnius, suteikiant kūrėjams daugiau kontrolės ties kaskada. Tai gali padėti valdyti specifiškumą ir išvengti netyčinių stilių perrašymų, netiesiogiai palaikant geresnę pakartotinai naudojamų stilių organizaciją. -
Būsimos natūralios "mixin" tipo funkcijos: Diskusija dėl natūralios CSS funkcijos, panašios į
@apply
ar pirminių procesorių mixin'us, tęsiasi. Bendruomenė pripažįsta deklaracijų grupavimo poreikį, o ateities specifikacijos gali pristatyti naujus mechanizmus, kaip tai išspręsti našiu ir semantiškai teisingu būdu.
Būti informuotam apie šiuos pokyčius yra būtina norint ateityje apsaugoti savo CSS architektūrą ir užtikrinti, kad jūsų mixin'ų taikymo strategijos išliktų suderintos su naujausiais žiniatinklio standartais.
Išvada
"CSS apply taisyklė", ypač mixin'ų taikymo kontekste, yra esminė koncepcija šiuolaikiniame front-end kūrime. Nors natūrali CSS @apply
taisyklė buvo nebenaudojama, pagrindinis poreikis pakartotiniam naudojimui, moduliškumui ir palaikomumui CSS išlieka stipresnis nei bet kada anksčiau.
CSS pirminiai procesoriai, tokie kaip Sass, Less ir Stylus, ir toliau teikia tvirtas ir lanksčias mixin'ų galimybes, įgalindami kūrėjus rašyti efektyvesnes, dinamiškesnes ir lengviau valdomas stilių lenteles. Naudodami mixin'us su argumentais, turinio blokais ir sąlygine logika, kūrėjai gali abstrahuoti sudėtingus stiliavimo modelius į pakartotinai naudojamus komponentus, dramatiškai sumažindami pasikartojimą ir pagerindami nuoseklumą didelio masto projektuose ir globaliose dizaino sistemose.
Be to, supratimas apie natūralių CSS individualizuotų savybių galią reikšmių pakartotiniam naudojimui, derinamas su strateginiu pagalbinių klasių ir komponentais pagrįsto CSS naudojimu, užbaigia įrankių rinkinį, skirtą kurti labai našias ir palaikomas žiniatinklio sąsajas. Pirminių procesorių stiprybės ir natūralaus CSS efektyvumo derinys, papildytas kruopščiu globalių geriausių praktikų laikymusi pavadinimų suteikimo, organizavimo, dokumentavimo ir prieinamumo srityse, yra profesionalaus CSS kūrimo šiandienos ženklas.
Žiniatinklio platformai evoliucionuojant, keisis ir mūsų požiūris į stiliavimą. Įvaldę mixin'ų taikymo meną ir būdami atidūs naujoms CSS funkcijoms, kūrėjai gali užtikrinti, kad jų stilių lentelės būtų ne tik funkcionalios, bet ir elegantiškos, keičiamo mastelio ir pasirengusios iššūkiams kuriant tikrai globaliai auditorijai.