Umiejętność korzystania z pseudo-elementów before i after może okazać się konieczna, aby pisać nowoczesny CSS i w pełni wykorzystać możliwości kaskadowych arkuszy stylów. Warto też znać funkcję 'attr’, która potrafi być swego rodzaju ułatwieniem.
Mamy taką oto listę:
<ul>
<li>Chair 1 Price:<span class="price" data-currency="$">10.99</span></li>
<li>Chair 2 Price:<span class="price" data-currency="£">10.99</span></li>
</ul>
Jak się możemy domyślić, chcemy, aby przed ceną (nasz <span>) pojawił się znak symbolizujący walutę pobrany z atrybutu data-currency. Nic prostszego:
.price[data-currency]::before {
content: attr(data-currency);
}
Odwołujemy się do elementów o klasie 'price’, które posiadają atrybut 'data-currency’. Korzystając z pseudo-elementu ’::before’ dopisujemy przed nimi właściwość 'content’, której wartością jest zawartość data-currency.
A gdyby tak dopisać coś po spanie? Od tego mamy pseudo-element ’::after’. Najpierw uprośćmy naszą listę:
<ul>
<li>Chair 1<span class="price" data-currency="$">10.99</span></li>
<li>Chair 2<span class="price" data-currency="£">10.99</span></li>
</ul>
Przed spanem o klasie price chcemy dopisać ’ Price: ’ zaś po takim spanie (jeżeli posiada atrybut data-currency) umieścić symbol waluty:
.price::before {
content: ' Price: ';
}
.price[data-currency]::after {
content: attr(data-currency);
}
Oczywiście zazwyczaj nie będziemy z tych pseudo-elementów korzystać aby jakiś tekst dodawać przed czy po elemencie. To są nasze sloty (z których before jest umownie przed elementem, zaś after po elemencie – umownie, bo możemy dowolnie manipulować ich położeniem poprzez dopisywanie kolejnego CSS), które pozwalają nam coś dodać – podkreślenie, kropkę, kwadracik, dowolny wręcz CSS.
Wydaje się mało przydatne, ale wystarczy zobaczyć kilka przykładów użycia tych pseudo-elementów (także do znalezienia na tej stronie w kategorii CSS), aby zmienić zdanie.
Musimy tylko pamiętać o jednym – każdy element musi mieć content. Nawet jeżeli nie wstawiamy żadnego tekstu, musi być przynajmniej pusty napis:
.price::before {
content: '';
}
Mając to możemy dopisać dowolny CSS – podkreślenie, kropkę, kwadrat, cokolwiek, i dowolnie to wypozycjonować. Oczywiście jesteśmy ograniczeni do dwóch slotów. Zobaczmy taki element:
<h1>My heading</h1>
Ma on dwa sloty – before i after. Możemy zatem nadać mu podwójne podkreślenie – jedno pod spodem, drugie nad nim. Możemy także połączyć to z hover i transform-origin tak, że po najechaniu myszką dopiero się ono pokaże – dolne od lewej, górne od prawej strony.
Gdybyśmy jednak chcieli uzyskać „sniper effect”, czyli taki celownik (4 obramowania z pewną przerwą, przypominające celownik) po hoverze, to niestety w takiej postaci nie możemy, mamy before i after, a potrzebne nam cztery elementy.
Ale to można łatwo rozwiązać:
<h1><span></span>My heading<span></span></h1>
Dodajemy dwa puste spany, każdy z nich ma swoje before i after, co wystarczy na utworzenie 4 elementów, które dadzą nam efekt „celownika” wokół naszego nagłówka.
Możliwości CSS wraz z animacjami oraz pseudo-elementami są niemal nieograniczone. Będziemy je odkrywać w następnych szybkich CSSach.