Wszystko da się podświetlić
12.02.2007 | 22:39
XHTML & CSS
Ostatnio koduję jeden projekt, w którym mam linki. Kawałek tekstu linka jest wyświetlany pierwotnie na kolorem X. Z kolei drugi kawałek tekstu linka jest wyświetlany kolorem Y (w tle całego linka jest jeszcze jakiś tam background obrazkowy). Wszystko spoko loko, aż do momentu umieszczenia myszki nad naszym linkiem. Docelowym efektem, jaki mam uzyskać, jest zmiana koloru X na bardziej jaskrawy, koloru Y na bardziej jaskrawy oraz obrazka w tle na bardziej jaskrawy. W normalnych przeglądarkach można to uzyskać za pomocą ostylowania :hovera dla poszczególnych elementów. Mankament jest widoczny, gdy odpalimy nasz projekt pod IE
(dziwne, prawda?). Otóż IE trawi efekt :hover tylko dla znacznika <a>...</a>, co bardzo miesza nam w szykach.
Gdy efekt :hover ma polegać tylko na tym, że kolor linka oraz obrazek w tle jest jaśniejszy, możemy wtedy użyć rozwiązania, jakim jest zastosowanie przezroczystości w CSS.
Efektem docelowym będzie otrzymanie mniej więcej takiego czegoś: Demo.
Najpierw trzeba napisać odpowiedni kod HTML. A więc do dzieła żołnierzu!
- <a href="#"><em>Tytuł poprzedniego newsa</em><br />18-sty-2007, 14:56 Komentarzy: 36</a>
Pomiędzy <em>...</em> znajduje się pierwsza część linku o kolorze X. Poza tymi znacznikami znajduje się już druga część linku o kolorze Y. Reszta jest chyba jasna i tłumaczyć nie trzeba, prawda? Super :).
Teraz przejdę do tej ciekawszej części, czyli CSS. Tłem mojej strony będzie kolor tła menu, czyli #2D383C. Dodając jeszcze dwa podstawowe atrybuty, otrzymuję taki oto fragmencik kodu CSS dla całej sekcji body:
- body {
- background: #2D383C;
- font-family: Arial;
- font-size: 12px;
- }
Do tej pory chyba wszystko jest jasne…
Przychodzi czas na ostylowanie mojego linka.
1. Element <a>...</a> jest domyślnie elementem wyświetlanym liniowo, czyli display: inline;. Ja muszę z niego zrobić element blokowy dlatego od razu jako pierwszą linijkę stylującą linki mogę napisać sobie display: block;.
2. NastÄ™pnymi linijkami kodu bÄ™dzie ustalenie rozmiarów naszego elementu <a>...</a>. Z racji, że jest to teraz element blokowy możemy mu spokojnie nadać rozmiar itp. Ja nadaÅ‚em mu taki rozmiar, jaki ma obrazek tÅ‚a, czyli 322×55px. Od razu ustawiamy sobie też padding i margin (u mnie na 0).
3. Teraz można okreÅ›lić obrazek w tle. Tutaj jest sprawa nastÄ™pujÄ…ca… Obrazek dla podstawowego linka oraz dla efektu :hover bÄ™dzie taki sam. Generalnie posÅ‚ugujemy siÄ™ tylko obrazkiem, który ma być w efekcie :hover. Obrazek, którego ja użyÅ‚em ma trochÄ™ pustego tÅ‚a, dlatego jest gifowski. Generalnie nie ma to wiÄ™kszego znaczenia czy obrazek jest z pustem tÅ‚em w formacie gif czy też nie, wszystko zależy od tego, jaki efekt chcemy uzyskać.
4. Podobnie jest z kolorem fontu, dla podstawowego linka oraz dla linka z efektem :hover. Dajemy kolor, który użylibyśmy właśnie w efekcie :hover (czyli ten jaśniejszy). U mnie jest to kolor #90938a.
5. Usuwam wszelkie podkreślenia dodając linijkę text-decoration: none;.
6. Teraz najważniejsze: dodajemy dwie linijki kodu określające stopień przezroczystości. Dlaczego dwie? Bo dla normalnych przeglądarek jest to inny kod niż dla IE.
- opacity: .75;
- filter: alpha(opacity=75);
Liczba 75 to stopień przezroczystości.
I tak oto otrzymujemy taki fragment kodu CSS:
- a {
- display: block;
- width: 322px;
- height: 55px;
- padding:0;
- margin: 0;
- background: url(link.gif) top no-repeat;
- color: #90938a;
- text-decoration: none;
- opacity: .75;
- filter: alpha(opacity=75);
- }
Teraz przychodzi pora na ostylowanie efektu :hover. Wbrew pozorom tutaj będzie znaaaacznie mniej papraniny i grzebaniny. Otóż wystarczy tylko zmienić stopień przezroczystości, aby w ogóle jej już nie było (czyli wszystkie elementy będą w 100% widoczne). Posłuży nam do tego ten fragment kodu:
- a:hover {
- opacity: 1;
- filter: alpha(opacity=100);
- }
Na razie nasz link cały będzie jednokolorowy, dlatego też nie bez kozery jego fragment umieściłem między <em>...</em>. Wystarczy teraz tylko odpowiednio go ostylować, zmieniając przy tym jego kolor (oczywiście dajemy wartość, która ma być wyświetlana w efekcie :hover, u mnie jest to: #82b149.
Tekst umieszczony w <em>...</em> jest domyślnie pochylony dlatego dodajemy linijkę, która sprawi, że będize on znowu prosty: font-style: normal;. Dodatkowo możemy pogrubić font (font-weight: bold;) oraz zmienić rozmiar np. na 13px (font-size: 13px;). I w ten sposób otrzymujemy taki kod:
- em {
- font-style: normal;
- font-weight: bold;
- color: #82b149;
- font-size: 13px;
- }
Końcowy kod CSS wygląda tak:
- body {
- background: #2D383C;
- font-family: Arial;
- font-size: 12px;
- }
- a {
- display: block;
- width: 322px;
- height: 55px;
- padding:0;
- margin: 0;
- background: url(link.gif) no-repeat;
- color: #90938a;
- text-decoration: none;
- opacity: .75;
- filter: alpha(opacity=75);
- }
- a:hover {
- opacity: 1;
- filter: alpha(opacity=100);
- }
- em {
- font-style: normal;
- font-weight: bold;
- color: #82b149;
- font-size: 13px;
- }
DomyÅ›lam siÄ™, że publikujÄ…c tÄ… metodÄ™ nie jestem pierwszym, który jÄ… odkryÅ‚. Ale cóż… Może przydać siÄ™ potomnym.
Dodaj ten wpis do:


OSKAr 12.02.2007 | 23:06
Swego czasu podÅ›wietlane bannerki byÅ‚y bardzo ‘trendy’.
Ale przyda siÄ™, przyda ; )