jquery - 表头最大高度,不够横向展开

标签 jquery html css

我有一个包含任意列数和任意标题的表格。

我想设置页眉的最大高度。 如果高度不足以容纳文本,我希望单元格水平拉伸(stretch),并可能水平滚动整个表格。

需要 CSS 和/或 javascript (JQuery) 解决方案。

在下图中,我对 1.2. 很满意,对 3.4 不满意.,如果下划线是空格并且没有手动放置,那么 5. 会很高兴。

enter image description here

.overflow-x {
  overflow-x: auto;
  overflow-y: hidden;
}

td {
  padding: 10px;
  border: 1px solid black;
  line-height: 20px;
}

td>div {
  max-height: 40px;
}
<div style="width:300px; background-color:#fde; padding:10px">

  <ol>
    <li>

      <div class="overflow-x">
        <table>
          <tr>
            <td>quick</td>
            <td>brown</td>
            <td>fox</td>
          </tr>
        </table>
      </div>

    </li>
    <li>

      <div class="overflow-x">
        <table>
          <tr>
            <td>the quick brown fox</td>
            <td>jumps over</td>
            <td>the lazy dog</td>
          </tr>
        </table>
      </div>

    </li>
    <li>

      <div class="overflow-x">
        <table>
          <tr>
            <td>the quick brown fox jumps over the lazy dog</td>
            <td>the quick brown fox jumps over the lazy dog</td>
            <td>the quick brown fox jumps over the lazy dog</td>
          </tr>
        </table>
      </div>

    </li>
    <li>

      <div class="overflow-x">
        <table>
          <tr>
            <td>
              <div>the quick brown fox jumps over the lazy dog</div>
            </td>
            <td>
              <div>the quick brown fox jumps over the lazy dog</div>
            </td>
            <td>
              <div>the quick brown fox jumps over the lazy dog</div>
            </td>
          </tr>
        </table>
      </div>

    </li>
    <li>

      <div class="overflow-x">
        <table>
          <tr>
            <td>the_quick_brown_fox jumps_over_the_lazy_dog</td>
            <td>the_quick_brown_fox jumps_over_the_lazy_dog</td>
            <td>the_quick_brown_fox jumps_over_the_lazy_dog</td>
          </tr>
        </table>
      </div>

    </li>
  </ol>

</div>

最佳答案

试试这个。如果页面上只有一个表,可以简化 JS,但我通过 .each 运行它以确保每个表都是独立管理的。这种渐进的事情显然不是最好的性能明智的,但也许你的方法可以处理。

一个问题是我认为文本的行高必须在这种方法中定义。你已经在你的 CSS 中得到了它,但这使得它成为非可选的,否则你需要以其他方式定义最大高度的像素值,因为这种方法不是试图解析文本的行数正在突破,它只是查看第一行 tr 的高度(如果您使用 <thead><th> ,则可以进行另一种简化。

$('.overflow-x').each(function() {
  var maxHeight = 2*parseInt($(this).find('tr:first td').css('line-height'));
  var initWidth = $(this).width();
  for (i = initWidth; i < 1000; i++) {
    var height = $(this).find('tr:first td').height();
    if (height <= maxHeight) { break; }
    $(this).find('table').width(i + 1);
  }
})
.overflow-x {
  overflow-x: scroll;
}
td {
  padding: 10px;
  border: 1px solid black;
  line-height: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div style="width:300px; background-color:#fde; padding:10px">
  <ol>
    <li>
      <div class="overflow-x">
        <table>
          <tr>
            <td>quick</td>
            <td>brown</td>
            <td>fox</td>
          </tr>
        </table>
      </div>
    </li>
    <li>
      <div class="overflow-x">
        <table>
          <tr>
            <td>the quick brown fox</td>
            <td>jumps over</td>
            <td>the lazy dog</td>
          </tr>
        </table>
      </div>
    </li>
    <li>
      <div class="overflow-x">
        <table>
          <tr>
            <td>the quick brown fox jumps over the lazy dog</td>
            <td>the quick brown fox jumps over the lazy dog</td>
            <td>the quick brown fox jumps over the lazy dog</td>
          </tr>
        </table>
      </div>
    </li>
    <li>
      <div class="overflow-x">
        <table>
          <tr>
            <td>
              <div>
                the quick brown fox jumps over the lazy dog
              </div>
            </td>
            <td>
              <div>
                the quick brown fox jumps over the lazy dog
              </div>
            </td>
            <td>
              <div>
                the quick brown fox jumps over the lazy dog
              </div>
            </td>
          </tr>
        </table>
      </div>
    </li>
    <li>
      <div class="overflow-x">
        <table>
          <tr>
            <td>the_quick_brown_fox jumps_over_the_lazy_dog</td>
            <td>the_quick_brown_fox jumps_over_the_lazy_dog</td>
            <td>the_quick_brown_fox jumps_over_the_lazy_dog</td>
          </tr>
        </table>
      </div>
    </li>
  </ol>
</div>

关于jquery - 表头最大高度,不够横向展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46944067/

相关文章:

javascript - 如何将viewBag数据传递到Javascript并显示在div中

html - 如何像在 facebook 上那样在 div 外部制作带有滚动条的可滚动 DIV?

javascript - 如何在ajax调用时显示加载图像

html - 我可以在不同的行中使用一个 Bootstrap 列宽(不等于 12)吗?

html - 请求 uri 中的字体文件 url

javascript - 如何使用按键绑定(bind)和选定的文本建立链接

jquery - jQuery 选择器有什么区别?

javascript - 使用ajax每秒钟刷新一次div并使用现有div显示新div

javascript - Angularjs 单击会触发 2 次?

css - 响应式地排列两个元素