【问题标题】:Responsive table makes layout go beyond 100% width响应式表格使布局超过 100% 宽度
【发布时间】:2017-01-29 07:15:18
【问题描述】:

演示:http://codepen.io/anon/pen/JdWrKX?editors=110

如您所见,“.panel”中有一个响应式表格,您可以水平滚动。太好了。

但它使整个页面水平扩展,不适合窗口。 尝试在小屏幕上查看错误。

HTML:

<div id="wrap">

  <nav class="navbar navbar-inverse navbar-static-top" role="navigation">
    <div class="container-fluid">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="">Logo</a>
      </div>
      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
        <ul class="nav navbar-nav navbar-right">
          <li>
            <a href="">Logout</a>
          </li>
        </ul>
      </div>
    </div>
  </nav>

  <div class="content content-primary content-sm">
    <div class="container-fluid">

      <div class="row">
        <div class="col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3">
          <div class="panel panel-default">
            <div class="panel-body">
              <div class="table-responsive">
                <table class="table-bordered">
                  <tr>
                    <td>
                      <div>a</div>
                    </td>
                    <td>b</td>
                  </tr>
                </table>
              </div>
            </div>
          </div>
        </div>
      </div>

    </div>
  </div>

  <footer>
    <nav class="navbar navbar-inverse navbar-static-top" role="navigation">
      <div class="container-fluid">
        <div class="navbar-header">
          <a class="navbar-brand" href="">Copyright</a>
        </div>
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
          <ul class="nav navbar-nav navbar-right">
            <li>
              <a href="">Logout</a>
            </li>
          </ul>
        </div>
      </div>
    </nav>
  </footer>
</div>

CSS:

html,
body {
  height: 100%;
}

#wrap {
  height: 100%;
  display: table;
  width: 100%;
}

#wrap > nav,
footer {
  display: table-row;
}

nav.navbar {
  margin-bottom: 0;
}

.content-sm {
  padding: 15px 0;
}

.content-primary {
  background: #337ab7;
}

.content {
  display: table-cell;
  height: 100%;
}

td {
  text-wrap: no-warp;
}

td div {
  width: 900px;
}

【问题讨论】:

  • 我猜td div {width: 900px;} 是问题所在。但问题是较小的视口需要哪种行为?
  • @FabianMebus – 900px 旨在模拟一个包含大量内容的 td。我有可以水平滚动的大桌子,效果很好。但整体布局应保持 100% 的窗口,而不是超出范围。
  • 您正在使用 .container-fluid,但您不是故意为您的子行 div 使用 .row-fluid 吗?
  • @BenoîtDaSilva – Bootstrap 3 不再使用“.row-fluid”。
  • 看看this,它会删除您的 900px 并添加内容。问题是您将表格强制设置为至少 900 像素,这意味着您正在消除响应能力。

标签: html twitter-bootstrap css html-table


【解决方案1】:

由于.content 的子元素似乎忽略了 % 宽度值,因此对我有用的解决方法是:

.content > * {
    width: 100vw;
}

我还将.table 类添加到您的表格元素中

<table class="table table-bordered">

Here is a Demo

注意:vw 单元仅适用于现代浏览器。 Check support here

【讨论】:

  • 哇,太棒了。 :) 非常感谢!
  • vwvhvmin/vm 是一个很棒的单位。但请记住,这是针对新浏览器 (IE10+) 的解决方案。
【解决方案2】:

修改表格代码如下:

<div class="content content-primary content-sm">
    <div class="container-fluid">
      <div class="row">
        <div class="col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3">
          <div class="panel panel-default">
            <div class="panel-body">
                <table class="table table-responsive table-bordered">
                  <tr>
                    <td>
                      <div>a</div>
                    </td>
                    <td>b</td>
                  </tr>
                </table>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>

并从您的 css 文件中删除它

td div {
  width: 900px;
}

【讨论】:

    【解决方案3】:

    尝试像这样编辑 td 的子 div 的宽度

    td div {
          width: auto;
        }
    

    我希望它有助于修复错误。

    【讨论】:

    • 否 - 响应式表格工作正常。问题在于整体页面布局。
    【解决方案4】:

    如果窗口大小小于或等于 900 像素,则 td 内容将超出此范围。您不应该以 px 为单位修复 td div 大小。请改用 %(百分比)。

    td div
    {
        width: 100%;
    }
    

    【讨论】:

    • 否 - 响应式表格工作正常。问题在于整体页面布局。
    • 表格大小是否适合整个页面布局大小?
    【解决方案5】:

    问题是tables 本质上是不响应的。你已经诉诸于使用displaytabletable-rowtable-cell,它们随着内容的扩展超出了视口,并创造了你不想要的效果。

    正如您在 fiddle 中看到的那样:如果您删除 table 元素,您的宽度问题就会消失,但是您不会得到您正在寻找的粘性页脚。

    将您的 CSS 更改为:

    html,
    body {
      height: 100%;
    
    }
    
    #wrap {
      min-height: 100%;
      background: #337ab7;
    }
    
    .page-wrap:after {
      content: "";
      display: block;
      height: 51px; 
    }
    
    nav.navbar {
      margin-bottom: 0;
    }
    
    .content-sm {
      padding: 15px 0;
    }
    
    .box-content {
        width: 9000px;
        height: 5000px;
        background: red;
    }
    
    .box-responsive {
        width: 100%;
        max-width: 100%;
        overflow-x: scroll;
        border: 1px solid green;
    }
    

    您将获得所需的响应宽度,以及带有粘性页脚的全高网页。

    【讨论】:

    • 谢谢,但不幸的是页面的内容有一个动态的高度,这意味着它可以变得更高。尝试让内容超高,比如 5000 像素,你会发现页脚上的“位置:绝对”不再起作用。
    • – 谢谢,但这不是页脚的原始行为。页脚应该与内容一起下降,而不是固定的。如果您采用原始代码并让内容变得超高,您将看到页脚的行为:它向下,这是预期的结果。
    • @murid 又更新了,相信这就是你想要的。
    猜你喜欢
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    相关资源
    最近更新 更多