Description
For de-facto [1] interop [2] reasons relating to WebKit/Blink implementation behavior, a pseudo stacking context
should be defined.
Proposal: an element induces a pseudo stacking context
if at least one of the following holds for the element:
- Induces a stacking context
- Is positioned
- Has
backface-visibility: hidden
- Specifies columns (has non-auto column count or width)
- Scrolls overflow (note: not
overflow: hidden
with or without overflow) - Is an embedded object, video, or canvas
[1] This concept is very similar to that for a "self-painting layer" in WebKit and Blink. In Blink at least, there are couple of additional corner cases that cause self-painting layers, such as overlay scrollbars. Also, there are some unreliable corner cases, such as whether an iframe is composited or not. I don't think these should be specified. Instead Blink and WebKit should work towards not requiring self-painting layers for these cases.
[2] Elements which induce a pseudo stacking context
will likely be specified to:
- Paint-as-if-positioned in the paint-order algorithm from CSS2.1 See anything that creates a stacking context should sort in the positioned descendants z-ordering list #2717 for related discussion.
- Define a backface-visibility root. See [css-transforms-2] Preserve-3d + backface visibility semantics need to be clarified #918.
- Define 3d-context-flattening-eligible. Also tracked in [css-transforms-2] Preserve-3d + backface visibility semantics need to be clarified #918.
- Define perspective-containing-block-ancestor-eligible. Also tracked in [css-transforms-2] Preserve-3d + backface visibility semantics need to be clarified #918 .