滚动时粘滞表标题不保持宽度

时间:2017-10-18 16:11:04

标签: javascript jquery css

我正在尝试在向下滚动时使表头粘在顶部。

我正在使用此处提供的解决方案:css-tricks.com/persistent-headers /.

但是当我尝试使用它时,表头不会保持其宽度。

function UpdateTableHeaders() {
       $(".persist-area").each(function() {
           var el             = $(this),
               offset         = el.offset(),
               scrollTop      = $(window).scrollTop(),
               floatingHeader = $(".floatingHeader", this)
           if ((scrollTop > offset.top) && (scrollTop < offset.top + el.height())) {
               floatingHeader.css({
                "visibility": "visible"
               });
           } else {
               floatingHeader.css({
                "visibility": "hidden"
                 });      
               };
           });
        }
            
        $(function() {
           var clonedHeaderRow;
           $(".persist-area").each(function() {
               clonedHeaderRow = $(".persist-header", this);
               clonedHeaderRow
                 .before(clonedHeaderRow.clone())
                 .css("width", clonedHeaderRow.width())
                 .addClass("floatingHeader");  
           });
           $(window)
            .scroll(UpdateTableHeaders)
            .trigger("scroll");
        });
.floatingHeader {
       position: fixed;
       top: 0;
       visibility: hidden;
     }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<table class="persist-area">
          <tr class="persist-header">
            <th>Company</th>
            <th>Contact</th>
            <th>Country</th>
          </tr>
          <tr>
            <td>Alfreds Futterkiste</td>
            <td>Maria Anders</td>
            <td>Germany</td>
          </tr>
          <tr>
            <td>Centro comercial Moctezuma</td>
            <td>Francisco Chang</td>
            <td>Mexico</td>
          </tr>
          <tr>
            <td>Ernst Handel</td>
            <td>Roland Mendel</td>
            <td>Austria</td>
          </tr>
          <tr>
            <td>Island Trading</td>
            <td>Helen Bennett</td>
            <td>UK</td>
          </tr>
          <tr>
            <td>Laughing Bacchus Winecellars</td>
            <td>Yoshi Tannamuri</td>
            <td>Canada</td>
          </tr>
          <tr>
            <td>Magazzini Alimentari Riuniti</td>
            <td>Giovanni Rovelli</td>
            <td>Italy</td>
          </tr>
          <tr>
            <td>Magazzini Alimentari Riuniti</td>
            <td>Giovanni Rovelli</td>
            <td>Italy</td>
          </tr>
          <tr>
            <td>Magazzini Alimentari Riuniti</td>
            <td>Giovanni Rovelli</td>
            <td>Italy</td>
          </tr>
          <tr>
            <td>Magazzini Alimentari Riuniti</td>
            <td>Giovanni Rovelli</td>
            <td>Italy</td>
          </tr>
          <tr>
            <td>Magazzini Alimentari Riuniti</td>
            <td>Giovanni Rovelli</td>
            <td>Italy</td>
          </tr>
          <tr>
            <td>Magazzini Alimentari Riuniti</td>
            <td>Giovanni Rovelli</td>
            <td>Italy</td>
          </tr>
          <tr>
            <td>Alfreds Futterkiste</td>
            <td>Maria Anders</td>
            <td>Germany</td>
          </tr>
          <tr>
            <td>Centro comercial Moctezuma</td>
            <td>Francisco Chang</td>
            <td>Mexico</td>
          </tr>
       </table>

如何使表格列对齐并且看起来自然?

任何帮助都将受到高度赞赏!

2 个答案:

答案 0 :(得分:0)

尝试添加:

left: 0
right: 0
width: 100%

到您的.floatingHeader班级

答案 1 :(得分:0)

好吧,当您将position: fixed;放在克隆的标题行上时,它不再位于表的上下文中,因为它是fixed。这意味着标题单元格宽度不会占用数据单元格宽度的宽度,因为固定标题不再是表格的一部分。

即使您将克隆标题的宽度设置为与&#34;未固定的#34;标题行,如果没有设置宽度,单元格将只占用其单元格内容的宽度。因此,你得到了#34;倒塌&#34;看看你的形象。

要解决此问题,您需要明确设置.floatingHeader的单元格宽度以匹配表格单元格的单元格宽度。您还需要将display的{​​{1}}设置为.floatingHeader,使其行为类似于表格,因为请记住它不再位于表格的上下文中。

因此,您更新的CSS可能如下所示:

table

请参阅this fiddle了解演示。

<强>更新

要将标题大小与浏览器窗口大小调整大小同步,您可以附加同步固定标题和原始标题宽度的事件:

.floatingHeader {
  position: fixed;
  top: 0;
  visibility: hidden;
  display: table; /*Added*/
}

.floatingHeader th,
.persist-area th,
.persist-area td {
  padding: 2px 10px;
  width: 33%; /*All cells must match widths*/
}

请参阅此fiddle了解演示(调整框架窗口大小)