CSS3: gradienty
Opublikowany: 18.04.2011 21:25:03 | Komentarzy 7
Gradienty, kilka lat temu, to była prawdziwa zmora frontend developerów. A gdy grafik wpadł na genialny pomysł mieszania kilku gradientów, to szczęka opadała - nie wiadomo czy było do śmiechu czy płaczu. Najszybszym wyjściem byłoby pozbycie się grafika :). Na szczęscie w CSS3, można w łatwy sposób tworzyć gradienty.
Wstęp
Na nasze szczęście CSS3 pozwala na bardziej zaawansowane manipulacje obrazkami, a właściwie grafikami. W starych wersjach CSS (2 i 2.1) obrazki były wykorzystywane jako: tło (body, wylistowań, kontenerów, itp.), obrazek (na stronie). CSS 3 rozszerza ich wykorzystanie do bardziej "zaawansowanych" modyfikacji 2D.
Typy gradientów
W CSS3 będziemy mieli (bo na razie dokumentacja jest w trakcie tworzenia) dwa typy gradientów:
- Linear (liniowy).
- Radial (kołowy).
Dodatkowo każdy z nich występuje w dwóch wariacjach:
- Domyśly - czyli gradien ze zdefiniowaną pulą kolorów, które przechodzą jeden w kolejny.
- Powtórzenia - czyli coś w rodzaju pętli. Gradienty będzie można powtarzać.
W CSS3 jest to zdefiniowane jako:
gradient = [ linear-gradient | radial-gradient | repeating-linear-gradient | repeating-radial-gradient ]
Gradienty liniowe (linear) - linear-gradient()
Funkcja linear-gradient przyjmuje dwa rodzaje parametrów:
linear-gradient(
[[
[ [top | bottom] || [left | right] ]
|
kÄ…t
]
,]?
kolor[, kolor]+
)
Pierwsza część odpoawiada za położenie lub kierunek gradientu (linia gradientu). Innymi słowy - w jakim kierunku będą "układać się" kolory.
top. Czyli z góry na dół.Linię gradientu możemy definiować na dwa sposoby:
- Za pomocą konkrętnej wartości kątu - angle np.:
10deg,90deg. Dodatnia wartość oznacza, że gradient będzie obracał się w lewo. - Podając konkretne "położenie" np.:
top left,right, itd.
0degoznacza gradient od lewej do prawej,90degod dołu do góry, itd.
Druga definiuje listę kolorów, musi ich być minimum dwa aby gradient wyglądał jak gradient. Te dwa rodzaje parametrów możemy ze sobą dowolnie mieszać.
Przykłady gradientów liniowych
Gradient z domyślnym kierunkiem (czarno-czerwony):

#linear1 { width: 400px; height: 100px; margin: auto; background: linear-gradient(black, red); }
Gradient z domyślnym kierunkiem 3-kolorowy

#linear2 { width: 400px; height: 100px; margin: auto; background: linear-gradient(black, red, yellow); }
Gradient 2-kolorowy pod kątem 45°

#linear3 { width: 400px; height: 100px; margin: auto; background: linear-gradient(45deg, black, red); }
Gradient 3-kolorowy, którego kolory przechodzą między sobą w konkretnych punktach.

#linear4 { width: 400px; height: 300px; margin: auto; background: linear-gradient(black 50px, red 150px, yellow 200px); }
Gradienty kołowe (radius) - radial-gradient()
Funkcja radial-gradient() nie różnie dużo od poprzedniej. Różnica jaka jest pomiędzy nimi, to dodatkowe parametry określnające owalność oraz jego wielkość.
radial-gradient(
[bg-position,]?
[[
[shape || size]
|
[length | percentage]{2}
],]?
kolor[, kolor]+
)
Pierwszy parametr określa środek owalu. Działa to na podobnej zasadzie jak ustawianie tła dla background. Jeżeli go nie podamy, to domyślna wartość to center.
Drugi parametr jest już trochę bardziej skomplikowany, bo przyjmuje dwie wartości i dodatkowo można je mieszać na różne sposoby.
Zmienna shape przyjmuje dwie wartości circle lub ellipse.
Kolejny parametr to:
size = [ closest-side | closest-corner | farthest-side | farthest-corner | contain | cover ]
W wielkim skrócie, można powiedzieć, że ten parametr odpowiada za promień koła lub promienie elipsy. Wszystko jest uzależnione od rozmiarów obszaru z gradientem i pozycji startowej.
I tak:
closest-sideobiera promień względem najbliżego punktu względem środka (obszaru na którym jest "malowany").fahrest-side- podobnie jak wyżej, z tą różnicą, że względem najdalszego punktu względem środka.closest-corner,fahrest-corner- promień jest dobierany względem (odpowiednio) najbliższego i najdalszego rogu obszaru.containjest synonimem dlaclosest-side.coverto synonimfarthest-corner.
Kilka przykładów
Gradient kołowy z domyślnym środkiem (czarno-czerwony):

#radial1 { width: 100px; height: 100px; margin: auto; background: radial-gradient(circle, #f00, #000); }
Gradient kołowy ze środkiem w punkcie (20,50) pikseli z gradientem do najdalszego rogu:

#radial2 { width: 200px; height: 200px; margin: auto; background: radial-gradient(20px 50px, circle cover, #f00, #000); }
Na koniec tęcza :)

#tecza { width: 400px; height: 200px; margin: auto; background: radial-gradient(200px 200px, ellipse, #00f 10px, #f00 30px, #f90 60px, #ff0 90px, #0f0 120px, #4B0082 150px, #b803ff 180px, #00f); }
Kolory tęczy przechodzą między sobą co 30 pikseli. Pierwszy kolor to niebieski, aby imitował kolor "nieba" ;).
Mam nadzieję, że przybliżyłem Wam trochę gradinety. Jeżeli macie jakieś uwagi do moich tłumaczeń czy interpretacji niektórych zmiennych, to piszcie w komentarzach. Zdaję sobie sprawę, że coś może być nie tak.
Komentarze
Masz kilka literówek w tekście "mieszkania" "jest trakcie" "Linę gradientu".
-webkit-
-moz-
czyli np:
background: -webkit-radial-gradient(circle, #f00, #000);
background: -moz-radial-gradient(circle, #f00, #000);
Powinieneś wspomnieć o prefiksach w swoim tutku, aby uniknąć niejasności :) Poza tym świetna robota.
Mat
mam tylko pytanie trzeba jakas w stylach deklaracje dodawać aby to działalo? bo wklejam ten kod do swoich styli i wyrzuca jako błędny kod i nie wyswietla w przegladarce
Dodaj komentarz