Tworzymy animację podkreślenia wykorzystując pseudoelement ::after, pseudoklasę :hover oraz właściwość transition-origin. Jest to łatwiejsze, niż nam się wydaje. Świetny wstęp do dalszych, bardziej zaawansowanych animacji.
Nasz HTML wygląda obecnie tak:
<p><span class="underline">Lorem ipsum</span>, dolor sit amet consectetur adipisicing elit. Temporibus sed in corrupti eius consectetur a molestiae quo praesentium, voluptate quam, aliquid labore magnam. Aliquid inventore cumque doloribus, quaerat dolorem qui!</p>
Mamy tu <span> z klasą underline. Od razu mówię – te efekty podkreślania „błyszczą” najbardziej przy guzikach, elementach nawigacji i tym podobne. Natomiast używaliśmy tego w poprzednim przykładzie, więc żeby nie utrudniać, podkreślimy sobie naszego spana.
Jest to też w jakiś sposób dające do myślenia – jak można to zmienić, aby wyglądało lepiej? Może odsunąć piksel/dwa w dół? Nad tym się jednak zastanowimy, gdy już wykonamy naszą animację.
Pierwsza rzecz – klasa underline:
.underline{
display: inline-block;
position: relative;
}
Teraz nasz after, na razie testowy:
.underline::after {
content: '';
position: absolute;
width: 100%;
transform: scaleX(1);
height: 2px;
bottom: 0;
left: 0;
background-color: #0087ca;
}
Po wklejeniu tego powinniśmy zobaczyć podkreślenie na całej długości spana (width: 100%) o wysokości 2px (height: 2px), jego pozycję ustala position wraz z bottom i left, jego kolor background-color, zaś pusty content to element wymagany przy pracy z pseudoelementem ::after.
scaleX będziemy używali do wsuwania i wysuwania naszego podkreślenia. Na razie jest permanentnie wysunięte, dlatego je widzimy. Wsuńmy je:
.underline::after {
content: '';
position: absolute;
width: 100%;
transform: scaleX(1);
height: 2px;
bottom: 0;
left: 0;
background-color: #0087ca;
}
Teraz, aby je wysunąć na hover musimy dodać taki kod:
.underline:hover::after {
transform: scaleX(1);
}
To jeszcze nie wszystko – musimy określić, skąd ma się wysuwać. To określa tranform-origin, które podobnie jak transition nadajemy na elemencie animowanym. Transform-origin ustawiamy na 'bottom left’ (albo right, jak chcemy od drugiej strony) i oczywiście ustalamy transition, aby mieć spowolnienie tej animacji tak, abyśmy mogli zaobserwować, że coś się dzieje i z tej lewej strony wysuwa się:
.underline::after {
content: '';
position: absolute;
width: 100%;
transform: scaleX(0);
height: 2px;
bottom: 0;
left: 0;
background-color: #0087ca;
transform-origin: bottom left;
transition: transform 0.5s ease-out;
}
To już wszystko. Niby nic, ale zrozumienie tego prostego kodu i sposobu w jaki to „wysuwanie” działa otwiera nam drzwi do tworzenia naprawdę świetnych animacji i to bez dużego kombinowania. Wystarczy zrozumieć to, co właśnie zrobiliśmy.