【问题标题】:Table inside a div - contents of td causes horizontal overflow. How can I constrain the width?div 内的表 - td 的内容导致水平溢出。如何限制宽度?
【发布时间】:2017-08-13 16:20:28
【问题描述】:

http://jsfiddle.net/HeMKY/8/

HTML

<div id="wrapper">
    <table>
        <tr>
            <td class="left">left</td>
            <td class="right"><span>this text is right-floated</span></td>
        </tr>
        <tr>
            <td class="left">left</td>
            <td class="right"><img src="foo.gif" height="100" width="400" /></td>
        </tr>
        <tr>
            <td class="left">left</td>
            <td class="right">THISTEXTISWAYTOOLONGTHISTEXTISWAYTOOLONGTHISTEXTISWAYTOOLONG</td>
        </tr>
    </table>
</div>

CSS

#wrapper
{
    max-width:300px;
    height:300px;
    background-color:gray;
    padding:5px;
}
td
{
    padding:5px;
}
td.left
{
    background-color:yellow;
}
td.right
{
    background-color:green;
}
td.right span
{
    float:right;
}

结果

我想要什么

请注意图像和文本如何导致溢出。此外,一些自然适合的内容是右浮动的,所以我不能只做overflow:hidden,否则自然适合的内容也会被隐藏。我还需要启用.left 来拉伸以适应其内容,即那里的内容的宽度范围可以为 10-150 像素,我希望该列不超过其最宽的内容。据我所知,没有表格这是不可能的,所以我使用表格而不是 table-layout:fixed 或 CSS 网格框架。

我希望 tabletr 上的 width:100%max-width:100%; 组合可以解决问题,但我无法让它发挥作用。

【问题讨论】:

  • 也许在您想要 300 像素的表格中没有 400 像素的图像会有所帮助?
  • 根据以下回复,我认为如果您告诉我们您需要支持哪些浏览器和版本会有所帮助。
  • IE7+、FF 3.5+、Chrome、Safari 4+、移动 safari、android 2.1+ 股票浏览器和 WP7 (IE7-ish)

标签: css html-table overflow clipping


【解决方案1】:

您可以将word-break:break-all; 添加到您的td。但是,您的图像仍然存在问题。您希望图像会发生什么?您不能包装图像,因此它需要被隐藏或更小。我认为没有解决方法。

在得知 FF 不支持此功能后,我想我在心里知道我做了一些更多的研究。从我发现你做不到。您可以使用两种技巧。

第一个是使用quirksmode 讨论的标签。缺点是它并非在所有地方都受支持。

另一种是插入一个空格字符,即extremely narrow。这为表格单元格提供了一些可以打破的东西。希望其他人能想出一个更好的、符合标准的答案,但我找不到。

【讨论】:

  • 经过一番研究后更新了我的答案。赞成您的问题,希望能得到更好的答案。
【解决方案2】:

我建议你试试 table-layout: fixed as shown here(适用于 ie6+、firefox 和 chrome)

结合为左列定义width: 40px(或其他)并在右列设置overflow-x: hidden,您应该可以达到预期的效果。

【讨论】:

  • 我也试过了,但我需要支持的浏览器不完全支持table-layout:fixed
  • 感谢您再次查看。我在另一条评论中提到我需要.left 来拉伸以适应其内容,无论是 15 像素还是 150 像素。我不想在该列上设置固定宽度。据我所知,没有桌子这是不可能的
【解决方案3】:

看看你想做什么,而不是使用table,考虑使用蓝图的网格。

This page 展示了它可以做什么,这一切都通过简单地在您的 html 文档中导入他们的grid.css 文件并添加一些具有特定类名的 div 来实现。

你可以下载蓝图here然后阅读h3。在下载的TUTORIAL.textile中创建一个网格段落。

【讨论】:

  • 我考虑过使用 css 框架,但不幸的是它不能满足我的需求。主要是,我需要.left 拉伸以适应其内容,无论是 15 像素还是 150 像素。据我所知,如果没有表格,这是不可能的(或者至少,旧浏览器不支持)
猜你喜欢
  • 2022-01-18
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多