【问题标题】:Embedded Table scroll vertical with fixed header带有固定标题的嵌入式表格垂直滚动
【发布时间】:2016-10-01 19:45:18
【问题描述】:

我有一个嵌入另一个 div 的表格,当然它的大小比外部 div 大。我目前正在使用ScrollToFixed 在滚动时将标题固定在顶部,并在表格内容超出视口时再次保留它。这行得通,但真正难看的是,虽然标题行是固定的,但它大于内容,所以它在左/右溢出。

请参阅the Fiddle,它确实按描述工作。 我能想象的是以某种方式设置表格的固定高度和宽度,并且它应该是垂直和水平滚动的,因为存在溢出并且第一行应该固定在滚动上。

$(document).ready(function() {
  var scrollLeft = 0;
  var leftRoundingRect = $('.table-body')[0].getBoundingClientRect().left;

  $('.sticky').scrollToFixed({
    limit: $('.user.last').offset().top,
    removeOffsets: true,
    zIndex: 0,
    unfixed: function() {
      $(this).offset({
        left: leftRoundingRect - scrollLeft
      });
    }
  });

  $(".table-body").scroll(function() {
    scrollLeft = this.scrollLeft;
    $(".user.sticky").offset({
      left: leftRoundingRect - scrollLeft
    });
  });
});
.tab {
  padding: 20px;
  border: 1px solid lightgray;
}

.inner-content {
  overflow: hidden;
  padding: 0 10px 0 10px;
}

.table-body {
  overflow: auto;
}

.users {
  white-space: nowrap;
  font-size: 0;
}

.user {
  font-size: 0;
  border-bottom: 1px solid #d3d3d3;
  border-left: 1px solid #d3d3d3;
  color: #555;
  width: 750px;
}

.user.odd {
  background: #f4f5f7;
}

.sticky {
  background: grey;
}

.bold {
  color: #fff;
  font-weight: 600;
}

.company,
.firstName,
.lastName,
.roles {
  font-size: 18px;
  border-right: 1px solid lightgray;
  display: inline-block;
  width: 150px;
  padding: 10px;
  overflow: scroll;
  white-space: nowrap;
}
<div class="tab">
  <div class="inner-content">
    <div class="users">
      <div class="user sticky">
        <div class="firstName bold">First</div>
        <div class="lastName bold">Last</div>
        <div class="roles bold">Role</div>
        <div class="company bold">Company</div>
      </div>
      <div class="table-body">
        <div class="user">
          <div class="firstName">Max</div>
          <div class="lastName">Mustermann</div>
          <div class="roles">admin</div>
          <div class="company">HP</div>
        </div>
        <div class="user odd">
          <div class="firstName">Melanie</div>
          <div class="lastName">Musterfrau</div>
          <div class="roles">readonly</div>
          <div class="company">IBM</div>
        </div>
        <div class="user">
          <div class="firstName">Max</div>
          <div class="lastName">Mustermann</div>
          <div class="roles">admin</div>
          <div class="company">HP</div>
        </div>
        <div class="user odd">
          <div class="firstName">Melanie</div>
          <div class="lastName">Musterfrau</div>
          <div class="roles">readonly</div>
          <div class="company">IBM</div>
        </div>
        <div class="user">
          <div class="firstName">Max</div>
          <div class="lastName">Mustermann</div>
          <div class="roles">admin</div>
          <div class="company">HP</div>
        </div>
        <div class="user odd">
          <div class="firstName">Melanie</div>
          <div class="lastName">Musterfrau</div>
          <div class="roles">readonly</div>
          <div class="company">IBM</div>
        </div>
        <div class="user last">
          <div class="firstName">Test</div>
          <div class="lastName">Tester</div>
          <div class="roles">contributor</div>
          <div class="company">SAP</div>
        </div>
      </div>
    </div>
  </div>
</div>
<div style="display:inline-block; height: 1000px; padding-top:50px;">Let's Scroll Baby
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://bigspotteddog.github.io/ScrollToFixed/jquery-scrolltofixed-min.js"></script>

【问题讨论】:

    标签: javascript html css scroll css-tables


    【解决方案1】:

    按照我描述的那样,遵循代码确实有效。

    $(document).ready(function() {
      var scrollLeft = 0;
      var leftRoundingRect = $('.table-body')[0].getBoundingClientRect().left;
    
      $(".table-body").scroll(function() {
        scrollLeft = this.scrollLeft;
        $(".user.sticky").offset({
          left: leftRoundingRect - scrollLeft
        });
      });
      
      $(".user").width($(".table-body").get(0).scrollWidth - 1);
      
    });
    .tab {
      padding: 20px;
      border: 1px solid lightgray;
      width:220px;
    }
    .inner-content {
      padding: 0 10px 0 10px;
      width:200px;
    }
    .header {
      overflow: hidden;
    }
    .table-body {
      overflow: auto;
      height: 100px;
    }
    .users {
      white-space: nowrap;
      font-size: 0;
    }
    .user {
      font-size: 0;
      border-bottom: 1px solid #d3d3d3;
      border-left: 1px solid #d3d3d3;
      color: #555;
      width: 750px;
    }
    .user.odd {
      background: #f4f5f7;
    }
    .sticky {
      background: grey;
    }
    .bold {
      color: #fff;
      font-weight: 600;
    }
    .company,
    .firstName,
    .lastName,
    .roles {
      font-size: 18px;
      border-right: 1px solid lightgray;
      display: inline-block;
      width: 150px;
      padding: 10px;
      overflow: scroll;
      white-space: nowrap;
    }
    <div style="display:inline-block; height: 200px; padding-top:50px;">Other Content
    </div>
    <div class="tab">
      <div class="inner-content">
        <div class="header">
          <div class="user sticky">
            <div class="firstName bold">First</div>
            <div class="lastName bold">Last</div>
            <div class="roles bold">Role</div>
            <div class="company bold">Company</div>
          </div>
        </div>
        <div class="table-body">
          <div class="user">
            <div class="firstName">Max</div>
            <div class="lastName">Mustermann</div>
            <div class="roles">admin</div>
            <div class="company">HP</div>
          </div>
          <div class="user odd">
            <div class="firstName">Melanie</div>
            <div class="lastName">Musterfrau</div>
            <div class="roles">readonly</div>
            <div class="company">IBM</div>
          </div>
          <div class="user">
            <div class="firstName">Max</div>
            <div class="lastName">Mustermann</div>
            <div class="roles">admin</div>
            <div class="company">HP</div>
          </div>
          <div class="user odd">
            <div class="firstName">Melanie</div>
            <div class="lastName">Musterfrau</div>
            <div class="roles">readonly</div>
            <div class="company">IBM</div>
          </div>
          <div class="user">
            <div class="firstName">Max</div>
            <div class="lastName">Mustermann</div>
            <div class="roles">admin</div>
            <div class="company">HP</div>
          </div>
          <div class="user odd">
            <div class="firstName">Melanie</div>
            <div class="lastName">Musterfrau</div>
            <div class="roles">readonly</div>
            <div class="company">IBM</div>
          </div>
          <div class="user last">
            <div class="firstName">Test</div>
            <div class="lastName">Tester</div>
            <div class="roles">contributor</div>
            <div class="company">SAP</div>
          </div>
        </div>
      </div>
    </div>
    <div style="display:inline-block; height: 200px; padding-top:50px;">Other Content
    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 2013-08-01
      • 2011-02-07
      相关资源
      最近更新 更多