Efekt animacji wysuwania rozwijanego menu w CSS 3

W jednym z moich poprzednich artykułów opisałem krok po kroku jak przy pomocy HTML 5 oraz CSS 3 zrobić trzy poziomowe, rozwijane menu na stronie internetowej. Już napisany kod działa bardzo dobrze ale nie wykorzystuje wszystkich dostępnych możliwości jakie daje CSS 3. Warto trochę to uatrakcyjnić dodając efekt animowanego wysuwania dodatkowych opcji po najechaniu myszką na jakiś element z menu.

Fot: CDSBglobal, CC BY-ND 2.0.

Fot: CDSBglobal, CC BY-ND 2.0.

Kod z poprzedniego wpisu, na którym będziemy pracować:

HTML

CSS

Oczywiście nie będziemy modyfikować wszystkiego, skupimy się tylko na małym fragmencie:

Jak nie trudno się domyślić, mamy tutaj style odpowiedzialne za ukrywanie bądź pokazywanie dodatkowych opcji w menu w zależności od tego na którą pozycję najedziemy myszką.

Na początku zamienimy style display: none; oraz display: block; na visibility: hidden;visibility: visible;. Musimy tak zrobić ponieważ styl display: none; uniemożliwia działanie innych stylów, a co za tym idzie animacja którą chcemy uzyskać nie będzie po prostu funkcjonowała tak jak tego oczekujemy. Co prawda na upartego nie musimy dopisywać w zamian display stylu visibility, ale należy pamiętać o starszych przeglądarkach, które mogą nie obsłużyć reguł CSS 3, w takim wypadku nasze menu będzie po prostu działać jak dotychczas.

Za efekt naszej animacji będzie odpowiedzialny styl transform: scaleY(arg);. Funkcja scaleY() jako argument (arg) przyjmuje liczbę od 0 do 1 gdzie 0 oznacza całkowite zmniejszenie elementu, a 1 pełną jego wysokość wraz z przypisanym marginesem, obramowaniem itd.. Warto tutaj zwrócić uwagę na to, że zmniejszanie i powiększanie elementu przy pomocy tego stylu domyślnie działa względem punktu ustawionego na środku elementu html. My w naszym przykładzie będziemy musieli to zmienić za pomocą transform-origin przesuwając ten punkt na środek górnej krawędzi (50% 0): transform-origin: 50% 0;.

Na samym końcu pozostaje nam tylko wydłużyć wykonywanie powyższych stylów za pomocą transition: transition: 200ms; (jak widać ustawiliśmy czas na 200 milisekund co spowoduje efekt animacji).

Nasz przerobiony fragment kodu:

Cały kod CSS (kod HTML pozostaje bez zmian):

Demo

>> Zobacz demo – rozwijane menu w HTML 5 i CSS 3 z efektem animacji <<

, , , , , ,