如何在可滚动的div中制作固定的头表?

Roh*_*han 20 html css css-position

我想固定我的桌子的标题.表存在于可滚动div中.以下是我的代码.

<div id="table-wrapper">
    <div id="table-scroll">
        <table bgcolor="white" border="0" cellpadding="0" cellspacing="0" id="header-fixed" width="100%" overflow="scroll" class="scrollTable">
            <thead>
                <tr>
                    <th>Order ID</th>
                    <th>Order Date</th>
                    <th>Status</th>
                    <th>Vol Number</th>
                    <th>Bonus Paid</th>
                    <th>Reason for no Bonus</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><%=snd.getOrderId()%></td>
                    <td><%=snd.getDateCaptured()%></td>
                    <td><%=snd.getOrderStatus()%></td>
                    <td>Data Not Available</td>
                    <td>Data Not Available</td>
                    <td>Data Not Available</td>
                </tr>
            </tbody>
        </table>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

下面是我的CSS,我用于上面的div:

#table-wrapper {
    position:relative;
}

#table-scroll {
    height:250px;
    overflow:auto;  
    margin-top:20px;
}

#table-wrapper table {
    width:100%;
}

#table-wrapper table * {
    background:white;
    color:black;
}

#table-wrapper table thead th .text {
    position:absolute;   
    top:-20px;
    z-index:2;
    height:20px;
    width:35%;
    border:1px solid red;
}
Run Code Online (Sandbox Code Playgroud)

Mr.*_*ien 32

做这样的事情怎么样?我是从零开始做的......

我所做的是使用2个表,一个用于标题,一个是静态的,另一个表呈现单元格,我div用一个固定高度的元素包装,并启用滚动,我正在使用overflow-y: auto;

还要确保使用table-layout: fixed;固定宽度的td元素,以便table在没有white space使用字符串时不会破坏,所以为了打破使用的字符串word-wrap: break-word;

演示

.wrap {
    width: 352px;
}

.wrap table {
    width: 300px;
    table-layout: fixed;
}

table tr td {
    padding: 5px;
    border: 1px solid #eee;
    width: 100px;
    word-wrap: break-word;
}

table.head tr td {
    background: #eee;
}

.inner_table {
    height: 100px;
    overflow-y: auto;
}

<div class="wrap">
    <table class="head">
        <tr>
            <td>Head 1</td>
            <td>Head 1</td>
            <td>Head 1</td>
        </tr>
    </table>
    <div class="inner_table">
        <table>
        <tr>
            <td>Body 1</td>
            <td>Body 1</td>
            <td>Body 1</td>
        </tr>
        <!-- Some more tr's -->
    </table>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • @RavenHursT因为`<table>`元素非常适合表格数据,这似乎是OP所具有的. (5认同)
  • 您已经在表格列上放置了静态宽度,这几乎是使用表格首先显示内容的全部要点.这根本不是解决方案.如果你只是要固定宽度,为什么还要打扰桌子呢?为什么不直接使用div? (4认同)

小智 5

使用position: stickyon th可以解决问题。

注意:如果position: stickythead或上使用tr,则将无法使用。

https://jsfiddle.net/hrg3tmxj/

  • 迟到了,但想为其他人评论说,这是迄今为止最简单和最好的解决方案。没有那些需要 20 行 CSS 才能工作的“hacky”废话。只需按照指示进行操作,并且不要忘记添加 Top: 0 。 (4认同)
  • 我不确定为什么这被否决了。与其他解决方案相比,此解决方案以更少的“妥协”完成了我的需求。我要注意的一件事是 th 元素需要背景颜色。 (2认同)
  • 三年来第一次登录StackOverflow只是为了评论这个。这实际上是在桌子上获得固定表头的最简单的解决方案。 (2认同)