W3C home > Mailing lists > Public > www-style@w3.org > August 2010

Re: Em box and font data

From: Bert Bos <bert@w3.org>
Date: Wed, 4 Aug 2010 18:00:06 +0200
To: Stephen Zilles <szilles@adobe.com>
Cc: "www-style@w3.org list" <www-style@w3.org>
Message-Id: <201008041800.06997.bert@w3.org>
On Wednesday 04 August 2010 17:23:10 Stephen Zilles wrote:
> Based on the discussion at the last CSS WG Telcon (28 July), there
> seemed to be a desire to add the CSS leading (line-height -
> font-sizd)/2 above and below the vertical extents of the Em Box.
> It was noted that there is no definition of the Em Box and there was
> a concern expressed that fonts do not specify the position of the Em
> Box.
> I have looked carefully at OpenType (and TrueType) fonts and have
> come the following conclusions.
> 1.       All TrueType/OpenType fonts specify a value for UnitPerEm.
> This is the number of Design Space coordinate values per Em and all
> coordinates of the font, ranging from the position of baselines to
> the control points on the outlines of glyphs, are expressed in Design
> Space coordinates. It is often true that the Latin baseline is
> positioned at the origin (0 point) in the vertical axis of the Design
> space, but that need not be true. That means that descenders (the
> parts of glyphs that are below the baseline) have negative coordinate
> values in the Design Space.
> 2.       All OpenType fonts and many TrueType fonts have values for
> sTypoAscender and sTypoDescender in the OS/2 table which are font
> (not glyph) metrics that specify the intended typographic upper
> extent and lower extent of the collection of glyphs in the font. It
> is recommended (but not required) that distance between the two
> values in design space be 1 Em (i.e., the distance between the two
> values total the number of UnitsPerEm as defined in 1. Above).
> 3.       Since the Stypo... values were added after the initial
> definition of TrueType fonts, there are fonts that lack these values.
> These fonts, however, should have values for Ascent and Descent in
> the HHEA table. These values were defined in the initial TrueType
> table structure. For Latin fonts, the Ascent value was defined as the
> topmost point (in Design Space Coordinates) on a lowercase "d" and
> the Descent was defined as the lowest point on the lowercase "p".
> There was not requirement nor recommendation that the distance
> between these points amount to the number of UnitsPerEm.
> 4.       There is a third set of values, usWinAscent and
> usWinDescent, which are Microsoft Windows specific values that
> specify (essentially) the top and bottom of the bounding box for the
> area marked by the glyphs in the font. These values are used for
> clipping the line to insure the all possible characters on the line
> will be completely visible. It is the existence of these metrics that
> has lead to text in 10.6.1 which says, "A UA may, e.g., use the
> em-box or the maximum ascender and descender of the font." These
> values are not appropriate for this discussion.
> 5.       In OpenType fonts, there is also a BASE table (and in Apples
> TrueType fonts a BSLN table) in which the coordinates of the various
> baselines (e.g. latin, hanging, ideographic, math, ...) are specified
> in Design Space Coordinates. When either of these tables exist, these
> coordinate values can be used to compute the offsets of the
> Ascent/sTypoAscent and Descent/sTypoDescent from any particular
> baseline. If the tables do not exist, then it is likely that the
> origin in the direction perpendicular to the direction of text flow
> in a line (the y direction for horizontal text flow) is where the
> default (usually Latin) baseline is positioned.
> The CSS 2.1 spec, section 10.8.1 Leading and half-leading, specifies
> that: The height and depth of the font above and below the baseline
> are assumed to be metrics that are contained in the font. (For more
> details, see CSS level 3.) [That is, there are values such as
> sTypeAscent/Ascent (read height above baseline) and
> sTypoDescent/Descent (read depth below baseline) in the font
> metrics.]
> On an inline-level element, 'line-height' specifies the height that
> is used in the calculation of the line box height (except for inline
> replaced elements, where the height of the box is given by the
> 'height' property).
> These "facts" suggest the following algorithm for computing the
> "effective" height of a line.
> a)      Consider all the glyphs (and replaced content) that appears
> on the line. For each such object (glyph or replaced content or
> inline element) align it to the relevant baseline (as indicated by a
> vertical-align value or the default value of vertical-align for the
> type of object.
> b)      For each object, use line-height to compute, relative to the
> font-size for that object, the leading to be applied to the object
> (1/2 above and below glyphs and none for the other objects as their
> extents already incorporate "leading").
> c)       If the distance AD  from sTypeAscent (or lacking that the
> Ascent) value to the sTypeDescent (or lacking that the Descent) value
> is equal to UnitsPetEm, then position the leading above the ascent
> value and below the descent value.
> d)      Else, if the distance AD is not equal to 1 Em add one half
> the difference between 1 Em and the distance AD(in Design Space
> Coordinates and it may be negative) to the ascent and decent  values
> and then position the leading at these new ascent' and descent'
> values as in step c), above.

That indeed seems a nice approach. The best way to center the glyphs 
without having to look at the actual ink of individual glyphs.

Minor nit: a "difference," mathematically speaking, is per definition 
positive. You mean the value (1em - AD).

> This positioning to the top and bottom of the "leading" will ensure
> that a paragraph which text from a single font, at a single size will
> have a baseline to baseline distance (from line to line) that is
> exactly line-height in distance. (That is, the half leading at the
> bottom of the line above plus the half leading above the line blow
> plus the EM distance will equal the line-height). Steve Zilles

  Bert Bos                                ( W 3 C ) http://www.w3.org/
  http://www.w3.org/people/bos                               W3C/ERCIM
  bert@w3.org                             2004 Rt des Lucioles / BP 93
  +33 (0)4 92 38 76 92            06902 Sophia Antipolis Cedex, France
Received on Wednesday, 4 August 2010 16:00:38 UTC

This archive was generated by hypermail 2.3.1 : Monday, 2 May 2016 14:38:37 UTC