diff --git a/Libraries/LibWeb/Layout/LayoutBlock.cpp b/Libraries/LibWeb/Layout/LayoutBlock.cpp index f53dd9c8b2..591142e201 100644 --- a/Libraries/LibWeb/Layout/LayoutBlock.cpp +++ b/Libraries/LibWeb/Layout/LayoutBlock.cpp @@ -103,9 +103,17 @@ void LayoutBlock::layout_absolutely_positioned_descendant(LayoutBox& box) - box_model.offset().bottom.to_px(box) - box_model.border_box(box).bottom; - if (!box_model.offset().left.is_auto() || !box_model.margin().left.is_auto()) { + bool has_left_side_constraints = !box_model.offset().left.is_auto() || !box_model.margin().left.is_auto(); + bool has_right_side_constraints = !box_model.offset().right.is_auto() || !box_model.margin().right.is_auto(); + + if (has_left_side_constraints && has_right_side_constraints) { + // If both 'left' and 'right' are set, we will have stretched the width to accomodate both. + x_offset += box_model.offset().right.to_px(box); + } + + if (has_left_side_constraints) { used_offset.set_x(x_offset + box_model.margin().left.to_px(box)); - } else if (!box_model.offset().right.is_auto() || !box_model.margin().right.is_auto()) { + } else if (has_right_side_constraints) { used_offset.set_x(width() + x_offset - box.width() - box_model.margin().right.to_px(box)); }