2017-02-03 56 views
15

Próbuję znaleźć to, co odpowiada wartości ustawionej w właściwości CSS font-size.Co naprawdę odpowiada rozmiarowi czcionki?

Aby podać kontekst, chcę uzyskać w CSS rozmiar w em części czcionki (powyżej wysokości kapitału i poniżej linii bazowej), które znam z danych OS/2. Jednostka em jest odniesiona do podanej wartości font-size, a metryki OS/2 odnoszą się do kwadratu em.

Czego się spodziewać

Moje oczekiwania są oparte na następujących odniesieniach. Nie znalazłem nic bardziej klarownego ani dokładnego.

  1. Według W3C reference for font-size in CSS2.1 i cytowany we wszystkich pytaniach przepełnienie stosu znalazłem na ten temat (here, here i here):

    Rozmiar czcionki odpowiada placu fireta, koncepcja stosowana w typografii. Zauważ, że niektóre glify mogą krwawić poza swoimi kwadratami em.

  2. Po kilku knowledges mam w typografii, em square jest cały plac metryk czcionek, w których rosnąco, malejąco, luki, (etc ...) linie są zdefiniowane. W metryce OS/2, em square jest wielkością samej czcionki (często 1000 lub 2048 UPM).

    Letter metrics

    Jedynym wyjaśnieniem znalazłem z W3C jest w old reference from 1997 for CSS1 i jest spójna z nowoczesnym cyfrowym definicji em square używam:

    pewnych wartości, takich jak szerokość metryki są wyrażone w jednostkach, które są względem kwadratu abstrakcyjnego, którego wysokość jest zamierzoną odległością między liniami typu w tym samym rozmiarze. Ten kwadrat nazywa się kwadratem EM. (...) Typowe wartości to 250 (Intellifont), 1000 (Typ 1) i 2048 (TrueType).

Więc jeśli dobrze rozumiem te odniesienia, wartość określone w font-size powinny być wykorzystywane do generowania cały em square czcionki, a my powinniśmy być w stanie obliczyć wielkość części czcionki z rozmiaru czcionki i danych.

Na przykład, z ...

.my-letter { 
    font-family: 'Helvetica Neue'; 
    font-size: 100px; 
    text-transform: uppercase; 
} 

... powinniśmy mieć em square z 100px, a ponieważ Helvetica Neue ma wysokość Stołeczne 714/1000 (sCapHeight w tabeli OS/2), kapitał wysokość 71.4px.

Expected Letter

Co właściwie się dzieje.

Wygenerowany jest większy niż font-size (testowany na najnowszych wersjach przeglądarki Chrome, Firefox i Safari dla komputerów Mac). Na początku pomyślałem, że przeglądarka ma inną definicję em square i tworzyła część z litery równej font-size, ale nie znalazłem żadnych danych OS/2 (z lub bez wznoszenia, malejąco, przerw ...), który pasuje do tego.

Rendered Letter

Można również zobaczyć this CodePen. Zauważ, że używam line-height: 1;, aby podświetlić spodziewany rozmiar, ale moim problemem jest font-size ("renderowany atrament"), a nie line-height ("pole kolizji"). To jest coś, co muszę sprecyzować, ponieważ wielokrotnie byłem już źle rozumiany. line-height nie jest problemem.


Więc mam trzy pytania:

  • Czy dobrze zrozumiałam odniesień W3C, czy jestem przy założeniu, że rzeczy te odniesienia nie powiedział?
  • Jeśli nie, dlaczego wygenerowana czcionka ma kwadrat em większy niż font-size?
  • Najważniejsze: Skąd wiadomo rozmiar renderowanego kwadratu em (w stosunku do font-size)?

Dziękuję za pomoc.

Odpowiedz

3

Twoje zrozumienie odniesień W3C jest poprawne, ale twoje zrozumienie czerwonego pola nie jest poprawne.

Czerwone pole nie przedstawia kwadratu em. Jego wysokość jest sumą wznoszenia i zejścia z metryki.

+0

Masz rację. Oznacza to, że: ** 1: ** Ascent i malejąco są poza kwadratem em. ** 2: ** x wysokość i wysokość kapitału w rzeczywistości pozostają niezmienione. ** 3: ** Mogę odliczyć odległość między górą/dołem skrzyni kolizyjnej a górną krawędzią/linią bazową. ** 4: ** Nie ma metryk w czcionce (przynajmniej dla Helvetica Neue), które mogłem użyć, aby poznać prawdziwe wejście (na przykład małe litery "l" lub "h"). Mam rację? – ncoden

+0

@ncoden - mniej więcej tak. Wznoszenie i zniżanie są * niezależne * od kwadratu em. Oznacza to, że dla dowolnej czcionki ich suma może być większa, równa lub mniejsza niż em-kwadrat, więc niekoniecznie są one "poza" kwadratem em, chociaż wydaje się, że suma być większa niż em-kwadrat – Alohci

+0

Warto zauważyć, że chociaż metryki czcionek zawierają wznoszenie, zniżanie i wysokość kapitału, poszczególne glify nie muszą być zgodne z tymi metrykami - na przykład rzeczywisty kapitał "A" może być wyższy lub krótszy niż wysokość kapitału i małe litery "o" najniższy punkt mogą być narysowane powyżej lub poniżej linii podstawowej. – Alohci

3

Przeczytaj artykuł: To naprawdę pomaga al wiele zrozumieć rozmiary czcionek:

http://iamvdo.me/en/blog/css-font-metrics-line-height-and-vertical-align#lets-talk-about-font-size-first

+0

Link z tej odpowiedzi jest całkowicie szczegółowym źródłem, wyjaśniającym wszystkie dziwne rzeczy. Obrazy, anatomia typografii z Internetu są niespójne i nie mają pojęcia. Ale artykuł z tego linku jest całkowicie przejrzysty, skoncentrowany na danych. Dziękuję za udostępnienie. – Khoa