Pretprocesori. Video prezentacija tečaja “Sass and Less Preprocessors. Automatizacija i pojednostavljenje Front-end razvoja"
CSS pretprocesor je CSS dodatak koji pruža nove značajke i funkcionalnost CSS-u pomoću dodane sintakse.
Svrha pretprocesora: osigurati prikladne sintaktičke konstrukcije za web programere kako bi pojednostavili i ubrzali razvoj i održavanje stilova u projektima.
CSS predprocesori čine kod napisan korištenjem pretprocesorskog jezika čistim i valjanim.
Uz pomoć pretprocesora, vaš pisani kod postaje: čovjeku čitljiv, strukturiran i logičan, produktivan.
Među najpopularnijim pretprocesorima su Less, Sass (Scss), Stylus. Također manje uočljivi alati u ovom području su Closure Stylesheets, CSS Crush, oni su manje popularni na ovaj trenutak, no još uvijek ih neki programeri koriste. Pokušajmo razumjeti mogućnosti i značajke Less, Sass (Scss), Stylus.
Standardna upotreba CSS-a prilično je složena. Sintaksa bez ugniježđenja izravno je teška za vizualnu percepciju. Nedostatak normalnih varijabli i funkcija čini CSS kod usko fokusiranim i s mnogo nepotrebnih i nepotrebnih detalja.
Dostupna dokumentacija - sada svatko može svladati odabrani predprocesor u kratkom vremenu, bez dodatnih troškova. Druga prednost je jednostavnost korištenja pretprocesora. Da biste to učinili, samo trebate instalirati poseban program, koji će nadzirati datoteke namijenjene predprocesoru, a kada se one promijene, kompajlirati sadržaj tih datoteka u čisti CSS kod.
Za naprednije korisnike postoje posebni alati za izgradnju projekata.
Less je najpopularniji i najčešće korišten pretprocesor. Razvijen na temelju JavaScripta, uključuje osnovne mogućnosti pretprocesora, ali ne pruža uvjetne konstrukcije i petlje u uobičajenom smislu. Zbog svoje jednostavnosti i konciznosti, ima standardnu CSS sintaksu i mogućnost proširenja funkcionalnosti upotrebom dodataka.
LESS pruža dinamičke mogućnosti za CSS: varijable, miksine, operacije i funkcije. Dokumentacija je vrlo prilagođena programerima, a sintaksa je vrlo slična čistom CSS-u. Popularni okviri, kao što je Twitter Bootstrap, u velikoj mjeri koriste MANJE dinamičke značajke. Međutim, LESS omogućuje ponovno korištenje klasa kao mixina bilo gdje u tablici stilova.
Još jedan moćan i popularan predprocesor je Sass. Ogromna zajednica programera formirala se oko ovog alata. Osnovan je 2007. kao modul za HAML i napisan je u Rubyju (omogućuje C++ priključak). Ima širok raspon značajki u usporedbi s Lessom. Pretprocesor proširuje svoju funkcionalnost bibliotekom Compass, što omogućuje ići dalje CSS okvir i raditi u većem obimu. Pruža dvije vrste sintakse: Sass (Syntactically Awesome Style Sheets) je jednostavnija CSS sintaksa koja se temelji na identitetu. On se smatra više zastarjela verzija. Scss (Sassy CSS) koji se temelji na standardnoj CSS sintaksi.
– prilično mlad, ali već obećavajući CSS predprocesor. Razvijen još 2010. Mnogi ga smatraju prikladnim i proširivim pretprocesorom te fleksibilnijim od Sassa. Razvijeno u JavaScriptu. Postoji podrška za mnoge opcije sintakse od onih nalik na CSS do jednostavnijih i lakših.
Korisni alati za programere:
- CodeKit: kompajlira Sass, LESS i Stylus datoteke, a zatim automatski ponovno pokreće vaš web preglednik kada se datoteke ažuriraju. To uključuje optimizaciju slika projekta kako bi se poboljšala izvedba sustava. Tehnologija se plaća, ali postoji i probna verzija za rad.
- LiveReload: provjerava promjene datoteka, zatim ih obrađuje i automatski ponovno učitava web preglednik. Verzija radi za Mac i Windows.
- Scout: radi sa Sassom i Compassom u Ruby okruženju. Radi za Mac i Windows.
- SimpLESS: Osnovni i jednostavni LESS CSS kompajler za Mac i Windows.
Kako biste odabrali pravi predprocesor za svoj rad, pokušajte koristiti nekoliko. A na temelju rezultata testiranja bit će vam puno lakše napraviti svoj izbor. Također ne zaboravite da kada svladavate predprocesor, ne učite novi jezik, već samo novu sintaksu i mogućnosti. Company™ vam želi ugodan rad u svijetu CSS-a!
2545 puta 1 Pregledano puta danas
I kad će se ovi developeri konačno smiriti i prestati maltretirati novajlije!? Prije nego što sam stigao u potpunosti razumjeti CSS, rekli su mi: "Svi pravi dizajneri izgleda odavno su prešli na pretprocesore. Pa, kakav je ovo čisti CSS uoči 2020.!?" Što uraditi?
Prvo, programeri nikada neće prestati smišljati nove tehnologije. A profesionalni dizajneri izgleda vrlo su im zahvalni na tome. Jezik tablice CSS stilovi, izumljeni su u vrijeme kada su web stranice bile primitivne. No kako su godine prolazile, stranice su postajale sve složenije i masivnije, ali su metode izgleda ostale iste. Dizajneri izgleda umorni su od pisanja sličnih dijelova koda. Bilo je nemoguće brzo promijeniti boju na mjestu. Pojavila se potreba za većom automatizacijom izgleda pa su se pojavili pretprocesori CSS koda. A danas ćemo govoriti o jednom od njih, LESS pretprocesoru.
Sastavljanje LESS i VS kodaSve što trebate za kompajliranje LESS koda je VS Code editor i proširenje Easy Less. Kako radi?
Svaki put kada se promjene spremaju, LESS datoteke se kompiliraju u CSS datoteke. Preglednici još nisu naučili razumjeti LESS, trebaju CSS kod.
MANJE VarijableSvojstva koja se najčešće koriste stavljamo u varijable. Stranica obično koristi ponavljajuće boje i porodice fontova. Sve boje stavljamo u varijable, a zatim u pravilo ne mijenjamo kod boje, već varijablu. Pitate: "U čemu je fora? Ipak moram nešto prepisati, koja je razlika?"
Glavna značajka je brza promjena boje. Boja se mijenja samo jednom, u varijabli. Zamjena boje u jednoj varijabli zamijenit će boju na svim stranicama stranice. Sama ova značajka je dovoljna da počnete koristiti LESS. Varijable deklariramo u LESS i u njih spremamo vrijednosti koje su nam potrebne; dajemo smislena imena varijablama.
@primarni: #194eb4;
@sekundarni: #f2b834;
@uspjeh: #4cb514;
@crna: #000;
@bijelo: #fff;
Sada pišemo normalan kod, kao što smo radili u CSS-u, ali umjesto vrijednosti zamjenjujemo varijable.
MANJE div(ispuna: 0;
Crna boja;
}
Nakon spremanja, CSS kod se kompilira. Uopće ne diramo CSS datoteku, sav posao se obavlja u LESS datoteci. Sva svojstva koja se često ponavljaju možete staviti u varijable.
CSS div(ispuna: 0;
obitelj-fontova: Roboto, sans-serif;
boja: #000;
) Mixins u LESS
Miksini su korisni za ponovno koristiti skup svojstava - okviri, gumbi, naslovi. Grupirani skup svojstava koja se mogu primijeniti na različite birače.
Stranica ima nekoliko gumba iste vrste u različitim bojama, ali s istim svojstvima fonta. Mi stvaramo mixin koji pomaže automatizirati proces stvaranja gumba.
Button_font(
transformacija teksta: velika slova;
veličina fonta: 18px;
}
Dodajte mixin svojstvima gumba za odabir.
Portfelj__gumb (
ispuna: 15px 80px;
boja: #344258;
.button_font;
}
Na izlazu dobivamo:
Portfelj__gumb (
ispuna: 15px 80px;
boja: #344258;
obitelj-fontova: "DIN Pro Bold";
transformacija teksta: velika slova;
veličina fonta: 18px;
}
Umjesto dupliciranja naziva selektora, koristimo simbol ampersand.
Portfelj__stavka (
položaj: relativan;
boja pozadine: #3c3c3c;
}
&: lebdi (
boja pozadine: #ccc;
}
}
položaj: relativan;
boja pozadine: #3c3c3c;
}
.portfolio__item:lebdi (
boja pozadine: #ccc;
) Medijski upiti u MANJE
Možete pisati medijske upite izravno unutar selektora.
MANJE.zaglavlje__naslov(boja: #344258;
veličina fonta: 40px;
ispuna: 0 20px;
@medijski samo zaslon i (maksimalna širina: 320 px)(
veličina fonta: 22px;
}
} CSS.zaglavlje__naslov(
boja: #344258;
veličina fonta: 40px;
obitelj-fontova: "DIN Pro", sans-serif;
ispuna: 0 20px;
}
@medijski samo zaslon i (maksimalna širina: 320 px) (
.zaglavlje__naslov(
veličina fonta: 22px;
}
) Zaključak
Ovaj članak ne pokriva niti 25% svih značajki koje LESS nudi. Da, to nije potrebno, svrha članka je motivirati početnike da počnu koristiti pretprocesore. Počevši od najjednostavnijih, postupno prelazeći na složenije.
Proces pisanja HTML-a i CSS-a može biti pomalo naporan i zahtijeva puno istih zadataka iznova i iznova. Zadaci poput zatvaranja oznaka u HTML-u ili monotonog pregledavanja heksadecimalnih vrijednosti boja u CSS-u.
Takvi različiti zadaci, u pravilu, su mali i malo smanjuju učinkovitost. Srećom, ove i nekoliko drugih neučinkovitosti pretprocesori su prepoznali i doveli u pitanje.
Predprocesor je program koji uzima jedan tip podataka i pretvara ga u drugi tip podataka. U slučaju HTML-a i CSS-a, neki od najpopularnijih pretprocesorskih jezika su Haml i Sass. Haml se pretvara u HTML, a Sass u CSS.
Od svog početka, u rješavanju nekih od najčešćih problema, Haml i Sass su pronašli mnoge dodatne načine za proširenje HTML mogućnosti i CSS. Ne samo uklanjanjem neučinkovitih zadataka, već i stvaranjem metoda koje razvoj web stranica čine lakšim i logičnijim. Pretprocesori su također postali popularni zbog različitih okvira koji ih podržavaju; jedan od najpopularnijih je Compass.
HamlCodeKit također podržava druge predprocesore koji bi vam također mogli biti korisni.
DoctypePrvi dio pisanja dokumenta u Hamlu je znati koju vrstu doctype koristiti. Kada radite s HTML dokumentima, glavna vrsta dokumenta bit će HTML5. U Hamlu su vrste dokumenata definirane s tri uskličnika (!!!), iza kojih slijedi nešto specifično ako je potrebno.
Zadani tip dokumenta u Hamlu je HTML 1.0 Transitional. Stoga, da biste ga učinili poput HTML5, morate proći brojku pet nakon uskličnika (!!! 5).
Spremni HTML
Deklaracija elemenata
Jedna od značajki koje definiraju Haml je njegova sintaksa i način deklariranja i ugniježđivanja elemenata. HTML elementi, obično sadrže početnu i završnu oznaku, ali Haml elementi imaju samo jednu početnu oznaku. Elementi počinju znakom postotka (%), a zatim uvlačenje određuje ugniježđivanje. Uvlačenje u Hamlu može se napraviti s jednim ili više razmaka, ali je važno da uvlačenje ostane isto. Kartice i razmaci ne mogu se kombinirati i isti broj kartica ili razmaka mora biti isti u cijelom dokumentu.
Uklanjanje potrebe za otvaranjem i zatvaranjem oznaka i potrebna struktura uvlačenja stvara izgled koji je lako pratiti. Oznake se u bilo kojem trenutku mogu brzo pogledati i promijeniti bez poteškoća.
%body %header %h1 Pozdrav svijete! %odjeljak %p Lorem ipsum dolor sit amet.
Sastavljen HTML
Pozdrav svijete!
Lorem ipsum dolor sit amet.
Obrada riječiTekst u Haml-u može se postaviti u isti redak kao i deklarirani element ili uvučen ispod elementa. Tekst ne može biti istovremeno u istom retku kao deklarirani element i ugniježđen ispod njega; mora postojati jedna ili druga opcija. Gornji primjer može se prepisati na sljedeći način:
%body %header %h1 Pozdrav svijete! %odjeljak %p Lorem ipsum dolor sit amet.
AtributiAtributi, kao i elementi, deklarirani su malo drugačije u Hamlu. Atributi se deklariraju odmah nakon elementa, u vitičastim ili zagradama, ovisno o tome želite li koristiti Ruby ili HTML sintaksu. Atributi stila Ruby koristit će standardnu hash sintaksu inside(), dok će atributi in HTML stil koristit će standard HTML sintaksa iznutra ().
%img(:src => "shay.jpg", :alt => "Shay Hou") %img(src: "shay.jpg", alt: "Shay Hou") %img(src="shay.jpg" alt="Shay Hou") !}
Sastavljen HTML
Klase i ID-ovi
Po želji, klase i identifikatori mogu se deklarirati kao i drugi atributi, ali se s njima može postupati i malo drugačije. Umjesto popisa atributa klase i id-a s njihovim vrijednostima unutar zagrada, vrijednost se može navesti izravno nakon elementa. Koristeći ili točku za klase ili hash za identifikator, vrijednost se može dodati odmah nakon elementa.
Osim toga, atributi se mogu miješati spajanjem u odgovarajući format. Klase moraju biti odvojene točkama, a ostali atributi mogu se dodati pomoću jednog od prethodno navedenih formata.
%section.feature %section.feature.special %section#hello %section#hello.feature(role="region")
Sastavljen HTML
Klase i identifikatori u
U slučaju da se klasa ili identifikator koristi u , %div se može izostaviti i vrijednost klase ili identifikatora može se uključiti izravno. Opet, klase bi trebale biti definirane točkom, a identifikatori hashom.
Sjajno.sjajno.lekcija #početak.lekcija
Sastavljen HTML
Booleovi atributi
Booleovi atributi tretiraju se isto kao da su u Rubyju ili HTML-u, ovisno o korištenoj sintaksi.
%input(:type => "checkbox", :checked => true) %input(type="checkbox" checked=true) %input(type="checkbox" checked)
Sastavljen HTML
Izbjegavanje teksta
Jedna od prednosti Hamla je mogućnost izračunavanja i pokretanja Rubyja, ali to nije uvijek željena radnja. Tekst i linije koda mogu se izbjeći korištenjem obrnute kose crte (\), koja omogućuje eksplicitni prikaz teksta bez izvršenja.
U donjem primjeru, prvi uzorak = @author izvršava Ruby, dobivajući ime autora iz aplikacije. Drugi uzorak počinje obrnutom kosom crtom koja izlazi iz teksta i ispisuje se takav kakav jest bez izvršenja.
Autor = @autor \= @autor
Sastavljen HTML
Shay Hou = @autor
Alternative za izbjegavanje tekstaS vremena na vrijeme, izbjegavanje teksta nije dovoljno i Ruby je potreban za generiranje željenog izlaza. Jedan popularan primjer za to je pokušaj uključivanja točke odmah nakon veze, ali ne kao dio teksta veze. Stavite točku na nova linija nije prihvatljivo jer će se smatrati prazna vrijednost klase, uzrokujući grešku kompilacije. Dodavanje obrnute kose crte prije točke izbjegava znak, ali stavlja razmak između posljednje riječi i točke. Opet, ne daje željeni rezultat.
U tim slučajevima dobro dođe Ruby helper. Primjer u nastavku koristi pomoćnik za postavljanje točke odmah iza posljednje riječi, ali izvan teksta veze.
%p Shay - = uspjeti "." do %a(:href => "#") dobro obavljeno
Sastavljen HTML
Shay - Dobro napravljeno.
KomentariPoput elemenata i atributa, komentarima se u Hamlu postupa malo drugačije. Kôd se može jednostavno komentirati pomoću jedne kose crte (/). Pojedinačni reci mogu se komentirati korištenjem kose crte na početku retka, a blokovi koda mogu se komentirati tako da budu ugniježđeni ispod kose crte.
%div / Redak komentara Trenutni redak / %div Komentirani blok
Sastavljen HTML
Trenutni redak
Uvjetni komentariUvjetni komentari također se drugačije obrađuju u Hamlu. Za stvaranje uvjetnog komentara koristite uglate zagrade() oko uvjeta. Ove uglate zagrade moraju se staviti odmah iza kose crte.
/ %script(:src => "html5shiv.js")
Sastavljen HTML
Tihi komentari
Haml također pruža mogućnost stvaranja posebnih tihih komentara. Tihi komentari razlikuju se od osnovnih HTML komentara po tome što se, nakon kompajliranja, sav sadržaj unutar tihog komentara u potpunosti uklanja sa te stranice i ne pojavljuje se u rezultatima. Tihi komentari započinju crticom, nakon koje slijedi hash (-#). Kao i kod drugih komentara, tihi komentari mogu se koristiti za uklanjanje jednog ili više redaka pomoću ugniježđivanja.
%div -# Izbrisana linija Trenutačna linija
Sastavljen HTML
Trenutni redak
FilteriHaml nudi nekoliko filtara koji vam omogućuju korištenje različitih vrsta unosa unutar Hamla. Filtri počinju dvotočkom, nakon čega slijedi naziv filtra, na primjer :markdown, sa svim sadržajem za filtriranje privitka ispod njega.
Uobičajeni filtriIspod su neki uobičajeni filtri, uključujući najpopularnije: css i: javascript.
- :cdata
- :kava
- :pobjegao
- :javascript
- :manje
- :smanjenje
- :maruku
- :običan
- :sačuvati
- :rubin
- :sass
- :scss
- :tekstil
:javascript $("button").on("click", function(event) ( $("p").hide("slow"); ));
Sastavljen HTML
$("gumb").on("klik", funkcija(događaj) ( $("p").hide("sporo"); ));
CSS i Sass filteri
:css .container ( margina: 0 automatski; širina: 960px; ) :sass .container margina: 0 automatska širina: 960px
Sastavljen HTML
.container ( margina: 0 auto; širina: 960px; )
Ruby interpolacijaKao što je ranije spomenuto, Haml može procijeniti Ruby, a ponekad mogu postojati slučajevi u kojima se Ruby mora procijeniti unutar običnog teksta. U ovom slučaju, Ruby se mora interpolirati umotavanjem potrebnog koda u Ruby.
Ispod je primjer Rubyja koji je interpoliran kao dio naziva klase.
%div(:class => "student-#(@student.name)")
Sastavljen HTML
SCSS i Sass
SCSS i Sass su jezici za predprocesiranje koji se prevode u CSS. Pomalo su poput Hamla i olakšavaju pisanje koda, a nude vrlo malo kontrola. Pojedinačno, SCSS i Sass imaju isto porijeklo, ali tehnički imaju različitu sintaksu.
Radi sažetosti, Haml i Sass bili su jedini predprocesori koji su obrađeni u ovom vodiču. Također su odabrani jer su izgrađeni pomoću Rubyja i izravno se uklapaju u aplikacije Ruby on Rails. Također su dobili ogromnu podršku zajednice.
Kada se radi o odabiru pretprocesora, važno je razmotriti što je najbolje za vaš tim i projekt. Projekti izgrađeni u Node.js vjerojatno mogu imati više koristi od Jadea i Stylusa. Najvažniji aspekt koji treba uzeti u obzir je ono na što je vaš tim navikao koristiti. Istražite svaki projekt i odaberite najinformiranije rješenje.
Resursi i veze- Haml - HTML jezik za označavanje apstrakcije
- Sass - Sintaktički izvrsne tablice stilova
- Sass Playground na SassMeisteru
Imate li kakvih pitanja?
Implementacija dizajnerskog izgleda je nemoguća bez upotrebe HTML-a i CSS-a. Ako nam označni jezik omogućuje skiciranje predloška potrebnih elemenata, tada CSS pretvara ovaj predložak u pravi tip, kao u izvoru. Čini se da uz pomoć čistog CSS-a možete napraviti stranicu onakvom kakvom je kupac želio.
Međutim, ako netko otvori vašu jednu CSS datoteku i pokuša nešto podesiti, jeste li sigurni da će kôd biti čitljiv, uređivati, strukturiran i razumljiv? Ako je vaš projekt ogroman, s mnogo dijelova, jeste li sigurni da ga možete lako podržati u budućnosti? Ako koristite CSS predprocesor, onda je odgovor da, a osim toga, ovo je način da automatizirate izgled web stranice. Zašto? Sada ćemo saznati.
Što je CSS predprocesor?
Koliko ja razumijem, ovo je dodatak standardnom CSS-u koji proširuje standardne mogućnosti, dodaje neke funkcije i omogućuje pisanje čitljivijeg i lakšeg za razumijevanje koda. Na izlazu izvor kompajlira u CSS na koji smo navikli. Korištenje takvog alata u modernom razvoju je “must have” i savjetujem svakom dizajneru izgleda ili programeru da se upozna s njim. Treba dodati da ima puno toga za izabrati, jer ima dosta CSS pretprocesora, ali treba istaknuti one najpopularnije:
- Olovka
Svi gore navedeni predprocesori imaju gotovo identičnu funkcionalnost, samo su male razlike u sintaksi. Vratimo se sada na ranije postavljeno pitanje: koje nam prednosti daju predprocesori kako bi naš kod bio praktičniji i lakši za održavanje? Ovo je, prije svega, gniježđenje. Ova nam značajka daje priliku za strukturiranje elemenata, jednostavno pronalaženje roditelja elementa, brzo pisanje pseudo-klasa i pseudo-elemenata, pa čak i korištenje BEM-a! npr.:
.staza
boja: #fff
&__titula
ispuna: 10px
&:lebdjenje, &:fokus
boja: plava
Pogledajte ovaj isječak koda napisan u Sass-u. Sve se to prevodi u sljedeći CSS:
Staza (boja: #FFF;)
.track__title ( padding: 10px;)
.track__title:hover, .track-title:focus (boja: plava)
Lakonski, praktičan, razumljiv, struktura od roditelja do djeteta je sjajna, zar ne? Druga, ne manje važna prednost su varijable. Načelo njihovog rada je krajnje jednostavno: naziv varijable počinje simbolom $, a zatim sam naziv. Vrijednost pišemo kroz dvotočku - to može biti boja u bilo kojem prikladnom obliku, vrijednosti uvlake, širina, veličina fonta i tako dalje. Kao rezultat, dobit ćemo nešto poput ovoga:
$btn-boja: plava;
$font-main-size: 16px;
A upotreba će izgledati ovako:
Blok (
veličina-font-a: $font-main-size;
}
Zamislite samo kako je to zgodno. Ako trebate promijeniti boju gumba na cijeloj stranici, onda to trebate učiniti samo na jednom mjestu! Pa idemo dalje. Treća i najveća stvar koju nam CSS predprocesori mogu ponuditi je korištenje mixina. U našem uobičajenom razumijevanju, miksini su funkcije koje se mogu koristiti nekoliko puta bez ponavljanja istih dijelova koda (sjetite se jednog od programskih principa - DRY - Don't repeat yourself). Da budem iskren, ne koristim mixins vrlo često, očito nije bilo tako hitne potrebe, ali ipak ću pokazati nekoliko primjera. Jedna od funkcija koju najviše koristim je sljedeća:
@function em($pixels, $context: $browser-context) (
@if (bez jedinica ($piksela)) (
$piksela: $piksela * 1px;
}
@if (bezjedinica($kontekst)) (
$kontekst: $kontekst * 1px;
}
@return $pixels / $context * 1em;
}
A njegova primjena je sljedeća:
tijelo(
veličina fonta: em(14px);
}
Da, kao što razumijete, ovo je samo pretvorba veličine fonta iz PX u Em (živjeli dani kada ste za takve sitnice koristili posebne usluge ili ih sami izračunavali na kalkulatoru). Sljedeći primjer također štedi mnogo vremena:
@mixin input-placeholder (
&.placeholder ( @content; )
&:-moz-placeholder ( @content; )
&::-moz-placeholder ( @content; )
&:-ms-input-placeholder ( @content; )
&::-webkit-input-placeholder ( @content; )
}
Njegova upotreba:
unos, tekstualno područje (
@include input-placeholder (
boja: $siva;
}
}
Postoji mnogo više primjera koji se mogu dati, međutim, vrijedi početi sami koristiti mixins kako biste shvatili koliko je ovaj alat koristan. Možda postoji još jedan razlog zbog kojeg ćete se zaljubiti u CSS predprocesore, a njegovo ime je modularnost. 2018. je, a modularnost je posvuda - od pokretača HTML predložaka do raznih CSS okvira i graditelja projekata.
Moderni CSS je moćan, au kombinaciji s pretprocesorima općenito je borbeni stroj za dizajniranje sadržaja na stranicama. Članak pruža opsežan vodič za Sass/SCSS s primjerima. Nakon što ovo pročitate, naučit ćete kako koristiti miksine, varijable i direktive kako biste imali još veću kontrolu nad svojim stilovima.
Napomena Sav Sass/SCSS kod kompilira se u CSS tako da ga preglednici mogu razumjeti i ispravno prikazati. Trenutačno preglednici ne podržavaju rad sa Sass/SCSS ili bilo kojim drugim CSS predprocesorom izravno, ali standardni CSS specifikacija ne pruža sličnu funkcionalnost.
Zašto koristiti Sass/SCSS umjesto CSS-a?Sass nije dinamičan. Nećete moći generirati i/ili animirati CSS svojstva i vrijednosti u stvarnom vremenu. Ali možete ih stvoriti više učinkovit način i neka ih standardna svojstva (poput CSS animacije) posude od tamo.
SintaksaSCSS zapravo ne dodaje nikakve nove značajke CSS-u osim nove sintakse koja često smanjuje vrijeme kodiranja.
PreduvjetiPostoji 5 CSS predprocesora: Sass, SCSS, Less, Stylus i PostCSS.
Ovaj članak uglavnom pokriva SCSS, koji je sličan Sass-u. Više o ovim predprocesorima možete pročitati na Stack Overflow (izvornik) ili na qaru (prijevod na ruski).
SASS - (.sass) Sintaktički sjajni stilski listovi.
SCSS - (.scss) Sass y C kaskadni listovi stilova.
Ekstenzije .sass i .scss su slične, ali ipak nisu iste. Za fanove naredbeni redak Evo metode pretvorbe:
# Pretvori iz Sass u SCSS $ sass-convert style.sass style.css # Pretvori iz SCSS u Sass $ sass-convert style.scss style.sass
Sass je prva specifikacija za SCSS s ekstenzijom datoteke .sass. Njegov razvoj započeo je još 2006. godine, no kasnije je razvijena alternativna sintaksa s ekstenzijom .scss.
Imajte na umu da drugi predprocesori imaju sličnu funkcionalnost kao SCSS, ali se sintaksa može razlikovati. Također, sve što radi u CSS-u savršeno će raditi i u Sass-u i SCSS-u.
VarijableSass/SCSS vam omogućuje rad s varijablama. U CSS-u su označeni dvostrukom crticom (--), au predprocesorima su predstavljeni znakom dolara ($).
$broj: 1; $boja: #ff0000; $text: "tproger zauvijek."; $text: "TO zauvijek." !zadano; $ništa: nula;
Možete dodijeliti zadanu vrijednost varijablama koje još nemaju vrijednost dodavanjem oznake !default na kraju vrijednosti. U ovom slučaju, ako je varijabli već dodijeljena vrijednost, ona se neće promijeniti; ako je varijabla prazna, bit će joj dodijeljena nova navedena vrijednost.
#kontejner ( sadržaj: $tekst; )
Varijable u Sass-u mogu se dodijeliti bilo kojem svojstvu.
Ugniježđena pravilaStandardni ugniježđeni CSS elementi koji koriste razmak:
/* Ugniježđena pravila */ #A ( boja: crvena; ) #A #B ( boja: zelena; ) #A #B #C p ( boja: plava; )
Isti ugniježđeni elementi koristeći SCSS:
/* Ugniježđena pravila */ #A ( boja: crvena; #B ( boja: zelena; #C p ( boja: plava; ) ) )
Kao što vidite, sintaksa izgleda čistije i manje se ponavlja.
Ovo je posebno korisno pri upravljanju preopterećenim izgledima. Na taj način, poravnanje u kojem su ugniježđena svojstva zapisana u kodu blisko odgovara stvarnoj strukturi izgleda aplikacije.
Iza kulisa, predprocesor ga još uvijek kompajlira u standardni CSS kod (prikazan gore) kako bi se mogao prikazati u pregledniku. Samo mijenjamo način na koji pišemo CSS.
Ampersand #p (boja: crna; a (težina fonta: podebljano; &:lebdjeti (boja: crvena;)))Pomoću znaka & možete eksplicitno odrediti gdje treba umetnuti nadređeni selektor.
Rezultat kompajliranja Sass-a (iz prethodnog primjera) u CSS je ispod.
#p (boja: crna;) #p a (težina fonta: podebljano;) #p a: lebdjeti (boja: crvena;)
Kao rezultat toga, ampersand je preveden u ime nadređenog elementa a (a:hover).
Miksini (poznati i kao nečistoće)Miksini također mogu sadržavati selektore, uključujući one sa svojstvima. I selektori mogu sadržavati reference na nadređeni element kroz znak & (&), sjećate se toga, zar ne?
Primjer rada s više preglednikaNeke stvari u CSS-u prilično je zamorno pisati, posebno u CSS3, gdje povrh toga često morate koristiti veliki broj prefiksa dobavljača (-webkit- ili -moz-).
Mixini vam omogućuju stvaranje grupa CSS deklaracija koje ćete koristiti više puta na cijeloj web stranici. Dobra praksa bila bi koristiti mixins za prefikse dobavljača. Primjer:
@mixin border-radius($radius) ( // Prefiksi za: -webkit-border-radius: $radius; // Chrome i Safari -moz-border-radius: $radius; // Firefox -ms-border-radius: $radijus; // Internet Explorer-o-border-radius: $radijus; // Opera border-radius: $radius; // Standardni CSS ) // Primjer korištenja mixina border-radius nakon stvaranja it.box ( @include border-radius(10px); )
Aritmetičke operacijeKao u stvaran život, ne možete raditi s brojevima koji imaju nekompatibilne vrste podataka (na primjer, zbrajanje px i em).
Zbrajanje i oduzimanje p ( font-size: 10px + 2em; // GREŠKA! font-size: 10px + 6px; // 16px font-size: 10px + 2; // 12px )Uvijek obratite pozornost na vrstu podataka koji se dodaju. Odnosno, pikseli na piksele, slonovi na slonove. Oduzimanje radi na isti način, ali s predznakom minus.
Primjer oduzimanja:
MnoženjeNapravljeno točno kao u CSS-u, koristeći calc(a * b), ali bez calc-a i zagrada. Osim toga, također možete razmakom odvojiti znak množenja od brojeva (5*6 == 5 * 6).
Iznimka Ne možete međusobno množiti piksele. Odnosno, 10px * 10px != 100px . 10px * 10 == 100px.
P ( širina: 10px * 10px; // GREŠKA! širina: 10px * 10; // 100px širina: 1px * 5 + 5px; // 10px širina: 5 * (5px + 5px); // 50px širina: 5px + ( 10px / 2) * 3; // 20px )
PodjelaS dijeljenjem su stvari malo kompliciranije, ali možete to shvatiti jer je u standardnom CSS-u kosa crta rezervirana za korištenje kratkog oblika svojstava notiranja. Primjer ispod.
/* kratki oblik za svojstva pisanja */ font: italic bold .8em/1.2 Arial, sans-serif; /* standardna forma evidencija imovine */ font-style: italic; font-weight: bold; veličina fonta: .8em; visina linije: 1,2; obitelj fontova: Arial, sans-serif;
Postoje tri pomoćnika koji će nagovijestiti mogućnost podjele:
$var1: 20; $var2: 4; p ( top: 16px / 24px; // Prikazuje nepromijenjeno u standardnom CSS-u top: (20px / 5px); // Dijeli (ali samo kada se koriste zagrade) top: #($var1) / #($var2); / / Izlazi kao normalan CSS kod, ne provodi se dijeljenje top: $var1 / $var2; // Dijeljenje se izvodi top: random(4) / 5; // Dijeljenje se izvodi (ako se koristi u kombinaciji s funkcijom) top: 2px / 4px + 3px; // Dijeljenje se izvodi ako se doda još jedna aritmetička operacija)
Rezultat kompilacije u CSS-u:
P ( vrh: 16px / 24px; vrh: 4; vrh: 20 / 4; vrh: 5; vrh: 0.6; vrh: 3.5px; )
OstatakOstatak izračunava ostatak operacije dijeljenja. U nastavku ćemo pogledati kako stvoriti "zebru" za HTML popis.
@mixin zebra() ( @za $i od 1 do 7 ( @if ($i % 2 == 1) ( .stripe-#($i) ( boja-pozadine: crna; boja: bijela; ) ) ) ) * ( @include zebra(); text-align: center; )
Stvaranje zebra miksina prikazano je u gornjem ugrađenom kodu. Naredbe @for i @if opisane su u odjeljku ispod.
Za izradu uzorka morate napisati nekoliko HTML elemenata.
zebra zebra zebra zebra zebra zebra zebra
Rezultat u pregledniku:
Zebra je uspješno generirana zebra mixinom
Operatori usporedbeDirektiva @if uzima SassScript izraz i koristi njegove ugniježđene stilove ako izraz vraća bilo što osim false ili null.
Sljedeće pokazuje kako rade direktive @if i @else kada su ugniježđene unutar mixina.
@mixin razmak($padding, $margin) ( @if ($padding > $margin) ( padding: $padding; ) @else ( padding: $margin; ) .container ( @include spacing(10px, 20px); )
Usporedba na djelu. Miksin razmaka će odabrati veličinu ispune ako je veća od margine.
Nakon kompajliranja u CSS:
Spremnik (ispod: 20px;)
Logički operatoriOpis logičkih operatora
Korištenje Sass logičkih operatora za stvaranje gumba koji ima pozadinu koja se mijenja ovisno o njegovoj širini.
@mixin gumb-boja ($height, $width) ( @if (($height< $width) and ($width >= 35px)) (boja-pozadine: plava; ) @else (boja-pozadine: zelena; ) .button ( @include button-color(20px, 30px) )
ŽiceCSS definira 2 vrste nizova: sa i bez navodnika. Sass prepoznaje oboje. Kao rezultat toga, završit ćete s istom vrstom nizova u CSS-u koju ste koristili u Sass-u.
U nekim slučajevima možete dodati nizove važećim CSS vrijednostima bez navodnika, ali samo ako je dodani niz završni element.
P (font: 50px Ari + "al"; // Kompajlira u 50px Arial)
Primjer u nastavku pokazuje što ne treba činiti.
P ( font: "50px" + Arial; // POGREŠKA! )
Možete dodati linije različiti tipovi, ako u njima nema razmaka. Primjer u nastavku neće se kompilirati.
P:after ( sadržaj: "Vratite Linusa" + Torvalds!; // POGREŠKA! )
P:after ( sadržaj: "Vratite Linusa" + "Torvalds!"; // obratite pozornost na "Torvalds!")
Primjer dodavanja više nizova:
P:after ( sadržaj: "Sudbina " + "čovječanstva" + "-" + "iteracija."; )
Zbrajanje nizova i brojeva:
P:after (sadržaj: "Rekurzija" + 2013 + "sudbina nebesnika"; )
Imajte na umu: svojstvo sadržaja radi samo s pseudoselektorima:before i:after. Preporuča se ne koristiti sadržaj u CSS dokumentu, već ga koristiti izravno između oznaka u HTML-u.
Operatori kontrole nitiSCSS ima funkcije (fucntion()) i direktive (@directive). Malo gore, već smo pogledali primjer funkcije kada smo proučavali prosljeđivanje argumenata unutar mixina.
Funkcije se obično nalaze u zagradama odmah iza svog naziva. I direktiva počinje simbolom @.
Kao i JavaScript, SCSS vam omogućuje rad sa standardnim skupom operatora za kontrolu protoka.
ako()if() je funkcija (a ponekad i osnova umjetne inteligencije).
Njegova uporaba izgleda prilično primitivno: operator će vratiti jednu od dvije vrijednosti navedene u uvjetu.
/* Korištenje funkcije if() */ if (true, 1px, 2px) => 1px; if (false, 1px, 2px) => 2px;
@ako@if je direktiva koja se koristi za uvjetno grananje.
/* Korištenje @if direktive */ p ( @if 1 + 1 == 2 ( granica: 1px solid; ) @if 7< 5 { border: 2px dotted; } @if null { border: 3px double; } }
Rezultat kompilacije:
P (obrub: 1px pun;)
Ispod je kombinirani fork s dodatkom @else direktive.
/* Kreirajte $type varijablu */ $type: rijeka; /* Obojite spremnike plavom bojom ako je vrijednost za varijablu $type rijeka */ div ( @if $type == rijeka ( boja: plava; ) ) /* Uvjetne boje za tekst u oznaci
*/ p ( @if $type == drvo ( boja: zelena; ) @else if $type == rijeka ( boja: plava; ) @else if $type == prljavština ( boja: smeđa; ) )
Provjera prisutnosti nadređenog elementaAmpersand odabire nadređeni element ako postoji. Inače će vratiti null. Stoga se može koristiti zajedno s direktivom @if.
U sljedećim primjerima pogledat ćemo stvaranje uvjetnih CSS stilova ovisno o prisutnosti nadređenog elementa.
/* Provjerite postoji li nadređeni element */ @mixin does-parent-exist ( @if & ( /* Primijeni plavu boju na nadređeni element ako postoji */ &:hover ( boja: plava; ) ) @else ( /* Nadređeni element nedostaje, primijeni plavu boju na veze */ a ( boja: plava; ) ) )
@za direktivuDirektiva @for ispisuje skup stilova određeni broj puta. Za svaku iteraciju koristi se varijabla brojača za promjenu izlaza.
Direktiva @for se ponavlja 5 puta.
@za $i od 1 do 5 ( .definition-#($i) ( širina: 10px * $i; ) )
Rezultat kompilacije u CSS-u:
Definicija-1 (širina: 10px;) .definicija-2 (širina: 20px;) .definicija-3 (širina: 30px;) .definicija-4 (širina: 40px;) .definicija-5 (širina: 50px;)
@svaka direktivaDirektiva @each postavlja $var na svaku vrijednost popisa ili rječnika i ispisuje stilove koje sadrži koristeći odgovarajuću vrijednost $var.
@svaka $životinja u kljunaru, lavu, ovci, golubu ( .#($animal)-icon ( background-image: url("/images/#($animal).png") ) )
Rezultat kompilacije u CSS-u:
Platypus-icon (pozadinska slika: url("/images/platypus.png"); ) .lion-icon (pozadinska slika: url("/images/lion.png"); ) .sheep-icon ( background- slika: url("/images/sheep.png"); ) .dove-icon ( background-image: url("/images/dove.png"); )
@while direktivaDirektiva @while uzima SassScript izraz i prolazi kroz stilove koje sadrži dok se izraz procjenjuje na true. Može se koristiti za stvaranje složenijih petlji nego što je pogodan @for, iako je rijetko potreban. Na primjer:
$indeks: 5; @while $index > 0 ( .element-#($index) ( width: 10px * $index; ) $index: $index - 1; )
Rezultat kompilacije:
Element-5 (širina: 50px;) .element-4 (širina: 40px;) .element-3 (širina: 30px;) .element-2 (širina: 20px;) .element-1 (širina: 10px;)
Funkcije u Sass/SCSSKoristeći Sass/SCSS možete koristiti funkcije na isti način kao i u drugim jezicima.
Kreirajmo funkciju three-hundred-px() koja vraća 300px.
@function three-hundred-px() ( @return 300px; ) .name ( width: three-hundred-px(); border: 1px full gray; display: block; position: absolute; )
Nakon primjene class.name, širina elementa bit će 300 piksela.
Zdravo.
Funkcije u Sass-u mogu vratiti bilo koju valjanu CSS vrijednost i mogu se dodijeliti bilo kojem svojstvu. Mogu se čak izračunati na temelju proslijeđenog argumenta.
@function double($width) ( @return $width * 2; )
TrigonometrijaTrigonometrijske funkcije sin() i cos() često se nalaze kao ugrađene klase u mnogim jezicima, kao što je JavaScript na primjer.
Njihov rad vrijedi proučavati ako želite smanjiti vrijeme utrošeno na razvoj animacija korisničko sučelje, na primjer stvoriti trobber. Usput, o tome smo već govorili u jednom od članaka. Ali u ovom slučaju to će biti kod, a ne GIF slika umetnuta u HTML dokument.
U nastavku ćemo pogledati nekoliko primjera za stvaranje zanimljivih animacijskih efekata pomoću funkcije sin(), u kojoj je količina koda svedena na minimum. Zatim možete skalirati ovo znanje za stvaranje interaktivnih elemenata korisničkog sučelja (kretanje u krugu, valovita animacija).
Prednost korištenja trigonometrije u kombinaciji s CSS-om je u tome što nema dodatnih HTTP zahtjeva kao što je slučaj s gif slikama.
U Sassu možete pisati trigonometrijske funkcije. Pročitajte više o ovome.
Pisanje vlastitih funkcijaU trigonometriji se mnoge operacije temelje na funkcijama. Svaka se funkcija nadovezuje na drugu. Na primjer, rad() funkcija zahtijeva korištenje PI() . Funkcije cos() i sin() zahtijevaju upotrebu rad().
@funkcija PI() ( @return 3.14159265359; )
Pisanje funkcija u Sass/SCSS vrlo je slično pisanju funkcija u drugim jezicima.
Korištenje funkcije pow():
@function pow ($number, $exp) ( $value: 1; @if $exp > 0 ( @for $i from 1 to $exp ( $value: $value * $number; ) ) @else if $exp< 0 { @for $i from 1 through -$exp { $value: $value / $number; } } @return $value; }
Korištenje rad() funkcije:
@function rad ($angle) ( $unit: jedinica ($angle); $unitless: $angle / ($angle *0 + 1); //Ako je vrijednost kuta u stupnjevima ("deg"), trebate pretvoriti to u radijane @if $unit == deg ( $unitless: $unitless / 180 * PI(); ) @return $unitless; )
Da biste izračunali tangens pomoću funkcije tan(), trebate koristiti funkcije sin() i cos().