Poprawna jest jednostka „em”, bo w CSS jest to jednostka względna, która odnosi się do aktualnego rozmiaru czcionki elementu. Mówiąc prościej: 1em to 100% bieżącego font-size. Jeśli na przykład dla body ustawisz font-size: 16px, to 1em w środku body będzie równe 16px, 2em to 32px, 0.75em to 12px itd. Co ważne, w wielu projektach stosuje się em właśnie po to, żeby interfejs był elastyczny i skalował się razem z tekstem. Dzięki temu, gdy użytkownik zwiększy rozmiar czcionki w przeglądarce, odstępy, marginesy czy wcięcia oparte na em też się proporcjonalnie zmienią. To jest zgodne z dobrymi praktykami dostępności (WCAG) i ogólnie z nowoczesnym podejściem do RWD. Moim zdaniem em jest szczególnie wygodne do definiowania np. paddingów i line-height w komponentach, które mają być spójne wizualnie niezależnie od miejsca użycia. Na przykład: przycisk może mieć font-size: 1rem, padding: 0.5em 1em; wtedy gdy zmienisz rozmiar tekstu w tym przycisku, jego wewnętrzne odstępy automatycznie się dostosują. To dość eleganckie i bardzo często spotykane w profesjonalnych arkuszach stylów. W odróżnieniu od jednostek absolutnych, takich jak px, pt czy in, em zawsze patrzy na kontekst – czyli na bieżący element lub jego rodzica, w zależności od właściwości. W efekcie projekt jest bardziej responsywny, a kod CSS łatwiej utrzymać i ponownie wykorzystać w różnych miejscach serwisu.
Jednostki px, pt i in kuszą, bo wydają się „konkretne” i przewidywalne, ale w kontekście pytania o jednostki względne powiązane z rozmiarem czcionki prowadzą na manowce. px (piksel) w CSS jest traktowany jako jednostka absolutna – przeglądarka stara się odwzorować go w sposób stały, niezależnie od bieżącego font-size elementu. W nowoczesnych specyfikacjach CSS piksel jest co prawda jednostką „referencyjną”, ale nadal nie skaluje się automatycznie z rozmiarem tekstu w taki sposób, jak em czy rem. Używanie px do wszystkiego bywa wygodne na początku, ale potem utrudnia dostępność, bo użytkownikom trudniej powiększyć tekst wraz z otoczeniem. pt (punkt typograficzny) to z kolei jednostka historycznie związana z drukiem. W CSS jest mapowana na fizyczne rozmiary (1pt to 1/72 cala), a nie na rozmiar aktualnej czcionki. Sprawdza się raczej w mediach drukowanych (media print) albo w specyficznych projektach, gdzie ktoś próbuje zbliżyć wygląd strony do layoutu DTP. W codziennym front-endzie jest rzadko używana właśnie dlatego, że jest sztywna i słabo współgra z responsywnym web designem. Jednostka in (cal) też jest jednostką absolutną, zdefiniowaną fizycznie. 1in to 2.54 cm, a przeglądarka odwzorowuje ją w oparciu o DPI urządzenia lub założenia referencyjne. Z mojego doświadczenia stosowanie in w layoucie ekranowym mija się z celem – to bardziej ciekawostka niż realne narzędzie w CSS dla stron WWW. Ani pt, ani in nie reagują na zmianę font-size tak, jak oczekujemy po jednostkach względnych. Typowy błąd myślowy polega na założeniu, że skoro px czy pt są powiązane z jakimś „rozmiarem”, to automatycznie będą zależeć od czcionki. W rzeczywistości tylko jednostki takie jak em czy rem są projektowane specjalnie po to, by skalować się względem font-size. Dlatego przy projektowaniu nowoczesnych, dostępnych interfejsów lepiej świadomie wybierać jednostki względne, a jednostek absolutnych używać tylko tam, gdzie naprawdę ma to sens.