HTML 表格全高和全宽,无滚动

Posted

技术标签:

【中文标题】HTML 表格全高和全宽,无滚动【英文标题】:HTML table full height and width with no scrolling 【发布时间】:2016-11-22 17:47:47 【问题描述】:

我想要一个固定高度的标题,全高/全宽的表格,然后是下面的一些 div,最好使用 flexbox。

如何在没有滚动条的情况下做到这一点,以便所有内容都占据整个页面?

这是我的尝试:https://jsfiddle.net/1nyv4pqk/2/

html, body 
  height: 100%;
  width: 100%;
  margin: 0px;

.outter 
  display: flex;
  flex-direction: column;
  height: 100%;
  background-color: red;

.header 
  background-color: gray;
  height: 3em;

.content 
  height: 100%;
  background-color: green;

.footerClass 
  background: yellow;
  height: 3em;

.tableClass 
  margin: 10px;
  height: 100%;
  width: 100%;
  border: 2px solid;
  border-collapse: collapse;
  border-spacing: 0;

.tableClass th,
.tableClass td 
  border: 1px solid black;
<div class="outter">
  <div class="header">This is a header</div>
  <div class="content">
    <table class="tableClass">
      <thead>
        <tr>
          <th>COL 1</th>
          <th>COL 2</th>
          <th>COL 3</th>
          <th>COL 4</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>1</td>
          <td>This is some text in row 1</td>
          <td>1</td>
          <td>3</td>
        </tr>
        <tr>
          <td>2</td>
          <td>This is some text in row 2</td>
          <td>1</td>
          <td>3</td>
        </tr>
        <tr>
          <td>3</td>
          <td>This is some text in row 3</td>
          <td>3,4,5</td>
          <td>1</td>
        </tr>
        <tr>
          <td>4</td>
          <td>This is some text in row 4</td>
          <td>2,6,7</td>
          <td>2</td>
        </tr>
      </tbody>
    </table>
    <div>
      Another Div
    </div>
    <div class="footerClass">
      This is a footer
    </div>
  </div>
</div>

【问题讨论】:

所有你的 div(除了表格)都有固定的或动态的高度吗? 不,我希望表格和页脚之间的任何 div 都具有固定高度、根据需要占用垂直空间或百分比的能力。 【参考方案1】:

您的容器上有height: 100%

但是在您的 .outter 容器中,您有这些孩子:

.header 
  background-color: gray;
  height: 3em;


.content 
  height: 100%;
  background-color: green;

效果如下:

3em + 100% = vertical overflow = vertical scrollbar

补偿header 高度。进行此调整:

.content 
  height: calc(100% - 3em);
  background-color: green;

必须对.content 的子级应用类似的高度调整:

.tableClass 
  margin: 10px;
  height: calc(100% - 3em - 20px - 19.0909px); /* height, less footer height, less margin
                                                  heights, less "Another Div" height */
  width: 100%;
  border: 2px solid;
  border-collapse: collapse;
  border-spacing: 0;

就宽度而言,你有这个:

.tableClass 
  margin: 10px;
  height: 100%;
  width: 100%;
  border: 2px solid;
  border-collapse: collapse;
  border-spacing: 0;

margin 正在添加到width: 100%,导致水平滚动。

width: calc(100% - 20px)补偿溢出。

还要添加* box-sizing: border-border; ,因此边框和填充被考虑到widthheight 声明中。

Revised Fiddle

【讨论】:

您如何解释“另一个 Div”何时开始变大?当我添加几段时,我再次得到滚动条jsfiddle.net/1nyv4pqk/4 您可以指定一个高度,以便将其计入容器的计算中。或者使用 flex 属性。 我不想指定高度,那么使用 flex 属性是什么意思? flex-grow 属性使元素能够占据容器中的剩余空间。这是列的示例,可以很容易地应用于行:***.com/q/23794713/3597276

以上是关于HTML 表格全高和全宽,无滚动的主要内容,如果未能解决你的问题,请参考以下文章

Rechart 条形图:除了条形图啥都不显示? (全宽和全高?)

R降价输出大小

在 WKWebView 上禁用双击滚动

我如何拥有一个固定的右对齐容器并使用父级滚动?

使用 Jquery 或 Javascript 触发 mousemove 事件

UIPopoverController 在 iOS 8 中的大小不正确