【问题标题】:Make a HTML with two columns of equal height and one of them scrollable制作具有两列高度相同且其中一列可滚动的 HTML
【发布时间】:2016-01-25 06:11:50
【问题描述】:

我有一个由一行和两列组成的 HTML 表格(换句话说,只有两个单元格)。这个想法是让两列(即两个单元格)具有相等的高度,这 - 至少对我来说 - 如果使用浮动或 flexbox 证明是不平凡的,因此我求助于 HTML 表格。

左侧单元格(列)动态填充内容,因此事先不知道其高度。右侧单元格(列)也是动态填充的(实际上是 Facebook 提要),但其高度应适应(即始终等于)左侧列的高度。但是这个右栏也应该是可滚动的,这意味着用户可以通过使用该栏自己的滚动条来阅读其所有内容。

所以关键是要让屏幕上显示的右列高度适应左列的高度,同时使右列(但不是左列)可滚动。

默认情况下,右列实际上与左列具有相同的高度[除了边框落在单元格之外的烦人事实,但我们现在先把它放在一边]。但是一旦右栏的内容变得太大而无法容纳,问题就开始了。我可以设置“溢出-y:隐藏;”对于右列内的 content-div,这将强制执行相等的高度,但显然这样右列将不可滚动(溢出的内容将被简单地切断)。 [设置“溢出-y:隐藏;”到表格单元格本身,而不是其中包含的 div,似乎没有做任何事情,这实际上是有道理的,因为溢出的是 div 而不是表格单元格。]

相反,如果我设置“溢出-y:滚动;”我确实得到了所需的滚动条,但事实证明,这并不能强制等高:我得到了一个无用的滚动条,而列变得如此之高以至于能够一次显示所有内容。

因此,问题是:如何获得相等的高度和滚动条?

我也尝试过“height: auto;”和“身高:100%;”,但据我所知,似乎都没有帮助......

这是当前情况的屏幕截图:


(来源:test2468.nl

您可以看到右列的滚动条(在页面滚动条的左侧),但您也可以看到该列变得比左列高。

代码很简单:

<table>
<col width="60%">
<col width="38.7%">

<tr>

<td>
   [... Fill the left column/cell with dynamic content ]
</td>

<td id="fb-td" style="vertical-align: top;">
   <div id="fp2-rechts">
      <div class="faceb" id="fb-berichten2">
         <h3 id="fb-kop2">OP FACE-<br />BOOK</h3>
         <?php echo do_shortcode('[custom-facebook-feed id="168766623258787"  
         num=16]');   ?>
      </div>
   </div>
</td>

</tr>
</table>      

如您所见,右侧表格单元格中有两个 wrapper-div,可能是一对多的,但这似乎与这里无关。

谢谢。

【问题讨论】:

  • 您必须为此使用 javascript。首先找到这些 div 的最大高度,并将该高度分配给两个 div。

标签: html css html-table scrollable


【解决方案1】:

这是使用 CSS 的解决方案:

table {
  position: relative;
}

td {
  background: red;
  width: 200px;
}

.column2>div {
  height: 100%;
  overflow: auto;
  position: absolute;
  top: 0;
  width: 200px;
}
<table>
  <tr>
    <td class="column1">
      <div> a<br> a<br> a<br> </div>
    </td>
    <td class="column2">
      <div> b<br> b<br> b<br> b<br> b<br> b<br> </div>
    </td>
  </tr>
</table>

【讨论】:

  • 谢谢。今天晚些时候我会尝试一下,会回来报告。
  • 是的,演示效果很好,并且在清理了我创建的一些 CSS 混乱之后,我现在也可以为自己工作了。谢谢!
【解决方案2】:

这样试试

var maxHeight = 0;

$("div").each(function(){
  if ($(this).height() > maxHeight) { maxHeight = $(this).height(); }
});

$("div").height(maxHeight);

【讨论】:

  • 谢谢。我现在正在试验,因为我必须稍微调整一下 JavaScript 代码才能使其工作。现在我已经实现了右列本身基本上和左列一样高(从列背景图像的高度来看),但是 content 仍然溢出(即继续超出列/细胞本身)。但正如我所说,我将进一步试验,稍后再报告,只是不知道确切的时间......
  • 可以在css中赋值(溢出:隐藏)。
  • 好吧,我已经让 Arun 的 CSS 解决方案工作了,所以我会接受这个答案,也是因为它是纯 CSS。但是,我也会支持您的答案,因为它非常相关,而且我认为它应该可以工作(只是我的代码有点混乱,现在要花费太多时间来清理所有内容)。一旦我有一点时间,我也会进一步研究 Jasvascript 解决方案,因为我认为我也可以从中学习。所以希望我能在几周内报告这一点。
猜你喜欢
  • 1970-01-01
  • 2012-09-01
  • 2019-10-28
  • 2019-08-18
  • 1970-01-01
  • 2023-03-12
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多