- From: Anton Prowse <prowse@moonhenge.net>
- Date: Sun, 08 Jan 2012 12:56:10 +0100
- To: www-style@w3.org
On 08/01/2012 08:43, Alan Gresley wrote: > On 5/01/2012 8:12 AM, Alan Stearns wrote: > >> On 1/4/12 12:13 PM, "Gérard Talbot"<www-style@gtalbot.org> wrote: >>> >>> I am inclined to be against adding anything else until the problems >>> listed, carefully explained with regards to section 10.8 of CSS 2.1 are >>> not addressed to begin with. Anything else added into the leading model >>> (CSS3) needs to be extremely very well justified, substantiated. >>> >> >> Gérard, >> >> The basic problem is not being able to control where the leading is >> applied. > > I agree with this premise but a *line box* is only the height of it's > content. This line box can only be changed by using font-size. > > Let me state this with great emphasis, 'line-height' never changes this > content height and 'vertical-align' does not alter any vertical > alignment of this content. I'm not sure I understand what you're saying here. 'line-height' certainly does influence the height of line boxes, as does 'vertical-align'. 'font-size' is responsible for the visible "height" of the glyphs. However, this "height" is not a direct factor in determining the line box height and the alignment within the line box. Rather, 'line-height' determines the height of what I call the "guide box" associated to each inline box. Think of the guide box as overlaying the inline box, with the same width but with unrelated height. In CSS21, the leading is the difference between the vertical extent of the inline box and the height of the guide box. Thanks to the existing CSS21 model of leading implemented as two pieces of half-leading above and below the guide box, the guide box is vertically centered with respect to the inline box. (Leading is the result of a calculation rather than an input to a calculation; it's merely an equation balancing exercise. It would be possible to rewrite CSS21 to avoid all mention of leading.) Commonly the guide box is taller than the vertical extent of the inline box and hence leading is positive. It's perfectly possible for the guide box to be shorter and hence leading to be negative, though: just set a line-height that's smaller than the inline box vertical extent that's derived from the font size. The 'vertical-align' values 'top', 'bottom' and 'middle' act on the guide boxes, not on the inline boxes. To see the interaction between vertical-align, line-height and font-size, consider the test case below. <div style="line-height:20px; width:280px"> text text text text text text text text text text text text <span style="line-height:inherit; font-size:140px">text</span> text text text text text text text text text text text text </div> Observe how the line box containing the span is taller than the other line boxes, yet not as tall as the span's inline box. This is because the line-height of the span is smaller than the vertical extent of the inline box derived from the large font size. (Hence the leading is negative.) The top of the guide box lies somewhere in the middle of the "hole" in the 'e' (no doubt there exists a technical term for that hole!) and the bottom of the guide box lies somewhere just above the curly tip of the bottom of the 't'. Since the vertical align is 'baseline', the baselines of the large letters and the preceding smaller letters line up. The line box height is then the distance between the lowest of the bottoms of the guide boxes on the line (which is the bottom of the guide box of the smaller text) and the highest of the tops of the guide boxes on the line (which is the top of the guide box of the larger text). Hence the line box's top intersects the hole in the large 'e' and its bottom is a little below the lined-up baseline. >> Specifically the part of 10.8.1 that divides the leading and adds half to >> the top and half to the bottom. Not all typographic systems work that way >> (as you found in your wikipedia research). Adding a property to modify >> how leading is applied could ease the impedance mismatch. > > This can be done but it has to be a change to the CSS line box. What you > are proposing is a new CSS box within the current CSS line box which has > upper and lower parts that can behave like adjustable leading. I don't agree that the proposal introduces a new box, but I do agree that it changes the line box behaviour (which is precisely what Ric wants). If you can choose whether leading is split into half-leading and distributed on either side of the guide box, or whether it is placed entirely at the top of the guide box or entirely at the bottom, then you are in effect choosing the vertical position of the guide box with respect to the corresponding inline box. In my example above, had the leading been entirely at the bottom (which is what the Ric wants for his heading) then the guide box of the span would be visibly much higher up the larger text and, since the alignment is still baseline, the inline box would be much taller and none of the larger text would bleed into the line box that sits above it. I don't see any theoretical problem with Ric's proposal to be allowed to control the leading position. We would need to consider what the vertical-align values 'top', 'bottom' and especially 'middle' are supposed to do though. On a related note, as Gérard has mentioned already and illustrated in his 'text-top' case in [1], some glyphs have accents and so we must all remember that "lining up" as per Ric's desire doesn't always result in what authors sometimes naively expect. A common authoring use case is to want to visually align the top of a title with something else, eg an image: ----- | | TITLE | | | | ----- Frustration results because the top of TITLE doesn't seem to align with the top of the image. However, that's because there's extra space above the letters where accents would go if there were any. (Is this space the same space as what's called the "ascender" space?). So: ----- /^\ | | TITLE | | | | ----- The ASCII figure doesn't quite capture my point, but you get the idea. I expect that Ric is already aware of that but I thought it worth mentioning anyhow. No change in the inline formatting model would solve that issue since a certain amount of the "space" that typically sits above a non-accented letter is actually part of that letter in some sense. [1] http://www.gtalbot.org/DHTMLSection/vertical-align-values.html Cheers, Anton Prowse http://dev.moonhenge.net
Received on Sunday, 8 January 2012 11:59:11 UTC