diff options
-rw-r--r-- | components/layout_2020/display_list/stacking_context.rs | 5 | ||||
-rw-r--r-- | components/layout_2020/positioned.rs | 2 | ||||
-rw-r--r-- | components/layout_2020/style_ext.rs | 16 |
3 files changed, 17 insertions, 6 deletions
diff --git a/components/layout_2020/display_list/stacking_context.rs b/components/layout_2020/display_list/stacking_context.rs index 78992d9c5bc..8cc717569f9 100644 --- a/components/layout_2020/display_list/stacking_context.rs +++ b/components/layout_2020/display_list/stacking_context.rs @@ -540,7 +540,10 @@ impl BoxFragment { padding_rect: &PhysicalRect<Length>, containing_block_info: &mut ContainingBlockInfo, ) { - if !self.style.establishes_containing_block() { + if !self + .style + .establishes_containing_block_for_absolute_descendants() + { return; } diff --git a/components/layout_2020/positioned.rs b/components/layout_2020/positioned.rs index 2580d4af9bc..883f783dfd8 100644 --- a/components/layout_2020/positioned.rs +++ b/components/layout_2020/positioned.rs @@ -196,7 +196,7 @@ impl PositioningContext { pub(crate) fn new_for_style(style: &ComputedValues) -> Option<Self> { if style.establishes_containing_block_for_all_descendants() { Some(Self::new_for_containing_block_for_all_descendants()) - } else if style.establishes_containing_block() { + } else if style.establishes_containing_block_for_absolute_descendants() { Some(Self { for_nearest_positioned_ancestor: Some(Vec::new()), for_nearest_containing_block_for_all_descendants: Vec::new(), diff --git a/components/layout_2020/style_ext.rs b/components/layout_2020/style_ext.rs index 58551aedbe6..c1d2f47e2fa 100644 --- a/components/layout_2020/style_ext.rs +++ b/components/layout_2020/style_ext.rs @@ -113,7 +113,7 @@ pub(crate) trait ComputedValuesExt { fn has_transform_or_perspective(&self) -> bool; fn effective_z_index(&self) -> i32; fn establishes_stacking_context(&self) -> bool; - fn establishes_containing_block(&self) -> bool; + fn establishes_containing_block_for_absolute_descendants(&self) -> bool; fn establishes_containing_block_for_all_descendants(&self) -> bool; fn background_is_transparent(&self) -> bool; fn get_webrender_primitive_flags(&self) -> wr::PrimitiveFlags; @@ -395,7 +395,13 @@ impl ComputedValuesExt for ComputedValues { !self.get_position().z_index.is_auto() } - fn establishes_containing_block(&self) -> bool { + /// Returns true if this style establishes a containing block for absolute + /// descendants (`position: absolute`). If this style happens to establish a + /// containing block for “all descendants” (ie including `position: fixed` + /// descendants) this method will return true, but a true return value does + /// not imply that the style establishes a containing block for all descendants. + /// Use `establishes_containing_block_for_all_descendants()` instead. + fn establishes_containing_block_for_absolute_descendants(&self) -> bool { if self.establishes_containing_block_for_all_descendants() { return true; } @@ -403,8 +409,10 @@ impl ComputedValuesExt for ComputedValues { self.clone_position() != ComputedPosition::Static } - /// Returns true if this style establishes a containing block for all descendants - /// including fixed and absolutely positioned ones. + /// Returns true if this style establishes a containing block for + /// all descendants, including fixed descendants (`position: fixed`). + /// Note that this also implies that it establishes a containing block + /// for absolute descendants (`position: absolute`). fn establishes_containing_block_for_all_descendants(&self) -> bool { if self.get_box().display.outside() != stylo::DisplayOutside::Inline && self.has_transform_or_perspective() |