aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/fragment.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout/fragment.rs')
-rw-r--r--components/layout/fragment.rs31
1 files changed, 21 insertions, 10 deletions
diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs
index d2b21b0a178..7d60144c44c 100644
--- a/components/layout/fragment.rs
+++ b/components/layout/fragment.rs
@@ -35,9 +35,9 @@ use std::fmt;
use std::sync::{Arc, Mutex};
use string_cache::Atom;
use style::computed_values::content::ContentItem;
-use style::computed_values::{border_collapse, clear, mix_blend_mode, overflow_wrap, position};
-use style::computed_values::{text_align, text_decoration, white_space, word_break};
-use style::computed_values::transform_style;
+use style::computed_values::{border_collapse, clear, mix_blend_mode, overflow_wrap, overflow_x};
+use style::computed_values::{position, text_align, text_decoration, transform_style, white_space};
+use style::computed_values::{word_break, z_index};
use style::properties::{self, ComputedValues, cascade_anonymous};
use style::values::computed::{LengthOrPercentage, LengthOrPercentageOrAuto};
use style::values::computed::{LengthOrPercentageOrNone};
@@ -2027,13 +2027,24 @@ impl Fragment {
return true
}
- match self.style().get_box().position {
- position::T::absolute | position::T::fixed => {
- // FIXME(pcwalton): This should only establish a new stacking context when
- // `z-index` is not `auto`. But this matches what we did before.
- true
- }
- position::T::relative | position::T::static_ => {
+ // FIXME(pcwalton): Don't unconditionally form stacking contexts for `overflow_x: scroll`
+ // and `overflow_y: scroll`. This needs multiple layers per stacking context.
+ match (self.style().get_box().position,
+ self.style().get_box().z_index,
+ self.style().get_box().overflow_x,
+ self.style().get_box().overflow_y.0) {
+ (position::T::absolute,
+ z_index::T::Auto,
+ overflow_x::T::visible,
+ overflow_x::T::visible) |
+ (position::T::fixed,
+ z_index::T::Auto,
+ overflow_x::T::visible,
+ overflow_x::T::visible) => false,
+ (position::T::absolute, _, _, _) |
+ (position::T::fixed, _, _, _) => true,
+ (position::T::relative, _, _, _) |
+ (position::T::static_, _, _, _) => {
// FIXME(pcwalton): `position: relative` establishes a new stacking context if
// `z-index` is not `auto`. But this matches what we did before.
false