5.7. Dekoracja tekstu (text-decoration)
Wprowadzenie: Linie ozdobne tekstu
Właściwość text-decoration w CSS służy do dodawania linii dekoracyjnych do tekstu, takich jak podkreślenie, nadkreślenie czy przekreślenie. Jest to właściwość zbiorcza (shorthand), która kontroluje kilka bardziej szczegółowych właściwości związanych z dekoracją tekstu.
Najczęstszym zastosowaniem jest stylizowanie linków (usuwanie domyślnego podkreślenia lub dodawanie go w stanie :hover) oraz wizualne wyróżnianie lub oznaczanie tekstu.
Właściwość zbiorcza text-decoration
Właściwość text-decoration jest skrótem dla następujących właściwości składowych:
text-decoration-line: Określa typ linii (np.underline,overline,line-through).text-decoration-color: Określa kolor linii.text-decoration-style: Określa styl linii (np.solid,wavy,dotted,dashed,double).text-decoration-thickness: Określa grubość linii.
W najprostszej formie, text-decoration przyjmuje głównie wartości określające typ linii (text-decoration-line).
Podstawowe wartości dla text-decoration (i text-decoration-line):
none: Brak jakichkolwiek linii dekoracyjnych. Używane np. do usuwania domyślnego podkreślenia linków. Jest to wartość domyślna dla większości elementów (poza np.<a>).underline: Dodaje linię pod tekstem (podkreślenie). Domyślna dla linków (<a>).overline: Dodaje linię nad tekstem (nadkreślenie).line-through: Dodaje linię przez środek tekstu (przekreślenie). Podobne do efektu elementów<s>i<del>.
Można również łączyć wiele typów linii, oddzielając je spacjami, np. text-decoration: underline overline;.
a {
/* Usunięcie domyślnego podkreślenia linków */
text-decoration: none;
}
a:hover {
/* Dodanie podkreślenia po najechaniu myszką */
text-decoration: underline;
}
.przekreslony {
text-decoration: line-through;
}
.naglowek-specjalny {
text-decoration: underline overline dotted red 2px; /* Przykład użycia wielu wartości */
/* Powyższe jest równoważne: */
/* text-decoration-line: underline overline; */
/* text-decoration-style: dotted; */
/* text-decoration-color: red; */
/* text-decoration-thickness: 2px; */
}
Szczegółowe właściwości dekoracji tekstu
Chociaż właściwość zbiorcza text-decoration jest często wystarczająca, czasami chcemy kontrolować poszczególne aspekty linii dekoracyjnej niezależnie.
text-decoration-line:- Wartości:
none,underline,overline,line-through(można łączyć spacjami).
- Wartości:
text-decoration-color:- Określa kolor linii. Może przyjmować dowolną wartość koloru CSS (nazwa, HEX, RGB, HSL,
currentColoritp.). - Domyślnie linia przyjmuje kolor tekstu (jakby miała wartość
currentColor).
a.specjalny { text-decoration: underline; text-decoration-color: orange; /* Podkreślenie będzie pomarańczowe, nawet jeśli tekst jest inny */ }- Określa kolor linii. Może przyjmować dowolną wartość koloru CSS (nazwa, HEX, RGB, HSL,
text-decoration-style:- Określa styl linii.
- Wartości:
solid(ciągła - domyślna),double(podwójna),dotted(kropkowana),dashed(przerywana),wavy(falowana).
.wazne-ostrzezenie { text-decoration: underline; text-decoration-style: wavy; text-decoration-color: red; }text-decoration-thickness:- Określa grubość linii.
- Wartości:
auto(domyślna), wartość długości (np.2px,0.1em), procent (względem1em).
h2 { text-decoration: underline; text-decoration-thickness: 3px; /* Grube podkreślenie */ }
Kolejność wartości w skróconej właściwości text-decoration:
Zalecana kolejność to: <text-decoration-line> || <text-decoration-style> || <text-decoration-color> || <text-decoration-thickness>. Można pominąć dowolne wartości (przyjmą wtedy wartości domyślne), ale przynajmniej text-decoration-line jest zazwyczaj potrzebne, aby linia była widoczna (chyba że ustawiamy tylko kolor/styl/grubość dla linii dziedziczonej).
Dziedziczenie i Zastosowanie
Właściwości text-decoration-* **nie są dziedziczone**. Oznacza to, że jeśli ustawisz text-decoration: underline; dla diva, tekst bezpośrednio w divie będzie podkreślony, ale tekst w zagnieżdżonych paragrafach już nie (chyba że one same mają ustawione podkreślenie).
Jednak linie dekoracyjne są rysowane dla całego elementu, w tym dla jego potomków. Jeśli podkreślisz diva, linia będzie biegła pod całą jego zawartością, włączając w to zagnieżdżone elementy.
Uwaga: Domyślne podkreślenie linków (<a>) jest często uważane za ważny wskaźnik interaktywności i dostępności. Całkowite usuwanie podkreślenia linków (text-decoration: none;) bez zapewnienia innego, wyraźnego wizualnego wyróżnienia (np. kolorem o wysokim kontraście, zmianą wyglądu po najechaniu) może utrudnić użytkownikom identyfikację linków.
Zadania praktyczne
Zadanie 1 (z rozwiązaniem)
Usuń domyślne podkreślenie ze wszystkich linków (a) na stronie, ale dodaj je ponownie, gdy użytkownik najedzie na link myszką (stan :hover).
Rozwiązanie:
CSS:
a {
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
Efekt: Linki nie będą miały podkreślenia, dopóki kursor myszy nie znajdzie się nad nimi.
Zadanie 2 (do samodzielnego wykonania)
Stwórz element span z klasą .highlight. Użyj właściwości składowych, aby nadać mu falowane (wavy), czerwone (red) podkreślenie (underline) o grubości 2px.
Zadanie 3 (do samodzielnego wykonania)
Masz tekst oznaczający starą cenę, np. <span class="old-price">100 zł</span>. Użyj text-decoration, aby przekreślić tę cenę.
FAQ - Najczęściej zadawane pytania
Jaka jest różnica między text-decoration: line-through; a elementami <s> lub <del>?
Efekt wizualny jest podobny (przekreślenie). Jednak elementy <s> (struck-through) i <del> (deleted text) mają znaczenie semantyczne. <s> oznacza treść, która nie jest już poprawna lub aktualna. <del> oznacza treść usuniętą. text-decoration: line-through; jest czysto prezentacyjne. Używaj HTML zgodnie ze znaczeniem, a CSS do stylizacji.
Czy mogę kontrolować odstęp między tekstem a podkreśleniem?
Standardowa właściwość text-decoration nie daje bezpośredniej kontroli nad tym odstępem. Istnieje nowsza właściwość text-underline-offset, która na to pozwala, i jest już dość dobrze wspierana przez nowoczesne przeglądarki. Można jej używać w połączeniu z text-decoration.
Czy text-decoration-color zawsze nadpisuje kolor tekstu dla linii?
Tak. Jeśli ustawisz text-decoration-color na inną wartość niż kolor tekstu, linia dekoracyjna będzie miała ten specyficzny kolor, niezależnie od wartości właściwości color.
Czy animowanie text-decoration jest możliwe?
Animowanie właściwości text-decoration (np. płynne pojawianie się podkreślenia) jest trudne i często nie działa płynnie, ponieważ wiele z tych właściwości (jak text-decoration-line) nie jest łatwo interpolowalnych. Lepsze efekty wizualne często osiąga się, symulując podkreślenie za pomocą pseudoelementów (::before/::after) z tłem lub obramowaniem, które można łatwiej animować.