- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Thu, 19 Apr 2012 23:51:36 -0700
- To: "Tab Atkins Jr." <jackalmage@gmail.com>
- Cc: www-style@w3.org
On Thu, Apr 19, 2012 at 10:17 AM, Tab Atkins Jr. <jackalmage@gmail.com> wrote:
> On Wed, Apr 18, 2012 at 7:58 PM, Andrew Fedoniouk
> <news@terrainformatica.com> wrote:
>> "Simple" question: why flexbox is not using existing vertical-align property?
>>
>> Conceptually element under flex-direction:row is very close to
>> display:table-row/table element with display:table-cell children.
>> vertical-align works for such elements already including
>> vertical-align:baseline.
>>
>> So is my question above.
>
> Because the cross-axis isn't guaranteed to be vertical in any way.
>
> Also, using vertical-align on table-cells was a horrible mistake in
> the first place, with the confusion it causes persisting to this day -
> vertical-align on an inline element means "align me relative to the
> line I'm in", while vertical-align on a table-cell means "align my
> contents". That's just ridiculous, and we shouldn't perpetuate the
> problem.
>
Let's imagine for one second that vertical-align is the only property
that defines vertical alignment. For any element including
flex container (#flex-cont) and flex items ( #flex-cont > *).
Consider that we have this rule:
#flex-cont { vertical-align: baseline;
display: inline-flexbox;
flex-direction: row; }
It could be read as these two statements:
a. #flex-cont has all children baseline aligned if alignment
is not redefined individually by flex-items.
b. if #flex-cont is display:inline-block element then
it is being baseline aligned with contained line box.
So three words here:
<p>Hello <#flex-cont>
<#flex-item>wonderful</#flex-item>
<#flex-item>world</#flex-item>
</#flex-cont></p>
will be aligned to same line - baseline of the <p>'s
linebox(es).
In general vertical-align:baseline; for non-replaced elements makes
sense only if it defines alignment of children *and* the element itself
at the same time. This combination for example makes no sense even
impossible to compute. For example I do not understand what this might
mean and how to render it properly:
#flex-cont
{
display: inline-flexbox;
flex-direction: row;
vertical-align:baseline;
flex-align: end | stretch | start;
}
I believe that the only consistent scenario for display: inline-flexbox;
is the one where vertical-align is the only property that defines vertical
alignment of element itself and its children.
For display:flexbox elements ( not inline blocks ) vertical-align
interpretation
is even simpler. For such flexboxes vertical-align defines exactly what you have
for 'flex-align' at the moment. And vertical-align defined on
individual <#flex-item>s
describes vertical alignment of their content. As in table-cells.
So vertical-align is actually better describes what you tried to define by
flex-align/flex-item-align. At least less controversial.
System will be complete if we will define also this:
horizontal-align: left | right | center | start | end | baseline;
We need horizontal-align anyway in order to define <center> layout
in CSS:
center {
display: block;
horizontal-align:center;
}
horizontal-align is interpreted by flexboxes as yours flex-line-pack.
To be direction agnostic vertical-align and horizontal-align may
have aliases - in the same way as margin-start is an alias for
either margin-top or margin-left.
>
>> If vertical-align for some reasons does not comply flexbox ideology then
>> how flex-item-align and vertical-align shall interact? For example what this
>> will mean:
>>
>> el {
>> flex-align: bottom;
>> vertical-align:baseline;
>> }
>>
>> ?
>
> They don't interact. They do completely different things. (And,
> assuming that "el" is a flexbox item, vertical-align has no effect on
> it.)
They do interact and moreover they compete for the position of
the same elements. See my sample above.
Block alignment is a universal concept and use by pretty much
any layout manager. Consider display:grid element defined as:
#grid {
display: grid;
grid-columns: 200px 200px;
}
that is placed inside 600px container. What property shall be used
to define alignment of grid content in this case? Some new alignment
property will be invented?
I agree with Elika here - that alignment zoo is absolutely not acceptable.
--
Andrew Fedoniouk.
http://terrainformatica.com
Received on Friday, 20 April 2012 06:52:10 UTC