IE:令人难以置信的跳跃表标题

时间:2009-05-13 13:27:33

标签: javascript html css internet-explorer

免责声明:正如标题中所述,这仅针对Internet Explorer 。这是进行内部开发的一种好处 - 它可以在处理这样的事情时让生活变得更轻松。

免责声明2:我可以在IE7和IE6中重现这一点。我没有尝试过IE8,因为在我们的企业环境中我们无法使用它。

我的目标是创建一个表格,其中内容滚动,同时保持THEAD固定。有很多不同的方法可以实现这一目标;你可以在这篇文章的底部看到我的方法。不幸的是,我没有公开主持这个例子的地方,但你可以在这里复制并粘贴它来测试它: http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parse

因此,如果您向下滚动表格并将鼠标悬停在表格中的第一个单元格上,您将看到我正在谈论的现象:标题行跳起来!

这是它变得有趣的地方。该表由第三方ASP.NET控件呈现。所以我不能改变发出的HTML;只有CSS。使用IE7开发人员的工具栏,我可以看出控件的类正在改变,因为我将鼠标悬停在它上面(正在添加一个新类)。奇怪的是,工具栏在标题上显示任何onmouseover或onmouseleave事件,只是它调用_events和control,它们都是[Object]。消息来源也没有透露任何有用的信息。

所以我的目标是仅使用CSS来阻止此标题行跳转。这甚至可能吗?如果可能的话,可以在没有CSS表达式的情况下完成(我会拼命避免)吗?

以下是模拟我所看到的示例HTML。

粘贴到此处进行测试:http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parse

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
.ScrollContainer
{
    overflow-y: auto !important;
    overflow-x: hidden !important;
    margin: 0 auto;
    width: 100% !important;
    max-height: 275px;
    border-bottom: solid 1px #009DD9;
}

.ScrollContainer .MasterTable
{
    width: auto !important;
}

.ScrollContainer table
{
    table-layout: fixed;    
}

.ScrollContainer .GridHeader
{
    position:relative;
    top: 0px;
    border-top: solid 1px #009DD9;
    border-right: solid 1px #009DD9;
    border-bottom: solid 1px #009DD9;
    border-left: solid 1px #009DD9;
    background: #cccccc;
}

#Spacer
{
    height: 350px;
}

.GridHeader
{
    height: 30px !important;
}

</style>
</head>
<body>
<div id="Spacer"></div>
<div class="ScrollContainer">
<div class="Dummy">
<div class="Grid">
<table class="MasterTable">
<colgroup>
<col/><col/><col/><col/><col/><col/>
</colgroup>
<thead><tr>
<th class="GridHeader" onMouseEnter="this.className = this.className + ' GridOver';" onMouseLeave="this.className = this.className.replace(' GridOver', '');" ><a href="#" style="GridLink">Column 1</a></th>
<th class="GridHeader"><a href="#" style="GridLink">Column 2</a></th>
<th class="GridHeader"><a href="#" style="GridLink">Column 3</a></th>
<th class="GridHeader"><a href="#" style="GridLink">Column 4</a></th>
<th class="GridHeader"><a href="#" style="GridLink">Column 5</a></th>
<th class="GridHeader"><a href="#" style="GridLink">Column 6</a></th></tr>
</thead>
<tbody>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
<tr><td>A</td><td>B</td><td>X</td><td>D</td><td>E</td><td>F</td></tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>

2 个答案:

答案 0 :(得分:3)

我知道您的问题指明严格通过CSS进行更改。我建议使用JQuery解决方案,因为使用JQuery可以在文档加载后进行CSS更改。

名称较小的Stupid fixed header是一个JQuery插件,允许垂直和水平滚动。

Suprotim Agarwal专门针对ASP.NET GridView here展示了一种JQuery方法。

有可能JQuery还允许你实际修改ASP控件生成的HTML,因为你可以在你的JavaScript中简单地在ASP控件准备好之后抓取表并用属性填充它。这取决于时间以及ASP控制对外部人员通过DOM操纵其表的认识。

答案 1 :(得分:1)

你有没有试过give layout那些讨厌的元素?如果这没有帮助,那就是另一个,在背景上放置1px透明gif。