aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout_2020/display_list/stacking_context.rs5
-rw-r--r--components/layout_2020/positioned.rs2
-rw-r--r--components/layout_2020/style_ext.rs16
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()