Martynas Kašelionis
WEB developeris, programavimo mokytojas
Parengė: Martynas Kašelionis
From zero to hero
Preprocesorius - skriptų rašymo kalba, kuri išplečia CSS ir leidžia kompiliuoti kodą į standartinį CSS kodą.
Jeigu įdėtumėt CSS į raketą ir paleistumėt visu greičiu, tai būtų SASS.
Hampton Catlin SASS kūrėjas
Galima pasirinkti kodo rašymo sintaksę pagal skonį:
Abi sintaksės funkciškai yra vienodos ir turi tokias pačias galimybes.
gem install sassSASS failo kompiliavimas į CSS:
Jeigu norim vykdyti kompiliavimą, esant kodo pakeitimui:
Gulp - yra įrankis, kuris atlieka rutinines užduotis dirbant su WEB projektu.
Plačiau:
https://css-tricks.com/gulp-for-beginners/
Informacija, kai pasileist SASS savo projekte su gulp:
http://ryanchristiani.com/getting-started-with-gulp-and-sass/
#main p {
color: #00ff00;
width: 97%;
.redbox {
background-color: #ff0000;
color: #000000;
}
}SASS
#main p {
color: #00ff00;
width: 97%; }
#main p .redbox {
background-color: #ff0000;
color: #000000; }CSS (sukompiliuotas)
a {
font-weight: bold;
text-decoration: none;
&:hover { text-decoration: underline; }
body.firefox & { font-weight: normal; }
}SASS
a {
font-weight: bold;
text-decoration: none; }
a:hover {
text-decoration: underline; }
body.firefox a {
font-weight: normal; }CSS (sukompiliuotas)
#main {
color: black;
&-sidebar { border: 1px solid; }
}SASS
#main {
color: black; }
#main-sidebar {
border: 1px solid; }CSS (sukompiliuotas)
.funky {
font: {
family: fantasy;
size: 30em;
weight: bold;
}
}SASS
.funky {
font-family: fantasy;
font-size: 30em;
font-weight: bold; }CSS (sukompiliuotas)
$width: 5em;
#main {
width: $width;
}SASS
#main {
width: 5em;
}
CSS (sukompiliuotas)
Sass palaikomi duomenų tipai:
Aritmetiniai veiksmai:
p {
font: 10px/8px; // Plain CSS
$width: 1000px;
width: $width/2;
width: round(1.5)/2;
height: (500px/2);
margin-left: 5px + 8px/2px;
font: (italic bold 10px/8px);
}SASS
p {
font: 10px/8px;
width: 500px;
height: 250px;
margin-left: 9px; }CSS (sukompiliuotas)
Skirta importuoti sass arba scss failus.
Jeigu importuojamas, failas nėra paminėtų tipų, bus pridėta eilutė sukompiliuotam faile.
Importuoti failai, bus sujungti su pagrindiniame faile esančiu kodu.
SASS failai, turi būti organizuoti logiškai, kad dirbant su projektu darbas būtų greitas.
Importuojami failai turi prasidėti ženklu (_), jeigu minėto ženklo nebus, SASS sukompiliuos papildomą CSS failą.
#main {
@import "example";
//bus importuotas _example.scss
}
SASS
#main .example {
color: red;
}CSS (sukompiliuotas)
.sidebar {
width: 300px;
@media screen and (orientation: landscape) {
width: 500px;
}
}SASS
.sidebar {
width: 300px; }
@media screen and (orientation: landscape) {
.sidebar {
width: 500px; } }CSS (sukompiliuotas)
Patogesnis naudojimas
Naudojama, kai turime CSS kodą (komponentą) ir jį norime praplėsti pridedant naujas savybes, konkrečiam taikymui.
<div class="error seriousError">
Oh no! You've been hacked!
</div>.error {
border: 1px #f00;
background-color: #fdd;
}
.seriousError {
border-width: 3px;
}.error {
border: 1px #f00;
background-color: #fdd;
}
.seriousError {
@extend .error;
border-width: 3px;
}SASS
.error, .seriousError {
border: 1px #f00;
background-color: #fdd;
}
.seriousError {
border-width: 3px;
}CSS (sukompiliuotas)
.error {
border: 1px #f00;
background-color: #fdd;
}
.error.intrusion {
background-image: url("/image/hacked.png");
}
.seriousError {
@extend .error;
border-width: 3px;
}SASS
.error, .seriousError {
border: 1px #f00;
background-color: #fdd; }
.error.intrusion, .seriousError.intrusion {
background-image: url("/image/hacked.png"); }
.seriousError {
border-width: 3px; }CSS (sukompiliuotas)
.error {
border: 1px #f00;
background-color: #fdd;
}
.attention {
font-size: 3em;
background-color: #ff0;
}
.seriousError {
@extend .error;
@extend .attention;
border-width: 3px;
}SASS
.error, .seriousError {
border: 1px #f00;
background-color: #fdd; }
.attention, .seriousError {
font-size: 3em;
background-color: #ff0; }
.seriousError {
border-width: 3px; }CSS (sukompiliuotas)
p {
@if 1 + 1 == 2 { border: 1px solid; }
@if 5 < 3 { border: 2px dotted; }
@if null { border: 3px double; }
}SASS
p {
border: 1px solid; }CSS (sukompiliuotas)
Sąlygos sakiniai SASS naudojami taisyklių pridėjimui.
$type: monster;
p {
@if $type == ocean {
color: blue;
} @else if $type == matador {
color: red;
} @else if $type == monster {
color: green;
} @else {
color: black;
}
}
SASS
p {
color: green; }CSS (sukompiliuotas)
Naudojama, tasyklių generavimui, kai svarbus kodu kartojimas.
Nurodomas iteracijų skaičius nuo iki.
@for $i from 1 through 3 {
.item-#{$i} { width: 2em * $i; }
}SASS
.item-1 {
width: 2em; }
.item-2 {
width: 4em; }
.item-3 {
width: 6em; }CSS (sukompiliuotas)
@each $animal in puma, sea-slug,
egret, salamander {
.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');
}
}SASS
.puma-icon {
background-image: url('/images/puma.png'); }
.sea-slug-icon {
background-image: url('/images/sea-slug.png'); }
.egret-icon {
background-image: url('/images/egret.png'); }
.salamander-icon {
background-image: url('/images/salamander.png'); }CSS (sukompiliuotas)
@each naudojama forma: $kintamasis in <sąrašas arba map>
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) {
#{$header} {
font-size: $size;
}
}SASS
h1 {
font-size: 2em; }
h2 {
font-size: 1.5em; }
h3 {
font-size: 1.2em; }CSS (sukompiliuotas)
@mixin leidžiau sukurti stiliaus taisyklės, kurios gali būti pernaudojamos kodo bloko viduje. @mixin gali būti su argumentais arba be jų.
@mixin large-text {
font: {
family: Arial;
size: 20px;
weight: bold;
}
color: #ff0000;
}
.page-title {
@include large-text;
padding: 4px;
margin-top: 10px;
}SASS
.page-title {
font-family: Arial;
font-size: 20px;
font-weight: bold;
color: #ff0000;
padding: 4px;
margin-top: 10px; }CSS (sukompiliuotas)
@mixin sexy-border($color, $width) {
border: {
color: $color;
width: $width;
style: dashed;
}
}
p { @include sexy-border(blue, 1px); }SASS
p {
border-color: blue;
border-width: 1px;
border-style: dashed; }CSS (sukompiliuotas)
SASS galima naudoti funkcijas su @function
$grid-width: 40px;
$gutter-width: 10px;
@function grid-width($n) {
@return $n * $grid-width + ($n - 1) * $gutter-width;
}
#sidebar { width: grid-width(5); }SASS
#sidebar {
width: 240px; }CSS (sukompiliuotas)
By Martynas Kašelionis