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,
currentColor
itp.). - 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ć.