зеркало из https://github.com/mozilla/gecko-dev.git
Bug 803677 - Fix offsetTop/offsetParent for element with display:table-cell that have anonymous table parents. r=bzbarsky
This commit is contained in:
Родитель
d8f0757e5e
Коммит
44ee89fc83
|
@ -379,8 +379,18 @@ static bool
|
|||
IsOffsetParent(nsIFrame* aFrame)
|
||||
{
|
||||
nsIAtom* frameType = aFrame->GetType();
|
||||
return (IS_TABLE_CELL(frameType) ||
|
||||
frameType == nsGkAtoms::tableFrame);
|
||||
|
||||
if (IS_TABLE_CELL(frameType) || frameType == nsGkAtoms::tableFrame) {
|
||||
// Per the IDL for Element, only td, th, and table are acceptable offsetParents
|
||||
// apart from body or positioned elements; we need to check the content type as
|
||||
// well as the frame type so we ignore anonymous tables created by an element
|
||||
// with display: table-cell with no actual table
|
||||
nsIContent* content = aFrame->GetContent();
|
||||
|
||||
return content->IsHTML(nsGkAtoms::table) || content->IsHTML(nsGkAtoms::td)
|
||||
|| content->IsHTML(nsGkAtoms::th);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Element*
|
||||
|
|
|
@ -270,6 +270,7 @@ MOCHITEST_FILES = \
|
|||
test_bug786564.html \
|
||||
test_bug797113.html \
|
||||
test_bug787134.html \
|
||||
test_bug803677.html \
|
||||
test_iframe_sandbox_inheritance.html \
|
||||
file_iframe_sandbox_a_if1.html \
|
||||
file_iframe_sandbox_a_if2.html \
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=803677
|
||||
-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test for Bug 803677</title>
|
||||
<script type="application/javascript" src="/MochiKit/packed.js"></script>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script src="reflect.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
<style>
|
||||
.base { border:1px solid gray; }
|
||||
.bad-table { display:table-cell; border:1px solid red; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=803677">Mozilla Bug 803677</a>
|
||||
<p id="display"></p>
|
||||
<div id="content">
|
||||
<p class="base">1</p>
|
||||
<p class="base">2</p>
|
||||
<p class="base">3</p>
|
||||
<p class="base bad-table">4</p>
|
||||
<p class="base">7</p>
|
||||
<p class="base">8</p>
|
||||
<p class="base">9</p>
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
var p = document.querySelectorAll(".base");
|
||||
var parent = document.querySelector("body");
|
||||
var prevOffset = 0;
|
||||
for (var i = 0; i < p.length; i++) {
|
||||
var t = 0, e = p[i];
|
||||
is(e.offsetParent, parent, "Offset parent of all paragraphs should be the body.");
|
||||
while (e) {
|
||||
t += e.offsetTop;
|
||||
e = e.offsetParent;
|
||||
}
|
||||
p[i].innerHTML = t;
|
||||
|
||||
ok(t > prevOffset, "Offset should increase down the page");
|
||||
prevOffset = t;
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Загрузка…
Ссылка в новой задаче