mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
Fix explicit height edge case with absolute / relative nested divs.
Needed for #6643.
This commit is contained in:
parent
41166fdb5b
commit
e83091d918
4 changed files with 75 additions and 7 deletions
|
@ -1104,7 +1104,8 @@ impl BlockFlow {
|
||||||
let screen_size = LogicalSize::from_physical(self.fragment.style.writing_mode,
|
let screen_size = LogicalSize::from_physical(self.fragment.style.writing_mode,
|
||||||
layout_context.shared.screen_size);
|
layout_context.shared.screen_size);
|
||||||
Some(screen_size.block)
|
Some(screen_size.block)
|
||||||
} else if self.base.flags.contains(IS_ABSOLUTELY_POSITIONED) {
|
} else if self.base.flags.contains(IS_ABSOLUTELY_POSITIONED) &&
|
||||||
|
self.base.block_container_explicit_block_size.is_none() {
|
||||||
self.base.absolute_cb.explicit_block_containing_size(layout_context)
|
self.base.absolute_cb.explicit_block_containing_size(layout_context)
|
||||||
} else {
|
} else {
|
||||||
self.base.block_container_explicit_block_size
|
self.base.block_container_explicit_block_size
|
||||||
|
@ -1329,12 +1330,7 @@ impl BlockFlow {
|
||||||
|
|
||||||
let mut iterator = self.base.child_iter().enumerate().peekable();
|
let mut iterator = self.base.child_iter().enumerate().peekable();
|
||||||
while let Some((i, kid)) = iterator.next() {
|
while let Some((i, kid)) = iterator.next() {
|
||||||
{
|
flow::mut_base(kid).block_container_explicit_block_size = explicit_content_size;
|
||||||
let kid_base = flow::mut_base(kid);
|
|
||||||
if !kid_base.flags.contains(IS_ABSOLUTELY_POSITIONED) {
|
|
||||||
kid_base.block_container_explicit_block_size = explicit_content_size;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine float impaction, and update the inline size speculations if necessary.
|
// Determine float impaction, and update the inline size speculations if necessary.
|
||||||
if flow::base(kid).flags.contains(CLEARS_LEFT) {
|
if flow::base(kid).flags.contains(CLEARS_LEFT) {
|
||||||
|
|
51
tests/ref/abs_rel_explicit_height.html
Normal file
51
tests/ref/abs_rel_explicit_height.html
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style type="text/css">
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
html, body {
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
#div0 {
|
||||||
|
position: absolute;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
#div1 {
|
||||||
|
position: relative;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
#div2 {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
#div3 {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
#div4 {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="div0">
|
||||||
|
<div id="div1">
|
||||||
|
<div id="div2">
|
||||||
|
<div id="div3">
|
||||||
|
<div id="div4">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
20
tests/ref/abs_rel_explicit_height_ref.html
Normal file
20
tests/ref/abs_rel_explicit_height_ref.html
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style type="text/css">
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
#div0 {
|
||||||
|
position: absolute;
|
||||||
|
height: 100px;
|
||||||
|
width: 100%;
|
||||||
|
background-color: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="div0">
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -9,6 +9,7 @@
|
||||||
# Should be == with expected failure:
|
# Should be == with expected failure:
|
||||||
fragment=top != ../html/acid2.html acid2_ref.html
|
fragment=top != ../html/acid2.html acid2_ref.html
|
||||||
|
|
||||||
|
== abs_rel_explicit_height.html abs_rel_explicit_height_ref.html
|
||||||
== absolute_inline_containing_block_a.html absolute_inline_containing_block_ref.html
|
== absolute_inline_containing_block_a.html absolute_inline_containing_block_ref.html
|
||||||
== acid1_a.html acid1_b.html
|
== acid1_a.html acid1_b.html
|
||||||
== acid2_noscroll.html acid2_ref_broken.html
|
== acid2_noscroll.html acid2_ref_broken.html
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue