render: z-index paint layers and clear ending float zones
Paint order was pure tree order, so a dropdown/overlay declared before a later sibling lost to it and a z:-1 decorative backdrop covered its own content. A positioned element with a non-zero z-index now lifts its whole subtree into a separate paint layer: negative layers under the normal flow, positive above it, each sorted ascending with tree order preserved within equal z. Nested z roots paint inside their ancestor root's subtree in tree order, the pragmatic core of CSS stacking contexts. clear (left/right/both, previously unparsed) now ends the float zone, so a clearfix element drops below the float at full width instead of joining the flow column beside it. Repro-verified: an earlier z:10 overlay paints over a later sibling, a later z:-1 backdrop paints under earlier content, and the clear repro matches Chromium within 3px on every measure. Spot set unchanged or slightly improved; obstacle course 33/33.
This commit is contained in:
1 parent
953292563d
commit
22f33e4dec
4 files changed
+93
-2
No files matched your search
@@ -325,6 +325,13 @@ pub struct LayoutStyle {
|
||||
/// cells inherit it); obscura applies it as main-axis alignment of the
|
||||
/// cell's flex-column stand-in. `None` on non-cell elements.
|
||||
pub vertical_align: Option<VerticalAlign>,
|
||||
/// `z-index` on a positioned element. `None` is `auto` (tree order). A
|
||||
/// non-zero value lifts the element's whole subtree into a separate paint
|
||||
/// layer: negatives under the normal flow, positives above it, sorted.
|
||||
pub z_index: Option<i32>,
|
||||
/// `clear`, when set: this element moves below preceding floats on the
|
||||
/// given side(s), ending their float zone.
|
||||
pub clear: Option<Clear>,
|
||||
/// Resolved during the inheritance pass: true when this element should
|
||||
/// not be painted at all, either from its own or an inherited
|
||||
/// `visibility: hidden`, or because the product of its own and every
|
||||
@@ -463,6 +470,15 @@ pub enum VerticalAlign {
|
||||
Bottom,
|
||||
}
|
||||
|
||||
/// `clear`: which floated side(s) an element moves below. Ends the float
|
||||
/// zone in `dom::build_children_with_float_zone` (the clearfix idiom).
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum Clear {
|
||||
Left,
|
||||
Right,
|
||||
Both,
|
||||
}
|
||||
|
||||
/// `line-height`: `normal` (a font-relative default), a unitless multiple of
|
||||
/// font-size, or an absolute pixel length.
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
|
||||
Reference in new issue
Block a user