8.3. Przepełnienie tekstu (text-overflow
)
Wprowadzenie: Sygnalizowanie ukrytego tekstu
Gdy używamy overflow: hidden;
(lub scroll
/auto
) do ukrycia treści, która nie mieści się w elemencie, użytkownik może nie wiedzieć, że część treści jest niewidoczna, zwłaszcza jeśli nie ma pasków przewijania.
Właściwość text-overflow
w CSS pozwala **wizualnie zasygnalizować**, że tekst został obcięty w poziomie. Działa ona tylko wtedy, gdy spełnione są określone warunki, przede wszystkim gdy tekst przepełnia swój kontener w poziomie i to przepełnienie jest ukrywane.
Kluczowe wymagania dla text-overflow
:
- Element musi mieć ustawione
overflow: hidden;
(lubscroll
/auto
, ale efekt jest widoczny tylko dla ukrytej części). - Element musi mieć ustawione
white-space: nowrap;
(lub inną właściwość zapobiegającą zawijaniu tekstu, np. w komórkach tabeli). - Element musi być elementem blokowym lub inline-block z określoną szerokością (lub
max-width
).
text-overflow
dotyczy tylko przepełnienia w **linii tekstu (w poziomie)**, nie działa dla przepełnienia pionowego.
Wartości text-overflow
Właściwość text-overflow
przyjmuje głównie dwie wartości:
clip
: (Domyślne) Tekst jest po prostu **obcinany** na granicy kontenera. Nie jest dodawany żaden wizualny wskaźnik obcięcia.ellipsis
: Wyświetla **wielokropek (...)** na końcu widocznej części tekstu, aby zasygnalizować, że dalsza część została ukryta. Przeglądarka stara się umieścić wielokropek tak, aby zmieścił się w kontenerze.- Istnieje też możliwość podania własnego ciągu znaków (np.
text-overflow: '--';
), ale wsparcie dla tej funkcji jest bardzo ograniczone i niezalecane.
<p class="text-example clip-example">Bardzo długi tekst, który zostanie obcięty.</p>
<p class="text-example ellipsis-example">Bardzo długi tekst, który zostanie obcięty z wielokropkiem.</p>
.text-example {
width: 200px; /* Ograniczona szerokość */
border: 1px solid gray;
padding: 5px;
margin-bottom: 10px;
/* Wymagane dla text-overflow: */
overflow: hidden;
white-space: nowrap;
}
.clip-example {
text-overflow: clip; /* Domyślne - tekst po prostu ucięty */
}
.ellipsis-example {
text-overflow: ellipsis; /* Tekst ucięty z wielokropkiem (...) */
}
W powyższym przykładzie, oba paragrafy będą miały obcięty tekst, ale drugi paragraf dodatkowo wyświetli wielokropek na końcu widocznej części.
Zastosowania
text-overflow: ellipsis;
jest bardzo przydatne w interfejsach użytkownika, gdzie przestrzeń jest ograniczona:
- W komórkach tabel, aby zapobiec rozpychaniu kolumn przez długie wpisy.
- W listach plików, wiadomości, powiadomień, gdzie tytuły lub nazwy mogą być długie.
- W przyciskach lub elementach nawigacyjnych z dynamicznym tekstem.
- Wszędzie tam, gdzie chcemy elegancko zasygnalizować użytkownikowi, że widzi tylko część dłuższego tekstu.
Zadania praktyczne
Zadanie 1 (z rozwiązaniem)
Stwórz element div
o szerokości 150px
. Umieść w nim długi tekst bez zawijania (white-space: nowrap;
). Ukryj przepełnienie (overflow: hidden;
) i zastosuj text-overflow: ellipsis;
.
Rozwiązanie:
HTML:
<div class="ellipsis-box">To jest przykład długiego tekstu do zadania.</div>
CSS:
.ellipsis-box {
width: 150px;
border: 1px solid teal;
padding: 8px;
background-color: #e0ffff;
/* Wymagane warunki */
white-space: nowrap;
overflow: hidden;
/* Efekt */
text-overflow: ellipsis;
}
Efekt: Tekst w pudełku zostanie obcięty, a na końcu pojawi się wielokropek (...).
Zadanie 2 (do samodzielnego wykonania)
Zmodyfikuj Zadanie 1, usuwając white-space: nowrap;
. Czy text-overflow: ellipsis;
nadal działa? Dlaczego?
Zadanie 3 (do samodzielnego wykonania)
Zmodyfikuj Zadanie 1, usuwając overflow: hidden;
(pozostawiając white-space: nowrap;
). Czy text-overflow: ellipsis;
nadal działa? Dlaczego?
FAQ - Najczęściej zadawane pytania
Czy text-overflow
działa dla wielu linii tekstu?
Standardowo, text-overflow: ellipsis;
działa tylko dla **pojedynczej linii tekstu**, która jest obcinana. Do tworzenia wielokropka dla tekstu wieloliniowego (np. po 3 liniach) historycznie używano skomplikowanych obejść JavaScript lub niestandardowych właściwości CSS (jak -webkit-line-clamp
). Obecnie właściwość line-clamp
jest standardyzowana, ale jej wsparcie i implementacja mogą się różnić.
Dlaczego text-overflow
nie działa?
Najczęstsze przyczyny to niespełnienie jednego z warunków: brak overflow: hidden;
(lub scroll
/auto
), brak white-space: nowrap;
(lub innego mechanizmu zapobiegającego zawijaniu), lub brak ograniczenia szerokości elementu (width
/max-width
), przez co tekst się po prostu mieści lub zawija.
Czy mogę zmienić wygląd wielokropka (...)?
Nie za pomocą standardowego CSS. Wielokropek jest renderowany przez przeglądarkę i jego wygląd jest zazwyczaj stały. Teoretycznie można by próbować zastąpić go własnym znakiem za pomocą pseudoelementów i JavaScript, ale jest to skomplikowane i niezalecane.
Czy text-overflow
wpływa na dostępność?
Ukrywanie treści może wpływać na dostępność. Chociaż text-overflow: ellipsis;
wizualnie sygnalizuje obcięcie, użytkownicy czytników ekranu mogą nadal mieć dostęp do pełnej treści (zależy od implementacji przeglądarki i czytnika). Ważne jest, aby upewnić się, że kluczowe informacje nie są całkowicie ukrywane bez możliwości dostępu (np. przez interakcję, która pokazuje całość).