Currently, the *-items properties are extremely simple - aside from the legacy keyword doing some magic, their keywords are left completely uninterpreted. The *-self properties then, as their auto behavior, grab the *-items value from their parent element, and interpret them appropriately - resolving logical values against the element's writing mode, etc.
Per @bfgeek, this might not match author expectations, and might end up not being web compatible. Chrome received a bug about this, where an author wrote align-items on a column flexbox (which corresponds to the horizontal axis), and expected it to horizontally align a positioned child. Per spec, this won't work - the positioned child will take the parent's align-items value as its align-self value, but its align-self property operates in its containing block's block axis, which in this case is vertical.
Ian's suggestion is that we do direction resolution on the *-items properties, producing a pair of physical positions, and then the *-self properties take their auto values from the pair, grabbing from the pair according to their own axis
So in the example above, the column flexbox (with align-items: flex-end and a default justify-items: normal) would produce a horizontal alignment of "right", and a vertical alignment of "normal". Then the positioned child, with both of its -self properties being auto, would take an align-self of "normal" (because its align- axis is vertical) and a justify-self of "end" (the logical direction corresponding to horizontal right).
Currently, the *-items properties are extremely simple - aside from the
legacykeyword doing some magic, their keywords are left completely uninterpreted. The *-self properties then, as theirautobehavior, grab the *-items value from their parent element, and interpret them appropriately - resolving logical values against the element's writing mode, etc.Per @bfgeek, this might not match author expectations, and might end up not being web compatible. Chrome received a bug about this, where an author wrote
align-itemson a column flexbox (which corresponds to the horizontal axis), and expected it to horizontally align a positioned child. Per spec, this won't work - the positioned child will take the parent'salign-itemsvalue as itsalign-selfvalue, but itsalign-selfproperty operates in its containing block's block axis, which in this case is vertical.Ian's suggestion is that we do direction resolution on the *-items properties, producing a pair of physical positions, and then the *-self properties take their
autovalues from the pair, grabbing from the pair according to their own axisSo in the example above, the column flexbox (with
align-items: flex-endand a defaultjustify-items: normal) would produce a horizontal alignment of "right", and a vertical alignment of "normal". Then the positioned child, with both of its -self properties beingauto, would take analign-selfof "normal" (because its align- axis is vertical) and ajustify-selfof "end" (the logical direction corresponding to horizontal right).