Kurs HTML

8.1. Wprowadzenie do overflow (visible, hidden, scroll, auto)

Strona główna > Kurs CSS > Rozdział 8: Właściwość Overflow > Wprowadzenie do overflow (visible, hidden, scroll, auto)

Wprowadzenie: Co zrobić z nadmiarem treści?

Właściwość overflow w CSS określa, co ma się stać z treścią, która **nie mieści się** w ustalonych wymiarach (width i/lub height) elementu blokowego. Domyślnie treść po prostu "wylewa się" poza granice elementu, ale overflow pozwala to zachowanie kontrolować.

Jest to kluczowa właściwość do zarządzania długimi tekstami, dużymi obrazkami w małych kontenerach, tworzenia przewijalnych obszarów na stronie oraz jako mechanizm clearfix (jak wspomniano w poprzedniej lekcji).

W tej lekcji poznamy cztery podstawowe wartości właściwości overflow.

overflow: visible; (Domyślne)

Jest to **wartość domyślna** dla większości elementów blokowych. Treść, która nie mieści się w elemencie, jest renderowana **na zewnątrz** jego granic (pudełka).

  • Treść "wylewa się" poza element.
  • Może nachodzić na inne elementy znajdujące się poniżej lub obok.
  • Nie pojawiają się paski przewijania.
<div class="box visible-example">
  Bardzo długi tekst, który na pewno nie zmieści się w ustalonych wymiarach tego małego pudełka i wyleje się poza jego granice.
</div>
<p>Tekst poniżej pudełka.</p>
.box {
  width: 150px;
  height: 50px;
  border: 1px solid black;
  margin-bottom: 10px;
}

.visible-example {
  overflow: visible; /* Domyślne */
  background-color: lightyellow;
}
/* Efekt: Tekst wyleje się poza żółte pudełko i może nachodzić na paragraf poniżej. */

overflow: hidden;

Treść, która nie mieści się w elemencie, jest **przycinana (obcinana)** do jego granic i staje się niewidoczna. Nie pojawiają się paski przewijania.

  • Nadmiarowa treść jest ukrywana.
  • Element zachowuje swoje ustalone wymiary.
  • Brak możliwości dostępu do ukrytej treści przez użytkownika (bez dodatkowego kodu JavaScript).
  • Tworzy nowy kontekst formatowania blokowego (BFC), co m.in. zapobiega zapadaniu się rodzica przy floatach.
<div class="box hidden-example">
  Bardzo długi tekst, który na pewno nie zmieści się w ustalonych wymiarach tego małego pudełka i zostanie brutalnie obcięty na jego krawędziach.
</div>
<p>Tekst poniżej pudełka.</p>
.hidden-example {
  overflow: hidden;
  background-color: lightcoral;
}
/* Efekt: Tekst zostanie obcięty na granicach czerwonego pudełka. */
/* Paragraf poniżej pojawi się normalnie pod pudełkiem. */

overflow: scroll;

Treść, która nie mieści się w elemencie, jest przycinana, ale przeglądarka **zawsze dodaje paski przewijania** (zarówno poziomy, jak i pionowy), umożliwiając użytkownikowi dostęp do całej zawartości.

  • Nadmiarowa treść jest ukrywana, ale dostępna przez przewijanie.
  • Paski przewijania są widoczne **zawsze**, nawet jeśli treść idealnie mieści się w elemencie (wtedy paski są nieaktywne, "wyszarzone").
  • Paski przewijania zajmują pewną przestrzeń wewnątrz elementu, potencjalnie zmniejszając dostępną przestrzeń dla treści.
  • Tworzy nowy BFC.
<div class="box scroll-example">
  Bardzo długi tekst, który na pewno nie zmieści się w ustalonych wymiarach tego małego pudełka. Dzięki overflow: scroll pojawią się paski przewijania, które umożliwią odczytanie całości.
</div>
<p>Tekst poniżej pudełka.</p>
.scroll-example {
  overflow: scroll;
  background-color: lightblue;
}
/* Efekt: Pojawią się paski przewijania (pionowy na pewno, poziomy jeśli */
/* słowa są za długie i nie ma łamania linii). */

overflow: auto;

