Napisz do mnie
← Wszystkie wpisy

Płynna typografia
z clamp()

Tutorial CSS
Adrian Fabiszak · 6 min czytania
Demo na żywoPrzeciągnij suwak: szerokość kontenera

Frontend, który robi wrażenie

Rozmiar tego nagłówka liczyclamp(). Zero media queries.

szerokość: 720pxfont-size: 48pxzakres: 24px → 56px

Nagłówek na telefonie jest za duży, na monitorze za mały, a w tablecie łamie się w najgorszym miejscu. Znasz to? Zamiast pisać kolejne breakpointy, możesz opisać cały zakres jedną funkcją.

01 / 05Problem z media queries

Klasyczne podejście to skoki: 2rem do 600px, 3rem do 900px, 4rem powyżej. Działa, ale rozmiar zmienia się skokowo, a każdy nowy komponent to kolejne bloki w CSS.

Podejście skokoweh1 { font-size: 2rem; }
@media (min-width: 600px) { h1 { font-size: 3rem; } }
@media (min-width: 900px) { h1 { font-size: 4rem; } }

Trzy reguły, trzy miejsca do pilnowania i zero płynności między nimi.

02 / 05Jak działa clamp()

clamp(min, preferowana, max) przyjmuje trzy wartości. Przeglądarka bierze wartość preferowaną, ale nigdy nie zejdzie poniżej minimum ani nie przekroczy maksimum.

Argument Rola Przykład
min najmniejszy dozwolony rozmiar 1.6rem
preferowana wartość płynna, zależna od ekranu 4vw + .5rem
max górny limit, żeby nie urosło za bardzo 3.4rem
Jedna linijka zamiast trzech regułh1 { font-size: clamp(1.6rem, 4vw + .5rem, 3.4rem); }

03 / 05Wzór, który działa

Najczęstszy błąd to dobieranie vw na oko. Lepiej policzyć: chcesz, żeby rozmiar rósł liniowo od 24px przy 320px do 56px przy 1000px szerokości ekranu.

  • nachylenie = (56 − 24) / (1000 − 320) = 0,0471, czyli 4,71vw
  • przesunięcie = 24 − 0,0471 × 320 = 8,9px, czyli 0,56rem
Wynik obliczeńh1 { font-size: clamp(1.5rem, 4.71vw + .56rem, 3.5rem); }
Wskazówka

Dodawaj rem do vw. Dzięki temu tekst nadal reaguje na zmianę rozmiaru czcionki w ustawieniach przeglądarki.

04 / 05Cała skala typografii

Najwygodniej zapisać skalę raz, w zmiennych, i używać jej w całym projekcie. Tak działa ta strona.

:root:root {
  --step-0: clamp(1rem, .96rem + .2vw, 1.125rem);
  --step-1: clamp(1.25rem, 1.1rem + .7vw, 1.6rem);
  --step-2: clamp(1.6rem, 1.2rem + 2vw, 2.6rem);
  --step-3: clamp(2.1rem, 1.2rem + 4.5vw, 4.6rem);
}
h1 { font-size: var(--step-3); }
h2 { font-size: var(--step-2); }

Zmiana skali w jednym miejscu przestawia całą stronę, a Ty nie dotykasz żadnego media query.

05 / 05Pułapki i dostępność

Uwaga!

Sam vw w font-size blokuje powiększanie tekstu. To najczęstszy błąd przy płynnej typografii.

  • Nie używaj samego vw. Użytkownik nie przybliży wtedy tekstu zoomem (WCAG 1.4.4).
  • Pilnuj max. Bez górnego limitu nagłówek na ultrawide urośnie do absurdu.
  • Sprawdź zawijanie. Dodaj text-wrap: balance, żeby nagłówek nie kończył się jednym wyrazem w linii.
  • Testuj na 320px. Najmniejszy ekran najszybciej pokaże błąd.

To wszystko. Jedna funkcja, mniej kodu i nagłówki, które wyglądają dobrze na każdym ekranie. Spróbuj przesunąć suwak na górze strony jeszcze raz.

Podziel się wpisem

Jeśli wpis Ci pomógł, wyślij go komuś, kto też walczy z frontendem.

LinkedInXFacebook