mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
layout: Fix calculation of overflow for stacking contexts that contain
`position: relative` fragments. Fixes placement of the header on espn.go.com.
This commit is contained in:
parent
f79220f1a8
commit
5c51a6214e
8 changed files with 27 additions and 19 deletions
|
@ -382,7 +382,7 @@ impl<C> PaintTask<C> where C: PaintListener + Send + 'static {
|
|||
// When there is a new layer, the transforms and origin
|
||||
// are handled by the compositor.
|
||||
(Some(paint_layer.id),
|
||||
Point2D::zero(),
|
||||
-stacking_context.overflow.origin,
|
||||
Matrix4::identity(),
|
||||
Matrix4::identity())
|
||||
}
|
||||
|
|
|
@ -1148,9 +1148,6 @@ impl FragmentDisplayListBuilding for Fragment {
|
|||
layer: StackingContextLayer,
|
||||
mode: StackingContextCreationMode)
|
||||
-> Arc<StackingContext> {
|
||||
// FIXME(pcwalton): Is this vertical-writing-direction-safe?
|
||||
let margin = self.margin.to_physical(base_flow.writing_mode);
|
||||
|
||||
let border_box = match mode {
|
||||
StackingContextCreationMode::Normal |
|
||||
StackingContextCreationMode::OuterScrollWrapper => {
|
||||
|
@ -1167,7 +1164,12 @@ impl FragmentDisplayListBuilding for Fragment {
|
|||
};
|
||||
let overflow = match mode {
|
||||
StackingContextCreationMode::Normal => {
|
||||
base_flow.overflow.translate(&-Point2D::new(margin.left, Au(0)))
|
||||
// First, compute the offset of our border box (including relative positioning)
|
||||
// from our flow origin, since that is what `BaseFlow::overflow` is relative to.
|
||||
let border_box_offset =
|
||||
border_box.translate(&-base_flow.stacking_relative_position).origin;
|
||||
// Then, using that, compute our overflow region relative to our border box.
|
||||
base_flow.overflow.translate(&-border_box_offset)
|
||||
}
|
||||
StackingContextCreationMode::InnerScrollWrapper |
|
||||
StackingContextCreationMode::OuterScrollWrapper => {
|
||||
|
|
|
@ -2060,8 +2060,8 @@ impl Fragment {
|
|||
// the time. Can't we handle relative positioning by just adjusting `border_box`?
|
||||
let relative_position =
|
||||
self.relative_position(&LogicalSize::zero(self.style.writing_mode));
|
||||
border_box =
|
||||
border_box.translate_by_size(&relative_position.to_physical(self.style.writing_mode));
|
||||
border_box = border_box.translate_by_size(&relative_position.to_physical(
|
||||
self.style.writing_mode));
|
||||
let mut overflow = border_box;
|
||||
|
||||
// Box shadows cause us to draw outside our border box.
|
||||
|
|
|
@ -54,7 +54,7 @@ flaky_cpu == append_style_a.html append_style_b.html
|
|||
!= block_image.html noteq_500x300_white.html
|
||||
== block_replaced_content_a.html block_replaced_content_ref.html
|
||||
== block_replaced_content_b.html block_replaced_content_ref.html
|
||||
== blur_a.html blur_ref.html
|
||||
!= blur_a.html blur_ref.html
|
||||
!= border_black_groove.html border_black_solid.html
|
||||
!= border_black_ridge.html border_black_groove.html
|
||||
!= border_black_ridge.html border_black_solid.html
|
||||
|
|
|
@ -6,24 +6,35 @@ div {
|
|||
width: 200px;
|
||||
height: 200px;
|
||||
background: green;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.ex {
|
||||
position: relative;
|
||||
width: 40px; height: 40px;
|
||||
border-style: solid;
|
||||
border-color: black;
|
||||
top: 50px; left: 50px;
|
||||
position: absolute;
|
||||
width: 80px; height: 80px;
|
||||
background: blue;
|
||||
top: 60px; left: 60px;
|
||||
-webkit-filter: blur(30px);
|
||||
-moz-filter: blur(30px);
|
||||
filter: blur(30px);
|
||||
}
|
||||
|
||||
.coveritup {
|
||||
position: absolute;
|
||||
background: green;
|
||||
top: 60px;
|
||||
left: 60px;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
transform: translateX(0px); /* force stacking context */
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
<div class="ex"></div>
|
||||
<div class="coveritup"></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -6,6 +6,7 @@ div {
|
|||
width: 200px;
|
||||
height: 200px;
|
||||
background: green;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[margin-collapse-004.htm]
|
||||
type: reftest
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[min-height-106.htm]
|
||||
type: reftest
|
||||
expected: FAIL
|
Loading…
Add table
Add a link
Reference in a new issue