Jest to wartość najbardziej elastyczna i często preferowana. Przeglądarka dodaje paski przewijania **tylko wtedy, gdy są one potrzebne** – czyli tylko wtedy, gdy treść faktycznie nie mieści się w dostępnej przestrzeni.

  • Nadmiarowa treść jest ukrywana, ale dostępna przez przewijanie (jeśli występuje).
  • Paski przewijania pojawiają się **automatycznie** tylko dla tej osi (poziomej lub pionowej), w której treść się nie mieści.
  • Jeśli treść mieści się idealnie, paski przewijania nie są wyświetlane.
  • Tworzy nowy BFC.
<div class="box auto-example">
  Krótki tekst.
</div>
<div class="box auto-example" style="height: 80px;">
  Bardzo, bardzo, bardzo, bardzo, bardzo, bardzo, bardzo, bardzo, bardzo, bardzo, bardzo, bardzo, bardzo, bardzo, bardzo, bardzo długi tekst, który spowoduje pojawienie się pionowego paska przewijania.
</div>
<p>Tekst poniżej pudełek.</p>
.auto-example {
  overflow: auto;
  background-color: lightgreen;
}
/* Efekt: Pierwsze pudełko nie będzie miało pasków. */
/* Drugie pudełko będzie miało pionowy pasek przewijania. */

Zadania praktyczne

Zadanie 1 (z rozwiązaniem)

Stwórz element div o stałej szerokości i wysokości (np. 200px na 100px). Wypełnij go długim tekstem. Zastosuj overflow: hidden; i zobacz, jak tekst zostaje obcięty.

Rozwiązanie:

HTML:

<div class="clipped-box">
  To jest bardzo długi tekst demonstracyjny, który ma na celu pokazanie, jak działa właściwość overflow z wartością hidden. Treść, która wykracza poza ustalone wymiary pudełka, zostanie po prostu ucięta i nie będzie widoczna dla użytkownika.
</div>

CSS:

.clipped-box {
  width: 200px;
  height: 100px;
  border: 1px solid red;
  background-color: #fee;
  overflow: hidden;
}

Efekt: Tekst zostanie obcięty na granicach czerwonego pudełka.

Zadanie 2 (do samodzielnego wykonania)

Weź element z Zadania 1 i zmień overflow: hidden; na overflow: scroll;. Zaobserwuj pojawienie się pasków przewijania.

Zadanie 3 (do samodzielnego wykonania)

Weź element z Zadania 1 i zmień overflow: hidden; na overflow: auto;. Następnie skróć tekst tak, aby mieścił się w pudełku. Zaobserwuj, jak paski przewijania znikają.

FAQ - Najczęściej zadawane pytania

Kiedy używać scroll, a kiedy auto?

auto jest zazwyczaj preferowane, ponieważ pokazuje paski przewijania tylko wtedy, gdy są potrzebne, co jest bardziej estetyczne. scroll używa się rzadziej, głównie w sytuacjach, gdy chcemy, aby paski były zawsze widoczne (nawet nieaktywne), np. aby uniknąć "przeskakiwania" layoutu, gdy paski pojawiają się i znikają dynamicznie.

Czy overflow działa na elementach inline?

Nie, właściwość overflow ma zastosowanie tylko do elementów blokowych (lub elementów, które generują kontekst formatowania blokowego, jak inline-block, table-cell) z ustaloną wysokością lub szerokością (lub max-height/max-width).

Czy mogę stylizować paski przewijania?

Standardowy CSS nie oferuje bezpośrednich właściwości do stylizowania wyglądu pasków przewijania. Istnieją jednak niestandardowe pseudoelementy specyficzne dla przeglądarek (głównie WebKit, np. ::-webkit-scrollbar), które na to pozwalają, ale nie jest to rozwiązanie w pełni przenośne. Nowsze specyfikacje CSS wprowadzają właściwości scrollbar-width i scrollbar-color, ale ich wsparcie jest jeszcze ograniczone.

Jak overflow wpływa na box-shadow lub outline?

overflow: hidden; (lub scroll/auto) przycina również efekty wizualne, które wychodzą poza granice elementu, takie jak box-shadow czy outline. Domyślne overflow: visible; pozwala im być widocznymi.