响应式 table 使布局超出 100% 宽度

Responsive table makes layout go beyond 100% width

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

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

但它使整个页面水平展开而不适合window。 尝试在小屏幕上查看错误。

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 child div 的宽度

td div {
      width: auto;
    }

希望对修复bug有帮助

如果 window 尺寸小于或等于 900px,则 td 内容将超过该尺寸。您不应该以 px 为单位修复 td div 大小。请改用 %(百分比)。

td div
{
    width: 100%;
}

像这样更改 table 代码:

<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;
}

问题是 table 本质上没有响应。您已诉诸使用 display tabletable-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;
}

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

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

.content > * {
    width: 100vw;
}

我还将 class .table 添加到您的 table 元素

<table class="table table-bordered">

Here is a Demo

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