Warsztaty Webowe grupa średniozaawansowana

Ogłoszenie

Na hub.selacode pojawił się w menu link do arkusza z punktami. Za każdą pracę domową są 2 punkty do zdobycia (w poprzedniej można było akurat wyjątkowo 3 zdobyć, jeśli plik php dobrze działał, jeśli praca domowa będzie za więcej niż 2 to będzie w niej zawsze taka informacja). Każde 8 pkt z pracy domowej to 1 dodatkowy punkt do projektu (projekt będzie za 40 pkt). Niedużo, ale może się przydać na koniec.

Przydatne wtyczki do Brackets'a

Efekt przejścia

Właściwość transition pozwala nam utworzyć pewien efekt animacji. Wspomniana animacja będzie prezentować zmianę wartości określonych właściwości CSS dla danego elementu. W efekcie tym zobaczymy przejście jednych wartości właściwości CSS w drugie, dlatego efekt transition możemy nazywać również efektem przejścia.

Zadanie 1

Przeanalizuj kody źródłowe:

Nr 1:

div {
 width: 50%;
 height: 100px;
 background-color: #fff;
 border: 5px solid #000;
}

div:hover {
 width: 80%;
 background-color: blue;
}

Nr 2:

div {
 width: 50%;
 height: 100px;
 background-color: #fff;
 border: 5px solid #000;
 transition-duration: 5s;
}

div:hover {
 width: 80%;
 background-color: blue;
}

Zadanie 2

Przeanalizuj poniższe kody źródłowe i powiedz, do czego służą użyte w nich właściwości związane z efektem przejścia.

Kod nr 1:

div {
 width: 50%;
 height: 100px;
 background-color: #fff;
 border: 5px solid #000;
 transition-duration: 5s;
 transition-property: background-color;
}

div:hover {
 width: 80%;
 background-color: blue;
}

Kod nr 2:

div {
 width: 50%;
 height: 100px;
 background-color: #fff;
 border: 5px solid #000;
 transition-duration: 5s;
 transition-timing-function: linear;
}

div:hover {
 width: 80%;
 background-color: blue;
}

Kod nr 3:

div {
 width: 50%;
 height: 100px;
 background-color: #fff;
 border: 5px solid #000;
 transition-duration: 5s;
 transition-delay: 500ms;
}

div:hover {
 width: 80%;
 background-color: blue;
}

Kod nr 4:

div {
 width: 50%;
 height: 100px;
 background-color: #fff;
 border: 5px solid #000;
 transition-property: width, background-color;
 transition-duration: 1s, 3s;
 transition-timing-function: linear, ease-in;
 transition-delay: 3s, 0s;
}

div:hover {
 width: 80%;
 background-color: blue;
}

Kod nr 5:

div {
  width: 50%;
  height: 100px;
  background-color: #fff;
  border: 5px solid #000;
  transition: width 1s linear 3s, background-color 3s ease-in 0s;
}

div:hover {
  width: 80%;
  background-color: blue;
}

Przykład praktycznego wykorzystania własności transition z pseudoelementem :hover

Do tego przykładu użyjemy następującego kodu css:
.button{
 background-color: lightblue;
 width: 80px;
 height: 20px;
 padding: 10px;
 text-align: center;
 transition-duration: 2s;
}

.button:hover{
 background-color: blue;
}

Dzięki pseudoelementowi hover efekt przejścia uaktywni się dopiero gdy najedziemy na dany element, dzięki niemu element płynnie zmienia kolor

Animacje CSS

Do prostych animacji wcale nie musimy uczyś się języka JavaScript, czy używać GIFów. Zwykły CSS oferuje nam kilka ciekawych rozwiązań, dzięki któym możemy ciekawie udekorować naszą stronę.

Keyframes

@keyframes example {
from {background-color: red;}
to {background-color: yellow;} }

Keyframes ustala nam jak element będzie się zmieniał w czasie. Na powyższym przykładzie widzimy, że tło elementu będzie się zmieniało z czerwonego na żółte. Spróbujmy stworzyć sobie element div. Najpierw kod css

