【问题标题】:How to write css for fixed header and scrollable table如何为固定标题和可滚动表编写 css
【发布时间】:2014-08-15 14:13:22
【问题描述】:

我有表格,我需要固定的标题和可滚动的正文。我做到了,但我有一个边框,所以因为滚动条标题和正文没有对齐。我需要一些帮助来解决这个问题。

这是我的 JSFiddle,

JSFiddle

CSS

    table.tableSection {
    display: table;
    width: 100%;
}
table.tableSection thead, table.tableSection tbody {
    float: left;
    width: 100%;
}
table.tableSection tbody {
    overflow: auto;
    height: 150px;
}
table.tableSection tr {
    width: 100%;
    display: table;
    text-align: left;
}
table.tableSection th, table.tableSection td {
    width: 33%;
border: 1px solid #ccc;
}

请帮帮我。

【问题讨论】:

  • 那么你的尝试是什么?我不明白你的问题是什么。
  • @F.Müller,他没有尝试解决他的代码中的问题,他说他让它可滚动,问题出现了,现在他在这里寻求答案。跨度>
  • @F.Müller 我的问题是如果滚动条出现标题和正文边框没有正确对齐,我该如何解决这个问题

标签: jquery html css


【解决方案1】:
table.tableSection thead {
    float: left;
    width: 97%;
}

将此添加到您的 css 中

【讨论】:

  • 当然,该解决方案只有在表格被拖动到特定宽度时才有效?否则它将再次不同步。
【解决方案2】:

如果您将表格设置为固定大小,则可以将其分成两部分。 标题是 500px,内容是 500px + 滚动条的宽度。

您可以近似它(大约 12 像素),如更新的小提琴 here 所示:

table.tableSection {
    display: table;
    width: 500px;
}
table.tableSection thead, table.tableSection tbody {
    float: left;
    width: 100%;
}
table.tableSection tbody {
    overflow: auto;
    width:512px;
    height: 150px;
}

或使用 Javascript 计算滚动条的大小,并使用 this answer. 上提出的解决方案将其添加到表格宽度

【讨论】:

  • 这很好,但我们不能 100% 修复表格,因为我正在设计响应式网页。所以我不用多用px了。
  • 您可以将其添加到标题表的填充中:jsfiddle.net/Bkg3Z/5
  • 你能帮我修复这个 jsfiddle.net/raghavendram040/56Ce8
  • 这个问题已经接受了不同的答案。如果您有其他问题,最好将其作为其他问题发布。
【解决方案3】:
table {
  width: 916px; /* every td or th in thead + 16px for scrollbar */
}

tbody, thead tr{
  display: block;
}

tbody {
  height: 200px;
  overflow-y: auto;
  text-align:center;
}

tbody td, thead th {
   width: 225px;
}

thead th:last-child {
  width: 241px; /* td + 16px for scrollbar */
}

当然你可以给你想要的宽度。

这是我在页面中使用的,效果很好。

【讨论】:

    【解决方案4】:

    首先你需要使用jquery来识别你的表体内容是否有滚动条。接下来,您需要通过计算添加滚动条宽度来切换一个类。所以这是解决方案。

    HTML

     <table class="tableSection">
    <thead>
        <tr>
            <th><span class="text">album</span>
    
            </th>
            <th><span class="text">song</span>
    
            </th>
            <th><span class="text">genre</span>
    
            </th>
        </tr>
    </thead>
    <tbody id="mytest">
        <tr>
            <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
            <td>td</td>
            <td>td</td>
            <td>td</td>        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
            <td>td</td>
            <td>td</td>
            <td>td</td>        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
        <tr>
                        <td>td</td>
            <td>td</td>
            <td>td</td>
        </tr>
    </tbody>
    </table>
    

    CSS

     table.tableSection {
        display: table;
        width: 100%;
    }
    table.tableSection thead, table.tableSection tbody {
        float: left;
        width: 100%;
    }
    table.tableSection tbody {
        overflow: auto;
        height: 150px;    
    }
    table.tableSection tr {
        width: 100%;
        display: table;
        text-align: left;
    }
    table.tableSection th, table.tableSection td {
        width: 33%;
    border: 1px solid #ccc;
    }
    .extrawidth{
        width:calc(100% - 18px) !important;
    }
    

    JQUERY

    (function($) {
    $.fn.hasScrollBar = function() {
        return this.get(0).scrollHeight > this.height();
    }
    })(jQuery);
    
    $(document).ready(function(){    
     if($('#mytest').hasScrollBar())
     {
       $('.tableSection thead').toggleClass('extrawidth');
     }
    });
    

    Have a Fiddle Demo

    【讨论】:

    • 好极了。 .感谢你。 .
    • @SureshPonnukalai 这工作正常,但我有另一个表,因为我有 7 列,我无法修复每个 &lt;td&gt; 的宽度,所以我该如何解决。
    • 在这里,您为 3 列分配了 33%。像 7 列使用 14%。
    • @SureshPonnukalai 我做到了,但没用,你能看到我的菲德尔吗,这是jsfiddle.net/raghavendram040/56Ce8
    • 添加“word-break:break-all;”表格单元格的属性。检查你的这个更新的小提琴。 jsfiddle.net/56Ce8/2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2011-02-22
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多