- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Fri, 29 Apr 2011 23:41:54 -0700
- To: Andrew Fedoniouk <news@terrainformatica.com>
- Cc: Alex Mogilevsky <alexmog@microsoft.com>, Brad Kemper <brad.kemper@gmail.com>, www-style list <www-style@w3.org>
On Fri, Apr 29, 2011 at 10:55 PM, Andrew Fedoniouk <andrew.fedoniouk@live.com> wrote: > So either we will invent bunch of alignments like box-align, grid-align, > cell-align, etc. or we will try to unify all this in vertical-align > (and horizontal-align). We should indeed try and unify these concepts. 'vertical-align' is not the place to do so. >> This is fairly simple. The inline-layout model asks the inline-block >> for its baseline. The baseline of an inline-block is defined as the >> baseline of its last in-flow linebox. So then you need to lay out the >> inline-block. Do so, respecting the alignment, and return the >> position of the last linebox. Then, align the inline-block within its >> line accordingly. > > I am not getting the idea of "last in-flow linebox". Why not the first > for example? Because that's the way it's defined in CSS 2.1. Apparently someone thought it was reasonable. I think it probably is as well. > Say you have <select size=1> which is under the hood is > > <dropdown-select> > <caption>text</caption><button /> > </dropdown-select> > > The caption is what really makes sense to align here with the baseline > of contained text. If you will try to use button for that (last in flow) you > will get wrong results. > > In other words: in context of inline flex blocks vertical-align:baseline > makes sense when it defines baseline alignment of element inself *and* its > children. Otherwise you will have that artificial first/last problem. Form elements are magical, and their contents are unknown and unknowable to CSS until the UI Module defines them. Don't try and draw any conclusions from them. > Say you have this: > > <p>... text <i-block>A</i-block> <i-block>B</i-block></p> > > i-block > { > box-align: bottom; > vertical-align: baseline; > } > > How exactly you will compute ascent of the i-block? > > See: you can compute box-align:bottom only after you > will have height of line box. But to compute line box height > itself you need to know ascent (baseline position) of the > i-block. Chicken-Egg problem in its magnificence. This entire paragraph is wrong. The inline-block *contains* a linebox, yes, which contains "A". The linebox itself is aligned to the bottom of the inline-block. The resulting position of the linebox's baseline is used as the position of the inline-block's baseline. The inline-block is then baseline-aligned with the other content on the line. At no point is there anything circular. ~TJ
Received on Saturday, 30 April 2011 06:42:41 UTC