Funkcje wbudowane i operatory
Wydawałoby się, że w standardowych arkuszach styli nie posiadamy żadnych funkcji, a tu nagle znajduje się lekcja o funkcjach wbudowanych. Nic bardziej mylnego. Możemy powiedzieć, że w standardowych arkuszach styli CSS także posiadamy pewnego rodzaju funkcje. Takim najprostszym przykładem funkcji może być dobrze wszystkim znaneurl(). Dzięki niemu możemy podać ścieżkę do zdjęcia, które akurat chcemy wstawić w tło danego elementu. Innym przykładem może być np.@font-face. Jest to jakby nie patrzeć funkcja, dzięki której możemy do naszej strony dodać niestandardowe fonty. To samo możemy powiedzieć o@media.
Pamiętajmy jednak, że SASS na koniec jest zawsze kompilowany do CSSa, więc nie mamy możliwości rozszerzenia ilości funkcji w standardowej składni CSS, dlatego też preprocesory ograniczają się do innych funkcji i operacji, które po kompilacji można zamienić w “natywny” kod CSS.
Operatory matematyczne
Zanim przejdziemy jednak do konkretnych funkcji zacznijmy od operatorów matematycznych, których nie znajdziesz w składni CSS (nie licząc funkcjicalc()). W SASS mamy dostępne podstawowe operacje matematyczne znane ze szkoły podstawowej, czyli dodawanie (+), odejmowanie (-), dzielenie (/) i mnożenie (*). Gdzie możemy to wykorzystać? Wszędzie tam, gdzie potrzebujemy wartość liczbową. W poniższym przykładzie ustawiony zostaje rozmiar czcionki na podstawie bazowej zmiennej:
| 1 2 3 4 5 6 7 8 910111213 | $font-base-size:12px;h1{font-size:$font-base-size*4;}h2{font-size:$font-base-size*3;}h6{font-size:($font-base-size/1.5)*2;} |
|---|---|
W powyższym przykładzie pokazałem Ci, że możesz używać zarówno liczb całkowitych jak i zmiennoprzecinkowych. Poprawne jest też użycie nawiasów, aby zarządzać kolejnością wykonywania działań. Oczywiście możesz bez końca używać tutaj zmiennych i bardziej skomplikowanych działań matematycznych. Nic nie stoi na przeszkodzie!
Zaokrąglanie wartości
Skoro możliwe jest użycie liczb zmiennoprzecinkowych, istnieje również funkcja, którą możesz zaokrąglić podane wartości. Funkcją tą jestround(wartość). Wywołanie funkcji w SASS jest identyczne jak w większości języków programowania.
| 12345 | $base-margin:5px;section{margin-left:round($base-margin/2);} |
|---|---|
Jako parametr możesz podać nie tylko liczby czy zmienne, ale także inne funkcje lub całe operacje matematyczne. W przypadku podania funkcji jako parametr innej funkcji oczywiście całość wykona się “od najbardziej wewnętrznego elementu”.
Operacje na kolorach
Dodawanie liczb to całkiem podstawowa możliwość. Być może domyślasz się, że w ten sam sposób możesz połączyć dwa ciągi znaków. Jest to dosyć proste działanie. A co powiesz na dodawanie kolorów? Tak! Jest to możliwe dzięki SASSowi. Poniższy przykład wykona się poprawnie:
| 123 | h1{color:#f00+#0ff;} |
|---|---|
W skompilowanym CSSie wynikiem będzie:
| 123 | h1{color:#fff;} |
|---|---|
Na kolorach możesz oczywiście wykonywać wszystkie operacje matematyczne, a same kolory mogą być zapisane w różny sposób (heksadecymalnie, rgb, czy rgba).
A skoro jesteśmy przy kolorach to poznajmy kolejną funkcję która właśnie ich dotyczy, a mianowiciergba(kolor, przezroczystość). Funkcja ta przyjmuje dwa parametry:
- kolor - jego zapis jest dowolny;
- przezroczystość (czy inaczej krycie) - wartość od
0do1która mówi nam jaką przezroczystość powinien posiadać kolor, który chcemy otrzymać.
Jest to bardzo wygodna funkcja, gdyż zazwyczaj kolory odczytane np. z Photoshopa mają zapis heksadecymalny. Chcąc zapisać je z przezroczystością musielibyśmy przekonwertować kolor na zapis rgb i dodać kanał alfa. Z pomocą tej funkcji nie musimy się tak męczyć. Wystarczy następujący zapis.
| 123 | h1{color:rgba(#f00,0.5);} |
|---|---|
W skompilowanym CSSie otrzymamy poniższy wynik:
| 123 | h1{color:rgba(255,0,0,0.5);} |
|---|---|
Jak widzisz akurat w tym przypadku obie funkcje (zarówno w SASS jak i w CSS) posiadają taką samą nazwę. Jednak SASS wykrywa, że nie jest to standardowy zapis CSS i poprawia go tak, aby wszystkie przeglądarki mogły odczytać to co mieliśmy na myśli. Jednak ustawianie przezroczystości koloru, czy dodawanie dwóch kolorów do siebie nie są oczywiście jedynymi dostępnymi możliwościami.
W bardzo łatwy sposób możemy rozjaśnić lub przyciemnić dany kolor. Służą do tego odpowiednio funkcjelighten()idarken(). Obie funkcje przyjmują dwa parametry (kolor i wartość o jaką kolor ma zostać zmodyfikowany). Funkcje te są bardzo przydatne np. w sytuacji gdy chcemy zmienić kolor linku po najechaniu na niego kursorem myszy. Poniżej znajdziesz właśnie taki prosty przykład:
| 123456789 | $base-link-color:#0f0;a{color:$base-link-color;&:hover{color:lighten($base-link-color,0.1);}} |
|---|---|
Link domyślnie będzie w kolorze zielonym, jednak po najechaniu na niego kursorem myszy otrzymamy kolor o 1/10 jaśniejszy. Proste, prawda?
Zadanie 1
W tym zadaniu musisz poprawić plikmain.scss.
Element<p>o klasielight-blue, powinien mieć niebieski kolor tekstu, który jest rozjaśniony o10%, a element<p>o klasiered-blue, powinien mieć kolor tekstu, który jest wynikiem dodawania kolorów czerwonego i niebieskiego.
Podsumowanie
W tej lekcji poznałeś kilka podstawowych i najbardziej przydatnych funkcji dostępnych w SASS. Wszystkich dostępnych funkcji jest sporo, dlatego nie opiszę każdej z osobna w tym kursie. Dla bardziej dociekliwychtutajznajduje się lista wszystkich funkcji dostępnych w SASS. Spróbuj wykorzystać kilka z nich w zadaniu.