100% 宽度表溢出的 div 容器

我有一个 HTML 表,溢出它的父容器的问题。

.page {
width: 280px;
border:solid 1px blue;
}


.my-table {
word-wrap: break-word;
}


.my-table td {
border:solid 1px #333;
}
<div class="page">
<table class="my-table">
<tr>
<th>Header Text</th>
<th>Col 1</th>
<th>Col 2</th>
<th>Col 3</th>
<th>Col 4</th>
<th>Header Text</th>
</tr>
<tr>
<td>An archipelago is a chain or cluster of islands. The word archipelago is derived from the Greek ἄρχι- – arkhi and πέλαγος – pélagosthrough the Italian arcipelago. In Italian, possibly following a tradition of antiquity, the Arcipelago (from medieval Greek *ἀρχιπέλαγος) was the proper name for the Aegean Sea and, later, usage shifted to refer to the Aegean Islands (since the sea is remarkable for its large number of islands). It is now used to refer to any island group or, sometimes, to a sea containing a large number of scattered islands such as the Aegean Sea.[1]</td>
<td>some data</td>
<td>some data</td>
<td>some data</td>
<td>some data</td>
<td>An archipelago is a chain or cluster of islands. The word archipelago is derived from the Greek ἄρχι- – arkhi and πέλαγος – pélagosthrough the Italian arcipelago. In Italian, possibly following a tradition of antiquity, the Arcipelago (from medieval Greek *ἀρχιπέλαγος) was the proper name for the Aegean Sea and, later, usage shifted to refer to the Aegean Islands (since the sea is remarkable for its large number of islands). It is now used to refer to any island group or, sometimes, to a sea containing a large number of scattered islands such as the Aegean Sea.[1]</td>
</tr>
</table>
</div>

如何强制标题文本和表单元格文本以适合其容器的方式换行?我更喜欢仅使用 CSS 的方法,但是如果绝对必要的话,我也愿意使用 Javascript (或 jQuery)。

195656 次浏览

display: block;overflow: auto;添加到 .my-table。这将简单地切断任何超过您强制执行的 280px限制。因为像 pélagosthrough这样的词比 280px要宽,所以没有办法使它看起来“漂亮”。

从纯粹的“让它适合 div”角度出发,将以下内容添加到表类(Jsfiddle) :

table-layout: fixed;
width: 100%;

根据需要设置列宽; 否则,固定布局算法将在各列之间均匀分布表宽。

为了便于参考,下面是表格布局算法,重点是我的:

  • 固定(来源)
    使用这种(快速)算法,表 < b > 的水平布局不依赖于单元格的内容 ; 它只依赖于表的宽度、列的宽度以及边框或单元格间距。
  • 自动(来源)
    在这个算法中(通常不需要两次以上的传递) ,表的宽度由其列的宽度 < b > [ ,由内容决定] (以及中间的 < a href = “ https://www.w3.org/TR/CSS2/tables.html # orders”rel = “ noReferrer”> orders )。< br > < br > [ ... ]此算法可能效率低下,因为它要求用户代理在确定最终布局之前访问表中的所有内容,并且可能需要一次以上的传递。

点击源文档查看每个算法的详细信息。

嗯,考虑到您的限制,我认为在 .page div 上设置 overflow: scroll;可能是您唯一的选择。280像素是相当狭窄的,并考虑到你的字体大小,单独的文字包装不会做到这一点。有些词太长,无法包装。你可以大幅度减小字体大小,也可以使用溢出: 滚动。

加一下

word-break: break-all

到表元素上的 CSS。

这将使表单元格中的单词中断,使表不会比包含它的 div 更宽,但表列仍然是动态调整大小的。Jsfiddle 演示.

尝试向 td中添加:

display: -webkit-box; // to make td as block
word-break: break-word; // to make content justify

溢出的 tds 将与新行对齐。

将您的 CSS 更新为以下内容: 这将修复

.page {
width: 280px;
border:solid 1px blue;
overflow-x: auto;
}