Konwerter PX na REM
Aby przeliczyć px na rem, podziel wartość w pikselach przez bazowy rozmiar czcionki elementu głównego: rem = px / baza. Przy domyślnej bazie przeglądarki 16px mamy 24px / 16 = 1.5rem. Zmień bazę poniżej – 14px dla Ant Design, 10px dla sztuczki z 62,5 % – a wartości rem i em pójdą za nią; wartość w punktach zależy natomiast od pikseli, bo 1px to zawsze 0,75pt.
Pole em zakłada, że element dziedziczy bazowy rozmiar czcionki ustawiony powyżej. W CSS em odnosi się do rozmiaru czcionki samego elementu, a do rozmiaru rodzica wtedy, gdy ustawiasz nim właściwość font-size.
Konwersja hurtowa: wklej CSS lub listę wartości w px
Każda wartość w px zostaje przepisana na rem względem bazowego rozmiaru czcionki powyżej.
Jak przeliczyć px na rem?
Wzór to rem = px / bazowy rozmiar czcionki, a odwrotnie px = rem x bazowy rozmiar czcionki. Liczy się wyłącznie rozmiar czcionki głównego elementu html, niezależnie od tego, jak głęboko zagnieżdżony jest element – i to właśnie czyni arytmetykę rem przewidywalną. Przy domyślnej bazie 16px: 10px = 0.625rem, 12px = 0.75rem, 14px = 0.875rem, 18px = 1.125rem, 20px = 1.25rem i 40px = 2.5rem.
Nie zaokrąglaj wyniku. 15px to przy bazie 16px dokładnie 0.9375rem; zaokrąglenie do 0.94rem przesuwa renderowany rozmiar do 15.04px i psuje wyrównanie w siatce. Przeglądarki liczą długości subpikselowe i przy rysowaniu przyciągają je do siatki pikseli urządzenia, więc kopiuj dokładną wartość podaną przez konwerter. Konwerter podaje do sześciu miejsc po przecinku: dokładnie przy bazach, które dzielą się równo, jak 16px i 10px, i z dokładnością do milionowej części rem przy bazie takiej jak 14px, która się nie dzieli.
Tabela px na rem dla bazy 16px, 14px i 10px
Ta sama wartość w pikselach daje trzy różne wartości rem, zależnie od bazy ustawionej w projekcie, dlatego tabela podaje wszystkie trzy, a do tego odpowiednik w punktach (CSS definiuje 1px jako 1/96 cala, a 1pt jako 1/72 cala, więc 1px = 0.75pt). Kolumny dla 16px i 10px są dokładne. Przy bazie 14px dzielenie zwykle nie wychodzi równo, więc te wartości są zaokrąglone do czterech miejsc po przecinku i oznaczone znakiem przybliżenia; konwerter powyżej pokazuje więcej cyfr.
| Piksele | rem (baza 16 px) | rem (baza 14 px) | rem (baza 10 px) | Punkty |
|---|---|---|---|---|
| 1px | 0.0625rem | ≈0.0714rem | 0.1rem | 0.75pt |
| 2px | 0.125rem | ≈0.1429rem | 0.2rem | 1.5pt |
| 4px | 0.25rem | ≈0.2857rem | 0.4rem | 3pt |
| 8px | 0.5rem | ≈0.5714rem | 0.8rem | 6pt |
| 10px | 0.625rem | ≈0.7143rem | 1rem | 7.5pt |
| 12px | 0.75rem | ≈0.8571rem | 1.2rem | 9pt |
| 14px | 0.875rem | 1rem | 1.4rem | 10.5pt |
| 16px | 1rem | ≈1.1429rem | 1.6rem | 12pt |
| 18px | 1.125rem | ≈1.2857rem | 1.8rem | 13.5pt |
| 20px | 1.25rem | ≈1.4286rem | 2rem | 15pt |
| 24px | 1.5rem | ≈1.7143rem | 2.4rem | 18pt |
| 28px | 1.75rem | 2rem | 2.8rem | 21pt |
| 32px | 2rem | ≈2.2857rem | 3.2rem | 24pt |
| 36px | 2.25rem | ≈2.5714rem | 3.6rem | 27pt |
| 40px | 2.5rem | ≈2.8571rem | 4rem | 30pt |
| 48px | 3rem | ≈3.4286rem | 4.8rem | 36pt |
| 64px | 4rem | ≈4.5714rem | 6.4rem | 48pt |
| 80px | 5rem | ≈5.7143rem | 8rem | 60pt |
| 96px | 6rem | ≈6.8571rem | 9.6rem | 72pt |
px, rem czy em: której jednostki użyć?
Praktyczny podział: rem do wszystkiego, co ma podążać za rozmiarem tekstu czytelnika, em do wartości, które muszą podążać za rozmiarem czcionki samego elementu, a px tylko tam, gdzie długość musi pozostać fizycznie stała. Kolumna z przykładem zakłada bazę 16px i rodzica o rozmiarze 16px.
| Jednostka | Odnosi się do | 20px to | Najlepsza do | Podąża za rozmiarem tekstu czytelnika |
|---|---|---|---|---|
| px | Do niczego – jednostka bezwzględna (1px = 1/96 cala) | 20px | Włoskowate obramowania, obwódki fokusu, dokładne rozmiary ikon | Nie |
| rem | Rozmiar czcionki głównego elementu html | 1.25rem | Rozmiary tekstu, odstępy, punkty przełamania, całe skale typograficzne | Tak |
| em | Rozmiar czcionki samego elementu (rodzica przy ustawianiu font-size) | 1.25em | Wypełnienie, które ma rosnąć razem z etykietą | Tak |
| % | Wartość rodzica dla tej właściwości | 125% | Płynne szerokości i stare drzewa font-size | Tak (font-size) |
px czy rem do wypełnień, marginesów i obramowań?
Używaj rem do wypełnień i marginesów, które mają oddychać, gdy tekst rośnie: padding przycisków, odstępy w kartach, odstępy sekcji, przerwy w siatce. Dla cienkich linii zostaw px. Obramowanie 1px to jeden ostry piksel niezależny od urządzenia, podczas gdy to samo obramowanie zapisane jako 0.0625rem może zostać zaokrąglone do zera lub rozmyć się przy niektórych poziomach powiększenia; to samo dotyczy obwódek fokusu i separatorów o grubości 2px. Dlatego konwersja hurtowa powyżej domyślnie zostawia wartości 1px i 2px nietknięte, a przepisuje całą resztę.
Media queries to drugie miejsce, w którym rem się opłaca. Wewnątrz media query rem odnosi się do początkowego rozmiaru czcionki przeglądarki, a nie do twojej reguły html: punkt przełamania 48rem to 768px przy ustawieniach domyślnych i rośnie dla czytelnika, który powiększył tekst. Punkty przełamania w px nie ruszają się nigdy.
Jak przeliczyć px na rem w Figmie, VS Code i Tailwindzie?
Figma mierzy w px, ale Dev Mode potrafi wypisywać rem: otwórz ustawienia Inspect, wybierz „Set unit scale” i podaj swój bazowy rozmiar czcionki (domyślnie 1rem = 16px). Rozszerzenia VS Code takie jak cssrem przeliczają przez autouzupełnianie i udostępniają bazę w ustawieniach – cssrem.rootFontSize, domyślnie 16 – więc sprawdź, czy pasuje, zanim zaufasz wynikowi w projekcie na 14px. Cały plik wklej do pola konwersji hurtowej powyżej i najpierw ustaw bazę. Domyślna skala Tailwinda jest już oparta na rem przy bazie 16px: jedna jednostka odstępu to 0.25rem (4px), więc 16px to 4, 24px to 6, a 40px to 10.
Źródła
O Konwerterze PX na REM
Ten konwerter px na rem odpowiada na jedno pytanie: czym staje się w CSS wartość w pikselach z twojego pliku projektowego przy bazowym rozmiarze czcionki, którego naprawdę używa twój projekt? Przesuń suwak bazy – 16px to domyślna wartość przeglądarki, 14px baza Ant Design, 10px stara sztuczka z 62,5 % – a każda wartość rem i em na stronie zostanie względem niej przeliczona, więc nigdy nie musisz pamiętać, dla jakiej bazy zapisano daną liczbę.
Bazą, którą wpisujesz, jest to, co twój arkusz stylów ustawia na elemencie html – nie na body i nie rozmiar czcionki komponentu, który właśnie stylujesz. Jeśli żadna reguła jej nie ustawia, obowiązuje wartość domyślna przeglądarki: 16px, o ile czytelnik jej nie zwiększył. W DevTools zaznacz węzeł html i odczytaj jego obliczony font-size; ta liczba jest dzielnikiem dla całego arkusza. Cztery przyciski frameworków wpisują ją za ciebie dla Tailwinda, Bootstrapa, Material UI i Ant Design.
Wyróżnikiem jest tu tryb hurtowy: wklej arkusz stylów, zrzut specyfikacji z Figmy albo zwykłą listę liczb, a dostaniesz wersję w rem wraz z licznikiem zmienionych wartości, gotową do skopiowania lub pobrania jako CSV. Pod narzędziem znajdziesz wzór w obie strony, tabelę od 1px do 96px dla trzech baz z odpowiednikami w punktach, tabelę porównawczą jednostek i dziesięć obszernie omówionych pytań.
Przypadki użycia
Jak używać
Ustaw bazowy rozmiar czcionki: 16px to domyślna wartość przeglądarki, 14px odpowiada Ant Design, a 10px daje sztuczkę z 62,5 %.
Wpisz wartość w pikselach w pole Piksele. Pola rem, em i pt aktualizują się w trakcie pisania.
Albo odwrotnie: wpisz wartość w rem i odczytaj, ile pikseli daje przy obecnej bazie.
Dotknij dowolnej wartości w szybkiej tabeli od 8px do 96px, aby ją wczytać, albo skorzystaj z pełnej tabeli dla baz 16px, 14px i 10px.
Wklej cały blok CSS do konwersji hurtowej, aby przepisać wszystkie wartości w px naraz, zachowując obramowania 1px i 2px.
Skopiuj wygenerowaną deklarację CSS albo pobierz przeliczone pary px/rem w formacie CSV na potrzeby przekazania do zespołu projektowego.
Porady Pro
- Najpierw ustaw bazowy rozmiar czcionki: to on wyznacza każdą wartość rem i em na stronie – pola, szybkie przyciski i konwersję hurtową – więc przejście na bazę 14px przelicza je wszystkie naraz.
- Zostaw obramowania 1px i 2px w px. Obramowania subpikselowe mogą zostać zaokrąglone do zera przy niektórych poziomach powiększenia i dlatego tryb hurtowy domyślnie je pomija.
- pt nie zależy od bazy: 24px to 18pt niezależnie od tego, czy baza wynosi 16px czy 10px, więc pole Punkty nie drgnie, gdy przesuwasz suwak.
- Tryb hurtowy uruchamia się ponownie po każdym przesunięciu suwaka bazy, więc zobaczysz ten sam arkusz stylów przy bazie 16px i 14px bez wklejania go dwa razy.
- Po em sięgaj tylko wtedy, gdy wartość musi podążać za rozmiarem czcionki własnego elementu, jak padding przycisku wokół etykiety, a resztę trzymaj w rem, żeby nic się nie kumulowało.
Często zadawane pytania
Podziel wartość w pikselach przez bazowy rozmiar czcionki: rem = px / baza. Domyślna baza przeglądarki to 16px, więc 24px / 16 = 1.5rem, a 10px / 16 = 0.625rem. Dla rem liczy się wyłącznie rozmiar czcionki elementu głównego, niezależnie od zagnieżdżenia elementu – i właśnie to sprawia, że obliczenia są przewidywalne w całym arkuszu stylów.
Przy domyślnej bazie 16px 1rem = 16px, 1.5rem = 24px, a 2rem = 32px; tutaj mnożysz zamiast dzielić: px = rem x baza. Jeśli baza wynosi 14px, jak w Ant Design, 1rem spada do 14px, a 1.5rem to 21px. Wartość w rem nic nie znaczy bez podanej bazy, więc zawsze podawaj ją obok.
Rozmiar czcionki w px ignoruje rozmiar tekstu wybrany przez czytelnika w przeglądarce: ktoś, kto ustawił domyślne 20px, i tak dostanie twoje zakodowane na sztywno 14px. rem mierzy się względem tego ustawienia, więc wszystkie rozmiary skalują się razem. Kryterium sukcesu 1.4.4 WCAG 2.2 wymaga, by tekst przetrwał powiększenie do 200 %, a skala typograficzna oparta na rem robi to bez ani jednej dodatkowej media query.
rem zawsze odnosi się do rozmiaru czcionki głównego elementu html. em odnosi się do rozmiaru czcionki elementu, na którym go zapisano – z wyjątkiem samej właściwości font-size, gdzie liczy się rozmiar czcionki rodzica. Dlatego zagnieżdżone rozmiary czcionki się kumulują: 0.9em w 0.9em w 0.9em daje 0.729 wartości wyjściowej. rem nigdy się nie kumuluje i dlatego jest bezpieczniejszym wyborem dla skal typograficznych i odstępów w układzie.
Używaj rem do wypełnień i marginesów, które mają oddychać, gdy tekst rośnie: padding przycisków, odstępy w kartach, odstępy sekcji. Dla cienkich linii zostaw px: obramowanie 1px pozostaje ostre, podczas gdy jego odpowiednik w rem może zostać zaokrąglony do zera lub rozmyć się przy niektórych poziomach powiększenia. Właśnie dlatego konwersja hurtowa na tej stronie domyślnie zostawia wartości 1px i 2px w px.
Zostań przy 16px, o ile framework nie wymusza czegoś innego, bo odpowiada to domyślnym ustawieniom przeglądarki. Ant Design używa bazy 14px. Sztuczka z 62,5 % ustawia html { font-size: 62.5% }, dzięki czemu 1rem = 10px, a rachunek sprowadza się do px / 10: 24px to 2.4rem. Nadal podąża za ustawieniem czytelnika – 62,5 % domyślnych 20px to 12.5px – ale musisz potem dopisać body { font-size: 1.6rem }, inaczej każdy akapit renderuje się w 10px, a komponenty zewnętrzne przygotowane dla bazy 16px wyjdą za małe. Wszystkie trzy bazy są w tabeli powyżej.
Odczytaj wartość w inspektorze i podziel przez swoją bazę: nagłówek 28px to 1.75rem przy bazie 16px, a podpis 12px to 0.75rem. Dev Mode potrafi też sam wypisywać rem – otwórz ustawienia Inspect obok listy języków, wybierz „Set unit scale” i podaj swój bazowy rozmiar czcionki (domyślnie 1rem = 16px). Wklej cały wyeksportowany blok do pola konwersji hurtowej powyżej, aby przepisać wszystkie wartości naraz.
Tak i zwykle jest to lepsze rozwiązanie. Wewnątrz media query rem odnosi się do początkowego rozmiaru czcionki przeglądarki, a nie do twojej reguły html, więc punkt przełamania 48rem to 768px przy ustawieniach domyślnych i rośnie dla czytelników, którzy powiększyli tekst. em zachowuje się tam tak samo. Punkty przełamania zapisane w px pozostają stałe niezależnie od wyboru czytelnika.
Nie. Przeglądarki liczą długości subpikselowe i przy rysowaniu przyciągają je do pikseli urządzenia, więc 0.9375rem renderuje się dokładnie jako 15px przy bazie 16px. Zaokrąglenie do 0.94rem przesuwa to do 15.04px, a ten błąd kumuluje się w siatce lub w rytmie pionowym. Skopiuj dokładną wartość wypisaną przez konwerter i pozostaw przyciąganie przeglądarce.
CSS definiuje 1px jako 1/96 cala, a 1pt jako 1/72 cala, więc 1px = 0.75pt i 16px = 12pt; to właśnie ta proporcja stoi za kolumną punktów w tabeli. dp w Androidzie to osobny system, w którym 1dp = 1px przy 160 dpi, dlatego materiałowy odstęp 16dp wypada w sieci blisko 16px, a nie w przeliczeniu na rem.