Kurs HTML

8.3. Przepełnienie tekstu (text-overflow)

Strona główna > Kurs CSS > Rozdział 8: Właściwość Overflow > 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; (lub scroll/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ść).