【问题标题】:how to freeze table header using javascript如何使用javascript冻结表头
【发布时间】:2013-08-03 15:47:45
【问题描述】:

我有 200 行的表格。第一行有标题(第标签)。当我向下滚动时,标题将被固定并对所有行可见。有什么帮助吗?

谢谢

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

最简单的答案,看看这个 -> http://www.imaputz.com/cssStuff/bigFourVersion.html


一个警告:不适用于 IE 7-9(适用于 6 和 10)。如果您需要 7-9 的解决方案,请尝试 jQuery Scrollable Table Plugin。您甚至可以通过将 javascript 调用放在 IE if comments 中,将其设置为仅使用 IE 版本 7-9 的 JS。然后你就会知道任何使用更好的浏览器的人都会使用纯 CSS(更快),并且你会为那些使用废话的人提供解决方案......我的意思是 IE 7,8 或 9。


它基本上与 CSS 有关。一个关键是将表体设置为display: block。另一个问题是处理固定宽度。只是检查一下。复制那个例子真的很容易。

我真的不能说太多了!这个例子是纯 CSS,没有 JS!

jsFiddle

CSS

/* define height and width of scrollable area. Add 16px to width for scrollbar          */
div.tableContainer {
    clear: both;
    border: 1px solid #963;
    height: 285px;
    overflow: auto;
    width: 756px
}

/* Reset overflow value to hidden for all non-IE browsers. */
html>body div.tableContainer {
    overflow: hidden;
    width: 756px
}

/* define width of table. IE browsers only                 */
div.tableContainer table {
    float: left;
    width: 740px
}

/* define width of table. Add 16px to width for scrollbar.           */
/* All other non-IE browsers.                                        */
html>body div.tableContainer table {
    width: 756px
}

/* set table header to a fixed position. WinIE 6.x only                                       */
/* In WinIE 6.x, any element with a position property set to relative and is a child of       */
/* an element that has an overflow property set, the relative value translates into fixed.    */
/* Ex: parent element DIV with a class of tableContainer has an overflow property set to auto */
thead.fixedHeader tr {
    position: relative
}

/* set THEAD element to have block level attributes. All other non-IE browsers            */
/* this enables overflow to work on TBODY element. All other non-IE, non-Mozilla browsers */
html>body thead.fixedHeader tr {
    display: block
}

/* make the TH elements pretty */
thead.fixedHeader th {
    background: #C96;
    border-left: 1px solid #EB8;
    border-right: 1px solid #B74;
    border-top: 1px solid #EB8;
    font-weight: normal;
    padding: 4px 3px;
    text-align: left
}

/* make the A elements pretty. makes for nice clickable headers                */
thead.fixedHeader a, thead.fixedHeader a:link, thead.fixedHeader a:visited {
    color: #FFF;
    display: block;
    text-decoration: none;
    width: 100%
}

/* make the A elements pretty. makes for nice clickable headers                */
/* WARNING: swapping the background on hover may cause problems in WinIE 6.x   */
thead.fixedHeader a:hover {
    color: #FFF;
    display: block;
    text-decoration: underline;
    width: 100%
}

/* define the table content to be scrollable                                              */
/* set TBODY element to have block level attributes. All other non-IE browsers            */
/* this enables overflow to work on TBODY element. All other non-IE, non-Mozilla browsers */
/* induced side effect is that child TDs no longer accept width: auto                     */
html>body tbody.scrollContent {
    display: block;
    height: 262px;
    overflow: auto;
    width: 100%
}

/* make TD elements pretty. Provide alternating classes for striping the table */
/* http://www.alistapart.com/articles/zebratables/                             */
tbody.scrollContent td, tbody.scrollContent tr.normalRow td {
    background: #FFF;
    border-bottom: none;
    border-left: none;
    border-right: 1px solid #CCC;
    border-top: 1px solid #DDD;
    padding: 2px 3px 3px 4px
}

tbody.scrollContent tr.alternateRow td {
    background: #EEE;
    border-bottom: none;
    border-left: none;
    border-right: 1px solid #CCC;
    border-top: 1px solid #DDD;
    padding: 2px 3px 3px 4px
}

/* define width of TH elements: 1st, 2nd, and 3rd respectively.          */
/* Add 16px to last TH for scrollbar padding. All other non-IE browsers. */
/* http://www.w3.org/TR/REC-CSS2/selector.html#adjacent-selectors        */
html>body thead.fixedHeader th {
    width: 200px
}

html>body thead.fixedHeader th + th {
    width: 240px
}

html>body thead.fixedHeader th + th + th {
    width: 316px
}

/* define width of TD elements: 1st, 2nd, and 3rd respectively.          */
/* All other non-IE browsers.                                            */
/* http://www.w3.org/TR/REC-CSS2/selector.html#adjacent-selectors        */
html>body tbody.scrollContent td {
    width: 200px
}

html>body tbody.scrollContent td + td {
    width: 240px
}

html>body tbody.scrollContent td + td + td {
    width: 300px
}

HTML

<div id="tableContainer" class="tableContainer">
    <table border="0" cellpadding="0" cellspacing="0" width="100%" class="scrollTable">
        <thead class="fixedHeader">
            <tr>
                <th><a href="#">Header 1</a></th>
                <th><a href="#">Header 2</a></th>
                <th><a href="#">Header 3</a></th>
            </tr>
        </thead>
        <tbody class="scrollContent">
            <tr>
                <td>Cell Content 1</td>
                <td>Cell Content 2</td>
                <td>Cell Content 3</td>
            </tr>
            <tr>
                <td>More Cell Content 1</td>
                <td>More Cell Content 2</td>
                <td>More Cell Content 3</td>
            </tr>
            <tr>
                <td>Even More Cell Content 1</td>
                <td>Even More Cell Content 2</td>
                <td>Even More Cell Content 3</td>
            </tr>
            <tr>
                <td>And Repeat 1</td>
                <td>And Repeat 2</td>
                <td>And Repeat 3</td>
            </tr>
            ...
            ...
            ...
            <tr>
                <td>End of Cell Content 1</td>
                <td>End of Cell Content 2</td>
                <td>End of Cell Content 3</td>
            </tr>
        </tbody>
    </table>
</div>

【讨论】:

  • @Stano 大声笑,因为您将宽度设置为 100%。您需要固定宽度使其完美
  • 大声笑,是的,我忽略了容器 div。这就是我提供链接的原因,它有完整的例子。无论如何,现在更新答案以包含一个 jsfiddle
  • 我明白了!大声笑,有趣的是它适用于 IE 5,6 和 10!但不是在 7 到 9!把它留给微软。我确定对 CSS 进行了一些调整,您可以找到要添加的 IE 7-9 特定的 CSS 设置。
  • 我可能已经为您的 IE 问题找到了解决方案,我更新了答案,但链接是:webtoolkit.info/scrollable-html-table-plugin-for-jquery.html
  • @Stano 不一定正确。我曾为几家公司工作过,就像我现在所做的那样,它们拒绝 IE 并且只使用 Chrome 或 FF。此外,如果你检查一下,IE 正在失去很多市场份额,而 Chrome 是目前世界上最受欢迎的。当然,大多数军事和医疗仍然使用 IE7 或 8,但即使它们最终也会出现。如果您想确保 IE 用户获得与 chrome 用户相同的体验,还可以选择在您的网站上使用 chromium 插件。另外,如上所述,您可以简单地使用 IE cmets 将插件隔离到仅 IE,从而提供更好的浏览器,更好的体验
猜你喜欢
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 2014-03-30
相关资源
最近更新 更多