- From: Ben Cotterell <ben.cotterell@antplc.com>
- Date: Thu, 16 Jul 2009 14:16:32 +0100
- To: <www-style@w3.org>
See this test case:
http://www.tidraso.co.uk/misc/stacking.html
As far as I can tell from CSS 2.1, the pink box should be behind the red
one.
CSS 2.1 9.9.1 defines 7 stacking levels:
Each stacking context consists of the following stacking levels (from
back to front):
1. the background and borders of the element forming the stacking
context.
2. the stacking contexts of descendants with negative stack levels.
3. a stacking level containing in-flow non-inline-level descendants.
4. a stacking level for floats and their contents.
5. a stacking level for in-flow inline-level descendants.
6. a stacking level for positioned descendants with 'z-index: auto',
and any descendant stacking contexts with 'z-index: 0'.
7. the stacking contexts of descendants with positive stack levels.
The red box is at level 6 because it is positioned, so goes above the
blue one.
The yellow box is a float, so at level 4, behind the red one. So far so
good.
Inside the float is the pink box, relatively-positioned. So it is at
level 6. But the float appears to it to start a stacking context. So it
cannot be stacked above the float.
See Appendix E:
All non-positioned floating descendants, in tree order. For each one
of these, treat the element as if it created a new stacking context,
but any descendants which actually create a new stacking context
should be considered part of the parent stacking context, not this
new one.
So, if I set z-index: 0 on the pink box, it should come in front of the
red box, because now it does "actually create a new stacking context"
and should therefore participate in the root stacking context.
But if I leave it at z-index: auto, it should remain behind the red box,
because we are treating the float as if it created a stacking context.
But, Firefox, Opera and Konqueror all put the pink box in front of the
red one-- i.e. as though it participated in the root stacking context,
_even when_ it has z-index: auto (which is what it does have in the test
case above).
Usually when all three of those browsers agree, it means I've
interpreted the specs wrong... but I can't see where in this case.
Can anyone explain why the pink box should be in front of the red one?
--
Ben Cotterell
ANT Software Limited
Received on Thursday, 16 July 2009 13:14:49 UTC