Description
The css-align spec (the canonical definition for align-self
) is pretty unequivocal about how to handle align-self:auto
. Quoting:
The
auto
keyword computes to the computed value ofalign-items
on the parent ornormal
if the box has no parent.
https://drafts.csswg.org/css-align/#propdef-align-self
But, the flexbox & grid specs attempt to define some special-case behavior for this auto
value on absolutely-positioned elements -- and IMO they're too vague about how/where that special case behavior is supposed to be triggered, and how broadly its effects spread.
The language I'm concerned about is here in the flexbox spec:
For this purpose, a value of
align-self: auto
is treated identically tostart
.
https://drafts.csswg.org/css-flexbox-1/#abspos-items
...and here in the grid spec:
For the purpose of calculating this static position, a value of
auto
foralign-self
/justify-self
behaves asstart
.
https://drafts.csswg.org/css-grid-1/#static-position
Superficially, the phrase "a value of" is too vague. (Is that "a specified value"? "a computed value"? something in between?) And of course, "behaves as" is vague too.
I have these specific questions/concerns:
-
Are the flex/grid specs are trying to redefine the computed value of
align-self:auto
for these abspos elements? Or isalign-self:auto
still intended to compute the way that css-align defines it (to the parent's computedalign-items
) and then its computed value (e.g.center
if the parent hasalign-items:center
) should somehow produce different layout behavior than it normally would? -
If the intent for (1) is the latter (i.e. if
auto
computes away but then ends up somehow producing different results in layout), how is the different behavior intended to be triggered? Layout uses computed/used values of css properties -- so ifauto
gets computed away, then I don't see how layout would be able to realize that it needs to apply this special-case behavior. Maybe e.g. whenauto
computes tocenter
, it's expected to really compute to a specialcenter-which-really-came-from-auto
value, which is expected to behave just likecenter
except in this special abspos case? -
It's not clear to me what should happen here when an
align-self:auto
value is inherited to an abspos element. For example: suppose an abspos element inside of a flex container hasalign-self:inherit
, and its parent hasalign-self:auto
, and its grandparent hasalign-items:center
. I'm pretty sure this abspos element should end up with a computedalign-self
ofcenter
, BUT: is that reallycenter
, or is it thecenter-which-came-from-auto
scenario discussed above in (2)? (This matters for layout -- if we inherit the purecenter
value, the static position would be center-aligned. But if we inherit some magically taintedcenter-which-came-from-auto
value, then the static position would be start-aligned.)