【问题标题】:Scrolling a table if overflow using Bootstrap table-responsive如果使用 Bootstrap 响应表溢出,则滚动表
【发布时间】:2020-03-11 21:00:56
【问题描述】:

我有一个简化的布局:

  • 在左侧有一个包含 nav 的 flex 布局,它使用了 15% 的视图宽度。
  • 有一个main 占用了剩余的水平空间。

对于一个视图,我有一个表格占用的空间超过了main 内部的可用空间。我想水平滚动表格,而不是整个页面。我已经尝试通过使用 Bootstrap 用table-responsive 包装表格来做到这一点,但是这仍然会为整个页面放置一个滚动条,而不仅仅是我想要的表格/主要元素。 table-responsive 听起来就像我想要的那样,但在我的情况下,它并没有按我的预期工作,我怀疑我错过了一些东西。

div.main {
  display: flex;
  min-height: 100%;
}

div.main>nav {
  background-color: coral;
  flex: 0 0 15vw;
}

div.main>main {
  flex: auto;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<div class="main">
  <nav>
  </nav>
  <main>
    <div class="table-responsive">
      <table class="table table-striped table-sm">
        <thead>
          <tr>
            <th></th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
            <th>Header Name</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <th>Column Name</th>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
          </tr>
          <tr>
            <th>Column Name</th>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
          </tr>
          <tr>
            <th>Column Name</th>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
            <td>value</td>
          </tr>
        </tbody>
      </table>
    </div>
  </main>
</div>

【问题讨论】:

    标签: css bootstrap-4 bootstrap-table


    【解决方案1】:

    这种行为的原因似乎是因为table-responsive 没有“尊重”(按照你想要的方式)display: flex 孩子(在你的情况下是&lt;main&gt;),因为d-flex 孩子没有@ 987654325@,因此&lt;main&gt; 的宽度扩展为可用的全宽。

    因此有两种方法可以修复它,要么简单地删除 &lt;main&gt; 包装器,要么将宽度设置为 &lt;main&gt;(参见代码 sn-p)。由于您的&lt;nav&gt; 设置为15vw,因此给您的班级min-width:85%max-width:85% 甚至width:85% 提供&lt;main&gt; 应该会给您所需的行为。

    我个人推荐第一种方法,因为我不确定它是默认的 Bootstrap 行为还是错误。

    div.main {
      display: flex;
      min-height: 100%;
    }
    
    div.main>nav {
      background-color: coral;
      flex: 0 0 15vw;
    }
    
    div.main>main {
      min-width: 85%;
      flex: auto;
    }
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
    <div class="main">
      <nav>
      </nav>
      <main>
        <div class="table-responsive">
          <table class="table table-striped table-sm">
            <thead>
              <tr>
                <th></th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
                <th>Header Name</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <th>Column Name</th>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
              </tr>
              <tr>
                <th>Column Name</th>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
              </tr>
              <tr>
                <th>Column Name</th>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
                <td>value</td>
              </tr>
            </tbody>
          </table>
        </div>
      </main>
    </div>

    【讨论】:

      【解决方案2】:

      我建议用

      包裹桌子
      <div class="overflow-hidden">
      </div>
      

      它消除了“整个页面”滚动条,并为您留下了引导表,并且看起来应该是这样。 (我就是这样解决的) 在这种情况下也不需要 table-responsive。


      我无法评论选择的答案,所以我将在这里发表我的评论:

      display: flex 
      

      消除引导表水平滚动条,并为您留下“整个页面”滚动条。这意味着要向下滚动,您必须一直向右滚动才能找到 y 滚动条。还可以查找按钮、搜索、列选择等。

      【讨论】:

        猜你喜欢
        • 2017-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-05
        • 1970-01-01
        • 2016-05-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多