Element rozwiązuje bardzo konkretny problem: pozwala pokazać tekst dokładnie w takim układzie, w jakim został zapisany w źródle. To ważne przy fragmentach kodu, logach z terminala, ASCII arcie, prostych schematach czy tekstach, w których odstępy mają znaczenie. Poniżej pokazuję, jak działa ten element, kiedy naprawdę warto go użyć i jak go stylizować, żeby nie psuł czytelności na mniejszych ekranach.
Najważniejsze zasady pracy z elementem
- zachowuje spacje, tabulatory i nowe linie, więc układ tekstu nie jest „spłaszczany”.
- Najczęściej łączę go z
, gdy pokazuję wielolinijkowy fragment kodu. - Jeśli blok jest szeroki, dodaję
overflow-x: auto, zamiast bezmyślnie łamać linie. - Znaki
<,>i&trzeba w treści escapować, bo zawartość nadal jest parsowana jako HTML. - Do ASCII art i podobnych bloków warto dodać opis alternatywny, bo czytnik ekranu nie „zobaczy” układu tak jak wzrok.
Czym jest element i kiedy ma sens
Najprościej mówiąc, służy do treści, w której formatowanie jest częścią znaczenia. Przeglądarka nie ma zgniatać białych znaków, tylko zachować układ z pliku źródłowego. Zwykły akapit nie nadaje się do tego dobrze, bo HTML traktuje wielokrotne spacje i entery jako coś, co można uprościć.
Ja używam tego elementu wtedy, gdy czytelnik ma zobaczyć dokładnie to samo, co autor wpisał w kodzie, na przykład:
- fragment kodu z wcięciami i podziałem na linie,
- wynik działania programu lub terminala,
- prosty schemat ASCII,
- krótki tekst, w którym układ wersów lub odstępów jest celowy,
- techniczne notatki, gdzie kolejność i proporcje linii są istotne.
To nie jest jednak zamiennik dla wszystkiego, co „da się jakoś ustawić spacjami”. Jeśli potrzebuję akapitu, używam Wewnątrz Jest tu jednak jeden detal, który potrafi zaskoczyć: pierwszy znak nowej linii bezpośrednio po otwierającym tagu jest usuwany przez parser HTML. W praktyce oznacza to, że taki zapis: nie zacznie się pustym wierszem po renderowaniu. To drobiazg, ale jeśli ktoś wkleja treść „jak leci”, potem zastanawia się, skąd wziął się ten brakujący znak na początku. Warto też pamiętać o tabulatorach. Domyślnie ich szerokość zwykle odpowiada 8 spacji, ale można ją kontrolować CSS-em przez Druga ważna rzecz: zawartość Jeśli pokazuję kod, nie ograniczam się do samego Mój domyślny wzorzec dla wielolinijkowego fragmentu kodu wygląda tak: Jeśli pokazuję dialog z terminala, naturalnie wchodzą w grę Domyślne style przeglądarki są użyteczne, ale rzadko wystarczają. Zwykle dostaję blok o stałej szerokości czcionki i zachowanym układzie, ale bez dopracowania odstępów, tła czy zachowania na małych ekranach. Dlatego prawie zawsze dorzucam kilka reguł CSS, które poprawiają czytelność i nie zmieniają znaczenia treści. Najważniejsza reguła to W praktyce mam trzy najczęstsze warianty: Jeśli pokazuję długie URL-e, JSON albo bardzo długie nazwy klas, czasem rozważam Najwięcej problemów widzę wtedy, gdy ktoś traktuje Do tego dochodzi jeszcze jeden błąd, który łatwo przeoczyć: kopiowanie treści do Przy preformatowanych blokach bardzo łatwo zapomnieć, że nie każdy odbiera stronę wzrokiem. Screen reader odczyta treść sekwencyjnie, więc ASCII art, rozbudowany układ znaków albo „rysunek” z tekstu może stracić sens. W takich sytuacjach dodaję opis alternatywny albo zastanawiam się, czy ten blok w ogóle powinien zostać pokazany jako obraz tekstowy. Jeśli treść jest ilustracyjna, a nie kodowa, sensowne bywa połączenie z Jeżeli blok ma tylko ozdabiać stronę, bez konkretnej informacji, lepiej go po prostu nie robić. W podobnych sytuacjach wybieram inne elementy: To ważne rozróżnienie: Gdy projektuję taki blok, przechodzę przez krótki zestaw pytań. Czy układ znaków coś znaczy? Czy treść jest kodem, wynikiem programu, czy może zwykłą informacją, którą lepiej pokazać inaczej? Czy na małym ekranie użytkownik będzie musiał walczyć z układem? Jeśli na któreś z tych pytań odpowiadam „nie wiem”, wracam do semantyki i wybieram prostsze rozwiązanie. W dobrze napisanym frontendzie . Jeśli listy, używam albo . Jeśli tabeli, to .
ma sens wtedy, gdy sam układ tekstu niesie informację, a nie tylko dekorację. Kiedy to już widać, warto przyjrzeć się temu, co dokładnie dzieje się ze spacjami i nowymi liniami.
Jak
traktuje spacje, taby i nowe linie
spacje, tabulatory i znaki końca linii są zachowywane. Dzięki temu zachowujesz wcięcia, pusty wiersz między blokami albo kolumnowy układ tekstu. To właśnie dlatego ten element jest tak wygodny przy kodzie i prostych wyjściach z konsoli.
Pierwsza linia
Druga linia
tab-size. W kodzie źródłowym często ustawiam to na 2 albo 4, bo taki układ jest po prostu czytelniejszy dla większości fragmentów frontendu. nadal jest traktowana jak HTML. Jeśli wewnątrz pokazujesz prawdziwy kod, znak < trzeba zapisać jako <, a & jako &. Bez tego przeglądarka spróbuje zinterpretować fragment jako znaczniki, a nie jako tekst. Gdy ten fundament jest jasny, można przejść do łączenia z innymi elementami semantycznymi.Jak łączyć
z
, i . Najczęściej łączę go z , bo to właśnie ten element mówi: „to jest kod”. odpowiada za układ, a za znaczenie. To rozróżnienie jest ważniejsze, niż się wydaje, bo semantyka pomaga zarówno przeglądarce, jak i narzędziom wspomagającym.
Element
Kiedy go używam
Co wnosi
Gdy układ znaków musi zostać zachowany
Nie zgniata białych znaków i utrzymuje podział na linie
Gdy pokazuję nazwę funkcji, fragment kodu albo wielolinijkowy snippet
Oznacza treść jako kod, nawet jeśli jest tylko jedną linią
Gdy prezentuję wynik programu lub terminala
Sygnalizuje, że to przykładowy output
Gdy pokazuję wpisywane przez użytkownika polecenie
Oznacza dane wejściowe z klawiatury
function greet(name) {
return `Cześć, ${name}`;
} i . Taki układ od razu mówi czytelnikowi, co jest wynikiem, a co poleceniem. To prosty sposób na czytelną i semantycznie poprawną dokumentację, szczególnie w artykułach technicznych i tutorialach. Kiedy semantyka jest ustawiona, zostaje jeszcze warstwa wizualna, która decyduje o tym, czy blok da się komfortowo czytać.Jak stylizować blok, żeby nie rozsypał się na mobile
pre {
overflow-x: auto;
padding: 1rem;
border-radius: 0.75rem;
background: #111827;
color: #e5e7eb;
white-space: pre;
tab-size: 4;
}
pre code {
font: inherit;
}overflow-x: auto. Dzięki niej długi blok nie rozpycha całego layoutu, tylko daje poziomy przewijany obszar. Na mobile to zwykle lepsze rozwiązanie niż agresywne zawijanie kodu, bo łamanie identyfikatorów, ścieżek czy łańcuchów znaków obniża czytelność.
Wartość CSS
Efekt
Kiedy ją wybieram
white-space: preZachowuje spacje i nie zawija linii
Dla kodu, logów i treści, w których układ ma zostać nienaruszony
white-space: pre-wrapZachowuje odstępy, ale pozwala zawijać linie
Gdy treść ma być czytelna na wąskich ekranach, a utrata idealnego układu nie jest problemem
white-space: normalSpłaszcza białe znaki
Nie do
, tylko do zwykłych akapitówpre-wrap, ale robię to ostrożnie. W kodzie złożonym z wielkich bloków tekstu wolę przewijanie, bo nie psuje struktury. W tym elemencie estetyka nigdy nie powinna wygrywać z czytelnością techniczną. A gdy wygląd jest już opanowany, najłatwiej wpaść w kilka klasycznych błędów.Najczęstsze błędy przy użyciu
jak skrót do „ładnych odstępów”. To zły trop. Ten element nie służy do udawania layoutu, tylko do zachowania znaczącego układu tekstu. Jeśli chcesz mieć większą przerwę między akapitami, lepiej zrób to CSS-em niż wciskaj treść do preformatowanego bloku.
do zwykłych akapitów - wtedy tekst wygląda „technicznie”, choć semantycznie nim nie jest. - blok nadal działa wizualnie, ale traci jasny sygnał semantyczny. przy przykładach kodu bez sprawdzenia, czy użytkownik naprawdę musi widzieć dokładnie taki zapis. Jeśli celem jest tylko uporządkowana informacja, często lepsza okaże się lista, tabela albo zwykły akapit. To prowadzi wprost do kwestii dostępności i sensownych alternatyw.Dostępność i alternatywy, gdy treść nie jest zwykłym blokiem tekstu
i , a w samym dodanie roli i etykiety opisowej. Taki zapis może wyglądać tak:
Użytkownik -> Serwer -> Baza danych
lub - gdy treść jest listą kroków lub punktów. - gdy dane mają układ kolumnowy i wierszowy.
- gdy cytuję cudzą wypowiedź. - gdy użytkownik ma coś edytować, a nie tylko oglądać. jest do wyświetlania treści, a nie do tworzenia pól edycyjnych czy imitowania layoutu. Jeśli ten podział mam w głowie, wybór odpowiedniego elementu staje się prostszy i mniej przypadkowy. Na końcu zostaje już tylko praktyczny test, czy dany blok naprawdę pomaga czytelnikowi.Jak korzystać z
tak, by pomagał, a nie przeszkadzał
tylko wtedy, gdy zachowanie odstępów ma realną wartość., lub , jeśli treść ma znaczenie techniczne.overflow-x: auto, żeby blok nie niszczył układu strony. nie jest ozdobą, tylko precyzyjnym narzędziem. Jeśli użyję go świadomie, dostaję czytelny kod, poprawną semantykę i przewidywalne zachowanie na różnych ekranach. Jeśli użyję go „na skróty”, szybko zrobi się z niego źródło problemów. I właśnie dlatego lubię ten element, bo zmusza do porządku w treści, a nie tylko w CSS-ie.