【问题标题】:Table inside scrollable container still causes container width to grow可滚动容器内的表格仍会导致容器宽度增加
【发布时间】:2015-08-04 09:07:12
【问题描述】:

我正在使用 Bootstrap 网格。我目前在 Bootstrap 列中显示表格时遇到了一个奇怪的问题。

我有一个包含一些列的表格,显示在 div(表格容器)内。表容器有col-md-9 引导类,所以它的宽度设置为75%。但是,在某个点,如果表格包含太多内容和/或列,则会导致容器的宽度扩大。这是一个独立的示例:https://output.jsbin.com/xowihu

这是一个屏幕截图。注意灰色框被推到外面,导致布局看起来很糟糕:

而且,当我从表中删除一些列时,它可以正常工作并且看起来像预期的那样:

让我困惑的是,我已经在表格容器上指定了overflow: scroll。为什么内容长度会影响容器宽度?

我试过了:

  • 在表格上设置table-layout: fixed,在表格单元格上设置word-wrap: break-word。这行得通,但是表格内容在视觉上很糟糕;一个词分成三行,以此类推。
  • 在表容器上设置max-width 有效,但它必须在px 单元中。这可能是最后的手段(将通过 Javascript 应用),因为网站有不同的布局宽度。

编辑代码链接:https://jsbin.com/xowihu/edit

【问题讨论】:

  • 使用max-width: x% 不起作用??
  • 不能使用 css 限制表格的宽度或高度,只要您不将显示属性更改为例如 display: block;(它有各种不需要的副作用,你真的不想去那里)。您需要为包含表格的 html 元素提供overflow-x: scroll;
  • @RohitKumar No.. 它只能使用显式单位(px、em 等)
  • @connexo 我已经添加了overflow-x: scroll。事实上,我已经尝试添加overflow: auto,以及所有变体..
  • 将其添加到 table 并没有 nothing

标签: html css twitter-bootstrap


【解决方案1】:

当我把<table class="table"> 里面的<div class="row"> 放在桌子外面时,tr,td 它工作得很好..

<div class="col-md-7 slide-content">
    <p>
      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </p>
    <div class="row">
              <div class="col-sm-9">
                <div class="row">
                  <div class="col-sm-2" style="height: 250px; background-color: lightgreen">Some Label</div>
                  <div class="col-sm-9 scrollable">
                    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Exercitationem libero sequi tempore necessitatibus tempora, porro, iure, nisi dicta, rerum enim natus facilis voluptatum soluta dolore molestias vero odit eaque veniam.</p>
                    <table class="table" border="1" cellpadding="1" cellspacing="1">
                      <tbody>
                        <tr>
                          <td>Hello</td>
                          <td>Lipsumdolor</td>
                          <td>Lipsum Gen</td>
                          <td>Lorem ipsum dolor sit amet</td>
                          <td>Lorem ipsum dolor</td>
                          <td>Lorem ipsum</td>
                          <td>Lorem ipsum</td>
                          <td>Lorem ipsum</td>
                          <td>Lorem ipsum</td>
                        </tr>
                        <tr>
                          <td>Hello</td>
                          <td>Lipsumdolor</td>
                          <td>LipsumLipsumLipsumLipsum</td>
                          <td>Lorem ipsum dolor sit amet</td>
                          <td>Lorem ipsum dolor</td>
                          <td>Lorem ipsum</td>
                          <td>Lorem ipsum</td>
                          <td>Lorem ipsum</td>
                          <td>Lorem ipsum</td>
                        </tr>
                        <tr>
                          <td>Hello</td>
                          <td>Lipsumdolor</td>
                          <td>Lipsum Gen</td>
                          <td>Lorem ipsum dolor sit amet</td>
                          <td>Lorem ipsum dolor</td>
                          <td>qwertyuiop</td>
                          <td>qwertyuiop</td>
                          <td>qwertyuiop</td>
                          <td>qwertyuiop</td>
                        </tr>
                      </tbody>
                    </table>
                  </div>

                </div>
              </div>
              <div class="col-sm-3">
                <img src="https://placehold.it/120x120"><br>
                <a href="#">Click to enlarge</a>
              </div>
            </div><table class="table">
      <tbody>
        <tr>
          <td>

          </td>
        </tr>
      </tbody>
    </table>
  </div>

所以我所做的一切就是获取

中的 div class="row"
<table class="table">
  <tr>
    <td>

把它放在下面

<div class="col-md-7 slide-content">

【讨论】:

  • 你是什么意思“当我把 div ROW 放在桌子外面时,tr,td 它工作得很好” - 你还能把它放在哪里??
  • 在他使用的代码中,他有
    所以我改成了
  • @GuilhermeSilva 谢谢,但要做到这一点,我将不得不在我现有的应用程序中进行很多更改。我正在寻找一个简单的 CSS hack 对 scrollable 类(表容器)或其他东西像那样:-)如果没有找到解决方案,那么我会接受这个答案。
