W3C home > Mailing lists > Public > www-style@w3.org > October 2013

Re: line-height: normal and multiple descendant font sizes

From: Glenn Adams <glenn@skynav.com>
Date: Sat, 19 Oct 2013 19:42:19 -0600
Message-ID: <CACQ=j+dpguxeAKWqkkjmtVQBP3Pkb7mVHpzRMvYL56GzW2yJpg@mail.gmail.com>
To: Alan Gresley <alan@css-class.com>
Cc: Gérard Talbot <www-style@gtalbot.org>, John Hudson <tiro@tiro.com>, W3C Style <www-style@w3.org>
On Sat, Oct 19, 2013 at 6:40 PM, Glenn Adams <glenn@skynav.com> wrote:

>
> On Sat, Oct 19, 2013 at 10:36 AM, Alan Gresley <alan@css-class.com> wrote:
>
>> On 19/10/2013 11:36 AM, Glenn Adams wrote:
>>
>>> On Fri, Oct 18, 2013 at 5:31 PM, Gérard Talbot <www-style@gtalbot.org
>>> >wrote:
>>>
>>>  Le 2013-10-18 13:28, Glenn Adams a écrit :
>>>>
>>>>
>> [snipped]
>>
>>  What I am observing, however, is that font size appears to be
>>>>> interpreted
>>>>> on a per-line basis in order to create a per-line value for line
>>>>> height.
>>>>>
>>>>>
>>>> Yes. That's how it should be too. In a multi-line block element, each
>>>> line
>>>> box can have its own distinct height.
>>>>
>>>
>>>
>>> Unfortunately you are using "line height" in two ways. I am referring to
>>> *the
>>> property whose name is 'line-height'*. You are referring to the *height
>>> of
>>> a line box*. I am talking about only the former, and not about the
>>> latter.
>>>
>>
>> There is no former and later.
>
>
> Yes there is. There is the process of resolving the used value of the
> line-height property. And there is the process of determining the height of
> line boxes. These are separate processes.
>
> You apparently aren't recognizing this distinction, which makes it
> difficult to have a detailed conversation with you on this subject.
>
>
>> If line-height has a value other than normal like <number> | <length> |
>> <percentage>, then the line box will be the height of the declared
>> line-height value.
>>
>
> No, not true in general. The resolved *used value* of the line-height
> property is merely a parameter to determining the height of a line box. And
> the former is only related to the latter to the extent that it constrains
> the minimum height of the line box. It does not constrain the maximum
> height of the line box.
>
>
>>
>> A test case.
>>
>> <style type="text/css">
>> .element { font-size: 100px;}
>> .block { background: skyblue; height: 50px; }
>> .block+.block { background: yellowgreen; }
>> </style>
>>
>> <div class="element" style="line-height: 0px;">
>>   <div class="block"></div>
>>        XpÉx
>>   <div class="block"></div>
>> </div>
>>
>> <div class="element" style="line-height: 0em;">
>>   <div class="block"></div>
>>        XpÉx
>>   <div class="block"></div>
>> </div>
>>
>> <div class="element" style="line-height: 0pt;">
>>   <div class="block"></div>
>>        XpÉx
>>   <div class="block"></div>
>> </div>
>>
>> <div class="element" style="line-height: 0;">
>>   <div class="block"></div>
>>        XpÉx
>>   <div class="block"></div>
>> </div>
>>
>> <div class="element" style="line-height: 0%;">
>>   <div class="block"></div>
>>        XpÉx
>>   <div class="block"></div>
>> </div>
>>
>
> OK, but that is not related to the subject being discussed.
>
>
>>
>>  I am trying to resolve what it means to *determine a used value for the
>>> property named 'line-height'* when its computed value is 'normal'. The
>>>
>>> result of this process serves as an input parameter for the subsequent
>>> process of *determining the height of a line box*.
>>>
>>
>> If you have line-height: normal, it's much like having height: auto. You
>> don't need to have line-height: normal since it's the initial value already
>> and if the inherited value from an ancestor is a value that is not normal,
>> then declaring normal will return it to the initial value. Much like auto
>> is the initial value for height.
>>
>
> OK, but that doesn't improve the definition of the process of resolving
> the *used value* of the line-height property.
>
>
>>
>> A test case.
>>
>> <style type="text/css">
>> body { font-size: 100px; }
>> .block { background: skyblue; height: 50px; }
>> .block+.block { background: yellowgreen; }
>> </style>
>>
>> <div style="line-height: 0">
>>        XpÉx
>>   <div class="element" style="line-height: normal">
>>     <div class="block"></div>
>>        XpÉx
>>     <div class="block"></div>
>>   </div>
>> </div>
>
>
> First observation: all of Chrome (30.0.1599.101), Firefox (23.0.1), Opera
> (12.16), and Safari (6.0.5) render this differently on MacOSX 10.8.5 MBP
> Retina. The two closest were chrome and safari, but even there, a
> difference in the placement of the first line's baseline is observed. See
> attached.
>
> Of these four, only Opera produces the results I would expect.
>
> Second observation: your example is unrelated to the problem I am
> describing, which is how line-height property is resolved to a *used value
> * on a block element when there are multiple line boxes generated by the
> element.
>
> Now, if I adopt David's explanation, or at least my interpretation of
> David's explanation, that the intent of the "may [use] largest font size"
> language:
>
> (1) only refers to immediate Text node children of element E which compute
> value of 'line-height' is 'normal', and
>
> (2) *font size* is not interpreted as the *used value* of the 'font-size'
> property of E, but is instead interpreted as the sum of the maximum
> (scaled) ascent and maximum (scaled) descent of the actual font matched by
> the font matching algorithm on a character by character basis;
>
> Here I am assuming that the result of (2) is not equal to the used value
> of the 'font-size' property of E only in the case that when one of the
> matched fonts for the text either (a) uses bitmaps and scaling is not
> performed [otherwise the scaled bitmap font's height would match the
> 'font-size' of E] or (b) the sum of the ascent and descent metrics of the
> matched font exceeds unitsPerEm (for outlines) or exceeds the bitmap's
> height for bitmaps.
>
> Given the above, my
>
> Third observation: a test of this behavior would look something like:
>
> <p font-size="41px" line-height="normal" font-family="Copperplate Gothic">
>

Pasted wrong text, that should read

<p style="font-size: 41px; line-height: normal; font-family: 'Copperplate
Gothic';">


> USA<br>
> 中华人民共和国<br>
> العربية السعودية
> </p>
>
> And would attempt to demonstrate whether the line height assigned to the 3
> generated line boxes to be close to 1.2 * 41px or something larger, and
> whether the line heights assigned to the line boxes were the same or
> different. Here I have chosen a font family that is guaranteed not to cover
> the text, and thus need fallback mapping to other fonts.
>
> However, without instrumenting the code more than one gets through the
> typical inspection interface, it might be difficult to come up with
> answers. On Chrome, the height of the content area of the paragraph is
> reported as 161px, which if divided by three lines and then divided by 1.2
> comes out to 44.7px, suggesting that the specified 41px font-size is not
> the only basis for resolving the used value of line-height. I'll have to
> run Chrome in a debugger to determine what it is actually using.
>
>
>>
>> Alan
>>
>>
>>
>> --
>> Alan Gresley
>> http://css-3d.org/
>> http://css-class.com/
>>
>
>
Received on Sunday, 20 October 2013 01:43:09 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 22:51:03 UTC