div{
 width: 100px;
 height: 100px;
 background-color: red;
 animation: example 5s infinite; }

Jak łatwo się było domyślić animacja polega na tym, że obrazek w ciągu 5 sekund zmienia kolor z czerwonego na żółty. Infinite, oznacza, że animacja będzie przebiegać bez przerwy. Element animation możemy rozbić na kilka mniejszych np:

animation-name: nazwa animacji (z @keyframes)
animation-duration: czas (w sekundach) trwania animacji
animation-delay: "opóźnienie" animacji (w sekundach), czyli czas od wczytania strony po którym animacja się rozpocznie
animation-iteration-count: ile razy animacja się wykona (wartość infinite sprawi, że będzie się wykonywać bez przerwy)
animation-direction:
  • normal - animacja przebiega normalnie
  • reverse - animacja przebiega w odwrotnej kolejności
  • alternate - animacja przebiega naprzemiennie najpierw normalnie, później w odwrotnej kolejności
  • alternate-reverse: - animacja przebiega naprzemiennie najpierw w odwrotnej kolejności, później normalnie
animation-timing-function:
  • easy - animacja najpierw działa wolno, potem szybciej i na końcu znowu zwalnia (domyślne)
  • linear - animacja ma cały czas to samo tempo
  • ease-in - animacja zaczyna się wolno a na końcu przyspiesza
  • ease-out - animacja zwalnia na końcu
  • ease-in-out- podobnie jak easy, ale pryspieszenia/zwolnienia są gwałtowniejsze
animation-fill-mode:
  • none - domyślnie, nie będą używane żadne dodatkowe style przed i po animacji
  • forwards - element zachowa styl ostatniego etapu animacji
  • backwards - element otrzyma wartości stylu ustalone przez pierwszy etap aniamcji (w zależności od kierunku animacji) i zachowa je podczas opóźnienia animacji (animation-delay)
  • both - animacja rzestrzega zarówno forwards jak i backwards
animation-play-state:
  • paused - zatrzymuje animację
  • running - domyślna, zaczyna animację

Przebieg animacji

W pierwszym przykładzie użyliśmy from i to aby określić jakie style przyjmuje animowany obiekt w czasie trwania animacji. Są również inne sposoby, aby to zrobić np. jeśli mamy więcej niż dwie

@keyframes example {
 0% {background-color: red;}
 40% {background-color: blue;}
 87% {background-color: green;}
 100% {background-color: yellow;} }

Jak widzimy kolory płynnie się zmieniają w czasie przebiegu animacji. Możemy sterować wartościami procentowymi i ilością różnych przejść

Krzywa Bezier'a

Ciekawa własność o której warto wiedzieć. Temat raczej jako ciekawostka więc odsyłam do dosyć treściwego artykułu na ten temat

Ambitniejszy przykład animacji

Tutaj znajdziecie link do kodu html generującego trochę bardziej rozbudowaną animację (animacja.html)

Animista

Isnieją oczywiście programy, które ułatwiają pracę z animacjami. Jednym z takich narzędzi jest strona animista.net. Dzięki niej można w prost sposób stworzyć ciekawą animację i jej efekt wkleić do swojego kodu css. Posiada on zdecydowanie większe możliwości niż te które możemy uzyskać pisząc sami animacje, niemniej warto wiedzieć ja je tworzyć, aby w razie potrzeby potrafić edytować samemu kod, któy tworzy animista.

Praca domowa

Zad 1

Wykonaj drugą fazę tworzenia projektu - zbudowanie szkieletu aplikacji w HTML5. Każda większa zmiana powinna być wysłana jako osobny commit na repozytorium utworzone w pierwszej fazie. Czas na wykonanie zadania to dwa tygodnie. Katalog w którym będzie projekt proszę nazwać PROJEKT. Prosze pamiętać, aby główny plik nazywał się index.html

Zad 2

Poszukaj informacji na temat właściwości transform i używając jej stwórz prosty preloader:

prdom2gif

Utwórz katalog o nazwie ZAJ2 a w nim utwórz pliki prdom.html i prdom.css, w których umieścisz rozwiązanie tego zadania.