aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/layout/sequential.rs14
1 files changed, 10 insertions, 4 deletions
diff --git a/components/layout/sequential.rs b/components/layout/sequential.rs
index 6ca7332497a..bc4668f33c6 100644
--- a/components/layout/sequential.rs
+++ b/components/layout/sequential.rs
@@ -9,6 +9,7 @@ use context::{LayoutContext, SharedLayoutContext};
use display_list_builder::DisplayListBuildState;
use euclid::point::Point2D;
use floats::SpeculatedFloatPlacement;
+use flow::IS_ABSOLUTELY_POSITIONED;
use flow::{PostorderFlowTraversal, PreorderFlowTraversal};
use flow::{self, Flow, ImmutableFlowUtils, InorderFlowTraversal, MutableFlowUtils};
use flow_ref::{self, FlowRef};
@@ -144,10 +145,15 @@ pub fn guess_float_placement(flow: &mut Flow) {
let mut floats_in = SpeculatedFloatPlacement::compute_floats_in_for_first_child(flow);
for kid in flow::mut_base(flow).child_iter_mut() {
- floats_in.compute_floats_in(kid);
- flow::mut_base(kid).speculated_float_placement_in = floats_in;
- guess_float_placement(kid);
- floats_in = flow::base(kid).speculated_float_placement_out;
+ if flow::base(kid).flags.contains(IS_ABSOLUTELY_POSITIONED) {
+ // Do not propagate floats in or out, but do propogate between kids.
+ guess_float_placement(kid);
+ } else {
+ floats_in.compute_floats_in(kid);
+ flow::mut_base(kid).speculated_float_placement_in = floats_in;
+ guess_float_placement(kid);
+ floats_in = flow::base(kid).speculated_float_placement_out;
+ }
}
floats_in.compute_floats_out(flow);
flow::mut_base(flow).speculated_float_placement_out = floats_in