【解决方案2】:

您自己提供了一半的解决方案,使用table-layout: fixed 可以完美运行。但是内容看起来很糟糕!所以我解决了这个问题。只需添加这个 css -

.slide-content > table.table {
  table-layout: fixed;
}

【讨论】:

  • 它不适合你??我现在编辑了代码 - jsbin.com/moguxejare/edit?html,output 现在我看到“点击放大”图像没有正确浮动,您是否对其进行了任何更改?
【解决方案3】:

我正在寻找可滚动类(表格容器)上的简单 CSS hack 或类似的东西

您是否尝试过灰色框.col-sm-3 上的position: fixedposition: absolute?这应该将.col-sm-3 排除在其余内容的流程之外(默认情况下,所有内容都是position: static)。

这样做时,col-sm-3 将出现在您期望的位置,无论其他“静态”元素在做什么,只要您没有冲突的样式即可。

更新https://jsfiddle.net/zer00ne/azkn7436/

HTML

    <div class="container">
    <div class="row">
        <div class="col-md-4" style="background-color: lightgray; height:400px;">Aside Menu</div>
        <div class="col-md-7 slide-content">
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
            <table class="table">
                <tbody>
                    <tr>
                        <td>
                            <div class="row">
                                <div class="col-sm-9">
                                    <div class="row">
                                        <div class="col-sm-2" style="height: 250px; background-color: lightgreen">Some Label</div>
                                        <div class="col-sm-9 scrollable">
                                            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Exercitationem libero sequi tempore necessitatibus tempora, porro, iure, nisi dicta, rerum enim natus facilis voluptatum soluta dolore molestias vero odit eaque veniam.</p>
                                            <table class="table" border="1" cellpadding="1" cellspacing="1">
                                                <tbody>
                                                    <tr>
                                                        <td>Hello</td>
                                                        <td>Lipsumdolor</td>
                                                        <td>Lipsum Gen</td>
                                                        <td>Lorem ipsum dolor sit amet</td>
                                                        <td>Lorem ipsum dolor</td>
                                                        <td>Lorem ipsum</td>
                                                        <td>Lorem ipsum</td>
                                                        <td>Lorem ipsum</td>
                                                        <td>Lorem ipsum</td>
                                                    </tr>
                                                    <tr>
                                                        <td>Hello</td>
                                                        <td>Lipsumdolor</td>
                                                        <td>LipsumLipsumLipsumLipsum</td>
                                                        <td>Lorem ipsum dolor sit amet</td>
                                                        <td>FSH 10%</td>
                                                        <td>Lorem ipsum</td>
                                                        <td>Lorem ipsum</td>
                                                        <td>Lorem ipsum</td>
                                                        <td>Lorem ipsum</td>
                                                    </tr>
                                                    <tr>
                                                        <td>Hello</td>
                                                        <td>Lipsumdolor</td>
                                                        <td>Lipsum Gen</td>
                                                        <td>Lorem ipsum dolor sit amet</td>
                                                        <td>Lorem ipsum dolor</td>
                                                        <td>qwertyuiop</td>
                                                        <td>qwertyuiop</td>
                                                        <td>qwertyuiop</td>
                                                        <td>qwertyuiop</td>
                                                    </tr>
                                                </tbody>
                                            </table>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-sm-3" style="position: fixed; right:0; bottom: 50%">
                                    <img src="https://placehold.it/120x120">
                                    <br> <a href="#">Click to enlarge</a>

                                </div>
                            </div>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
</div>

css

.scrollable {
    overflow-x: scroll;
    max-width: 75%;
}
.scrollable table {
    margin: 0px;
    border-color: lightgray;
    word-wrap: break-word;
}
.slide-content {
    border: 1px solid lightgray;
}
/*  st    .slide-content > table.table {
  table-layout: fixed;
} */

你的.col-sm-3position: fixed; bottom: 50%; right: 0; 现在你可以把你的桌子拉到你想要的宽度,右边的灰色小盒子是不可能移动的。

【讨论】:

  • 表格仍然推动容器的宽度。我在col-sm-3 元素上添加了position: absolute,在其父元素上添加了position: relative
  • 尝试在灰色框中添加fixed,不要将position 应用于包括父级在内的任何其他内容。也不要float它。也设置为right: 0;,如果还是错误,再设置right: 10pxright: 1em,直到正确为止。如果您根本无法移动灰色框,那么您应该使用 Chrome 开发工具并查看它的计算样式。如果你不知道我在说什么,请看这个:developer.chrome.com/devtools/docs/dom-and-styles
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 2012-07-16
  • 2013-02-17
相关资源
最近更新 更多