Professional Documents
Culture Documents
Funkcije: CSS Pretprocesori - Deo 2
Funkcije: CSS Pretprocesori - Deo 2
15:32 1
Sass funkcije su, uz varijable, najkorisniji aspekt ovog jezika. Funkcije su
podeljene u više grupa u zavisnosti od tipa podataka.
String funkcije
Rad sa strignovima u Sass-u sličan je radu sa stringovima u drugim programiskim
jezicima, ali sa jednim izuzetkom. Ovo nisu nizovi. Prvi karakter u stringu je indeksa 1,
a ne 0. Neke funkcije su:
str-index($string, $substring) – vraća indeks prve pojave podstringa, npr:
str-index("Zdravo", „Z") - Rezultat: 1
str-index("zdravo", "H") - Rezultat : null
to-lower-case($string), to-upper-case($string)
quote($string), unquote($string) - quote(zdravo) Rezultat : "zdravo"
str-insert($string, $insert, $index) – umeće $insert string u $string na poziciju $index
str-insert(" svete", "zdravo", 0) - Rezultat : "zdravo svete"
str-length($string) – dužina stringa
15:32 2
Numeričke funkcije
15:32 3
Funkcije lista
15:32 5
Selector funkcije
Omogućavaju rad i manipulaciu sa CSS selektorima.
is-superselector($super, $sub) – vraća bool vrednost u zavisnosti da li je sub selektor obuhvaćen
selektorom super.
is-superselector("a", "a.disabled"); // true
is-superselector("sidebar a", "a"); // false
selector-append($sel1, $sel2) – vraća novi selektor koji pridružuje sledeće uz prvi.
Selector-append("a", ".disabled"); // a.disabled
selector-extend($sel, $sel1,$sel2) – proširuje sel tako što umesto sel1 postavlja proširenje sel1 sa sel2.
selector-extend("ul.disabled", "ul", ".mobile");// ul.disabled, .disabled.mobile
selector-nest($sel1, $sel2, $sel2,..) – ubacuje ugnježden stil na osnovu navedenih.
selector-nest(".red", ".green", "div", "p"); // .red .green div p;
selector-parse($sel) – parsira sel u niz stringova koji su selektori.
selector-parse(".red .green div,p")// .red .green div, p
15:32 6
Color funkcije
mix($color1, $color2) – kombijnuje dve boje. Postoji i opcija sa trećim argmentom koji
definiše odnos dve boje, a bez njega je pola/pola.
darken($color, $amount), lighten($color, $amount), saturate($color, $amount),
desaturate($color, $amount) – smanjuje/povećava osvetljenje, povećava/umanjuje
zasićenje za odrenjeni procenat.
15:32 7
Sopstvene funkcije
Moguće je pisanje I sopstvenih funkcija. Sopstvene funkcije se mogu pozivati iz drugih
sopstvenih funkcija i tako graditi složenije zavisnosti. Mora imati @return. Npr:
@function zbir($niz) {
$zbir: 0;
@each $n in $niz {
$zbir: $zbir + $n;
} //dobijeno
.sidebar {
@return $zbir; float: right;
} top: 4.5;
}
@function sredina($niz) {
$suma: zbir($niz);
@return $suma / length($niz);
}
.sidebar {
float: right;
top: sredina((3,4,5,6)); 15:32 8
}
Sass direktive
15:32 9
@if
$prosek: 3;
div {
@if $prosek < 3.5 {
content: "losije od vrlodobar";
} div {
@else if $prosek == 5 { content: "losije od vrlodobar";
content: "sve petice"; }
}
@else { p {
content: "vrlodobar ili odlican, ali ne sve petice"; color: blue;
} background-color: white;
} }
p {
@if $prosek < 4 {
color: blue;
@if $prosek == 3 {
background-color: white;
}
} 15:32 10
}
@while
.h1 {
color: #884444;
}
$br: 1;
$clr: #884444; .h2 {
color: #a35252;
@while $br < 7 { }
.h#{$br} {
color: $clr; .h3 {
$clr: $clr*1.2; color: #c46262;
$br: $br + 1; }
}
} .h4 {
color: #eb7676;
}
.h5 {
color: #ff8d8d;
}
.h6 {
color: #ffa9a9;
}
15:32 11
@for .col-1 { .col-7 {
width: 8.33333%; width: 58.33333%;
Promenljiva ide od prve vrednosti } }
do poslednje. Ako se koristi reč to .col-2 { .col-8 {
onda poslednja nije uključena, a width: 16.66667%; width: 66.66667%;
ako se koristi through onda je } }
poslednja vrednost uključena.
.col-3 { .col-9 {
width: 25%; width: 75%;
} }
.col-4 { .col-10 {
width: 33.33333%; width: 83.33333%;
} }
@each direktiva se izvršava za sve stavke u listi ili mapi. Sintaksa je:
.red {
color: red;
}
@each $c in (red, green, blue) {
.#{$c} {
.green {
color: $c;
color: green;
}
}
}
.blue {
color: blue;
}
15:32 13
Importovanje
Sass zadržava CSS kod DRY. Jedan od načina pisanja DRY koda je čuvanje istog
koda u zasebnim datotekama.
Možete da kreirate male datoteke sa CSS celinama koje se uključuju u druge
Sass datoteke. Fajlovi moraju imati odgovarajuću ekstenziju .scss.
Direktiva @import omogućava da sadržaj jedne datoteke uključite u drugu.
CSS @import direktiva ima veliku manu zbog problema sa performansama; on
stvara dodatni HTTP zahtev svaki put kada ga pozovete. Međutim, Sass
@import direktiva uključuje datoteku u CSS; pa nije potreban dodatni HTTP
poziv tokom izvođenja!
15:32 14
// importovanje.scss
@import "scss/reset";
@import "scss/boje";
@import "scss/promenljive";
body {
// scss/promenljive.scss font-family: Helvetica, sans-serif;
$margineNaslova: 5px 5px 10px 10px; font-size: 18px;
$dani: ("pon":1,"ut":2,"sr":3,"cet":4,"pet":5,"sub":6,"ned":7 ) color: $clrTxt;
}
// scss/boje.scss
$clrTxt: darkgray; body h2 {
$clrBgnd: white; // generisano margin: $margineNaslova;
html, }
body,
// scss/reset.scss
ul,
html,
ol {
body,
margin: 0;
ul,
padding: 0;
ol {
}
margin: 0;
padding: 0;
body {
}
font-family: Helvetica, sans-serif;
font-size: 18px;
color: darkgray;
}
body h2 {
margin: 5px 5px 10px 10px; 15:32 15
}
Mixin - 1
HTML5 uvodi više tagova semantičkog karaktera, poput <aside> i <article> koji
definišu značenje sadržaja umesto izgleda.
Isto to ne važi i za CSS. Definisanje klasa poput .float-left, .row i .col je bolje
od ponovnog definisanja svojstava, ali one obično ne dodaju značenje HTML-
a.
Postoje radni okviri CSS-a koji pokušavaju da reše problem. (Semantic UI je
jedan primer: semantic-ui.com.) Sass koristi @mixin direktive.
Sastoji se od dva dela:
Deo kojim se definiše mixin.
Deo u kome se primenjuje definisan mixin.
15:32 16
Mixin - 2
//bez argumenata
Sintaksa za definisanje mixin-a @mixin dugme {
button {
@mixin name [(var1,var2,…)] { background-color: blue;
color: white;
contents }
}
}
name – naziv koji se koristi u primeni
contents - sadržaj koji definiše mixin
//sa argumenatima
Mixin može da ima promenljive kojima se definiše @mixin dugme($clrBack, $clrTxt:black) {
ponašanje preko ulaznih argumenata. Pri tome može se button {
definisati i podrazumevana vrednost argumenta. background-color: $clrBack;
color: $clrTxt;
}
}
15:32 17
Mixin - 3
Primena mixin-a se obavlja koristeći @include deklaraciju. Ukoliko je mixin definisan u
posebnom fajlu koristi se ista deklaracija ali sa putanjom i ekstenzijom fajla. Na primer
@import button.scss
//dobijeno
body {
@mixin button($pozBoja: gray, $txtBoja:yellow)
text-align: right;
{
}
button {
background-color: $pozBoja;
body button {
color: white;
background-color: darkgray;
margin: 2px;
@import "scss/button"; color: white;
margin: 2px;
&:hover {
body { }
color: darkblue;
@include button(darkgray,
}
lightblue); body button:hover {
text-align: right; color: darkblue;
&:visited {
} }
color: lightblue;
}
body button:visited {
}
15:32 color: lightblue;
18
}
}
Mixin - 4
@include fontUkosen {
.napomena {
font-style: italic;
color: darkblue;
}
}
15:32 19
Proširenje (@extend)
Često je potrebno da se neki stil proširi. Pri tome mixin je jedan od načina da se ovo reši bez
dupliranja koda.
Sass pruža i drugi način, koristeći @extend direktivu, koja omogućava nasleđivanje stilova.
Za razliku od mixin, proširenja ne trebate eksplicitno deklarisati. Bilo koje pravilo možete
proširiti drugim pravilima uključivanjem @extend direktive.
.button { // dobijeno
border-radius: 3px; .button, .menu-button {
margin: 3px; border-radius: 3px;
} margin: 3px;
}
.menu-button {
@extend .button; .menu-button {
background-color: lightgray; background-color: lightgray;
color: darkblue; color: darkblue;
} }
15:32 20
// dobijeno
.button { .button, .nav-button, .nav-button-help, .nav-button-
border-radius: 3px; err {
margin: 3px; border-radius: 3px;
} margin: 3px;
}
.txtHelp {
color: darkgreen; .txtHelp, .nav-button-help {
} color: darkgreen;
}
.txtErr {
color: darkred; .txtErr, .nav-button-err {
} color: darkred;
}
.nav-button {
@extend .button; .nav-button, .nav-button-help, .nav-button-err {
background-color: lightgray; background-color: lightgray;
color: darkblue; color: darkblue;
} }
.nav-button-help {
@extend .nav-button;
@extend .txtHelp;
}
.nav-button-err {
@extend .nav-button;
@extend .txtErr; 15:32 21
}
Extend ili mixin
15:32 22
Preporuke
Najpre se dodaju proširenje – extends.
Zatim se dodaju uključenja – include.
Slede regularni stilovi.
Ugnježdeni pseudo stilovi i klase.
Ugnježdeni slelektori.
Ne pišite vendor prefikse – za to se može koristiti autoprefixer na primer.
15:32 23
Zadatak
15:32 24