Re: text-align:justify, inline-blocks, and MS test inline-formatting-context-019.xht

On Tue, Feb 9, 2010 at 3:25 PM, Tab Atkins Jr. <jackalmage@gmail.com> wrote:
> On Tue, Feb 9, 2010 at 2:21 AM, Bruno Fassino <fassino@gmail.com> wrote:
>> At 9.4.2 :
>> "When the total width of the inline boxes on a line is less than the
>> width of the line box containing them, their horizontal distribution
>> within the line box is determined by the 'text-align' property.
>> If that property has the value 'justify', the user agent may stretch
>> spaces and words in inline boxes (except for inline-table and
>> inline-block boxes) as well"
>>
>> What does the part  "(except for inline-table and inline-block boxes)"  mean?
>> I don't think it means that  "inside"  inline-tables and inline-blocks
>>  there is no stretching of spaces and words when text-align:justify.
>>
>> I think that the Microsoft test
>> http://test.csswg.org/source/contributors/microsoft/submitted/Chapter_9/inline-formatting-context-019.xht
>> adds more confusion. It has the following assertion:
>>
>> " If 'text-align' is set to 'justify' the user agent does not stretch
>> spaces and/or words when the 'display' property is set to
>> 'inline-block' "
>>
>> which again seems to imply that "inside" inline-block elements spaces
>> and/or words are not stretched when 'text-align' is set to 'justify'.
>> But then the test is not really precise. The reason why the second
>> line is not stretched is simply that it is the _last_ (and the only
>> one) inside the inline-block element. The first line is instead
>> stretched because it is the first of two consecutive lines (the second
>> one including just the inline-block box, acting like a single word).
>> If some text is added inside the inline block to have two lines, then
>> stretching will occur here as well, in all browsers, see for example
>> this modified version
>> http://www.brunildo.org/test/test/inline-formatting-context-019.html).
>>
>>
>> Inline-block elements generate a single inline box (whose width is not
>> affected by text-align), but then inside them text-align works as
>> usual in all browsers, with possible stretching when it is 'justify'
>> and there is more than a line.  So I can't figure out what the spec
>> wanted to exclude when saying:  "(except for inline-table and
>> inline-block boxes)"
>> Maybe it simply wanted to say that the "external" single inline box
>> generated by an inline-block element is not stretched by text-align,
>> but the current words do not really say this.
>
> Hrm.  It sounds like it's implying that in this code:
>
> <inline text-align:justify;>foo foo foo <inline-block>bar bar
> bar</inline-block> foo foo</inline>
>
> The spaces around the foos are stretched, but it won't "reach into"
> the inline-block and stretch the bars as well.  However, if the
> inline-block had text-align:justify set on it, then it would of course
> justify the text inside of it as normal.
>
> ~TJ


text-align:justify is inherited. So in such a case
 - if the "bars" fit on a single line they don't stretch, but because
they are on the "last" line inside the inline-block (and this has just
the width to contain them)
 - if they need two lines, then the "bars" on the first line may stretch

I think this is the current behavior of all browsers and seems
reasonable. But it does not need that addition:
  "except for inline-table and inline-block boxes"
in the spec.


Bruno

-- 
Bruno Fassino http://www.brunildo.org/test

Received on Tuesday, 9 February 2010 14:50:47 UTC