表在div之外溢出


94

我试图阻止一个表,该表的宽度已显式声明,而不是从其父外部溢出div。我想我可以使用进行某种方式的操作max-width,但是似乎无法正常工作。

以下代码(窗口很小)将导致此:

<style type="text/css">
  #middlecol {
    width: 45%;
    border-right:2px solid red;
  }
  #middlecol table {
    max-width:100% !important;
  }
</style>

<div id="middlecol">
  <center>
    <table width="400" cellpadding="3" cellspacing="0" border="0" align="center">
      <tr>
        <td bgcolor="#DDFFFF" align="center" colspan="2">
          <strong>Notification!</strong>
        </td>
      <tr>
        <td width="50">
          <img src="http://www.example.com/img.png" width="50" height="50" alt="" border="0">
        </td>
        <td>
          Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
        </td>
      </tr>
    </table>
  </center>
 </div>

红线是的右边框div,如果将浏览器窗口缩小,则会发现该表不适合该表。


2
离题:请勿使用<center>。已弃用多年。此外,您已经align="center"在桌子上了。
ЯegDwight

不幸的是,这是我无法控制的。div内的内容实际上是由我未生成的文件包含的。我只能触摸CSS,但如果可以的话,我将取消<center>。
waiwai933 2010年

Answers:


24

通过执行以下操作来扭转它:

<style type="text/css">
  #middlecol {
    border-right: 2px solid red;
    width: 45%;
  }

  #middlecol table {
    max-width: 400px;
    width: 100% !important;
  }
</style>

我也建议您:

  • 不使用center标签(已弃用)
  • 不要使用widthbgcolor属性,而是通过CSS(widthbackground-color)进行设置

(假设您可以控制呈现的表)


如果我将宽度设为100%,则会忽略我的margin:right。这会导致水平滚动条
Jesse

208

您可以使用阻止表扩展到其父div之外table-layout:fixed

下面的CSS将使您的表格扩展到其周围的div宽度。

table 
{
    table-layout:fixed;
    width:100%;
}

我在这里找到了这个技巧。


63
这迫使所有列都具有相同的宽度...不是很有用
Serj Sagan

11
实际上,您仍然可以使列的宽度不同,只需要在<col>s或第一行的<td>s 上指定宽度即可(相对于让其根据文本大小流动)。在MDN中:“已修复:表和列的宽度由表和col元素的宽度或第一行单元格的宽度设置。后续行中的单元格不影响列的宽度。”
philfreo 2014年

1
非常感谢。这是您为我所做的巨大帮助...
Parthan_akon

67

粗略的解决方法是display: table在包含div上进行设置。


8
这真是太好了,正是我想要的。为了帮助其他人,这里提供了一些可搜索的字符串:我试图使用CSS来使父div溢出,或者使背景适合以覆盖溢出的表内容。非常有效,非常感谢!
trisweb 2012年

只是一个附录,请注意应用该上下文的上下文,该上下文用于赋予表布局类似的行为,并因此赋予其他样式属性,例如表行,表单元格。表格布局不会浮动。在时间上,仅display:table属性还不够
质疑2012年

经过数小时的寻找答案,也来到了这里。搜索引擎的字符串:Firefox中的div内的表不会滚动。带表的Div不会滚动,Firefox。div中没有​​表格显示滚动条。
2015年

2
我已经尝试了一些方法,但是我只是将display:table添加到顶级父div中。问题解决了,谢谢。
居纳伊居尔泰金

具有长标题名称和长单元格内容的表的最佳解决方案。谢谢!。
Ege Bayrak

34

我尝试了上述所有解决方案,但是没有用。我下面有3张桌子。最后一个溢出了。我使用以下方法修复了它:

/* Grid Definition */
table {
    word-break: break-word;
}

对于处于边缘模式的IE11,您需要将此设置为 word-break:break-all


12

最初,我使用James Lawruk的方法。但是,这改变了的所有宽度td

对我来说,解决方案是white-space: normal在列(设置为white-space: nowrap)上使用。这样,文本将始终中断。使用word-wrap: break-word将确保一切都将在需要时中断,即使只是一个单词的一半。

然后,CSS将如下所示:

td, th {
    white-space: normal; /* Only needed when it's set differntly somewhere else */
    word-wrap: break-word;
}

这可能并不总是理想的解决方案,因为word-wrap: break-word这会使表中的单词变得难以辨认。但是,它将使您的桌子保持正确的宽度。




-3

width="400"桌子上有一个,将其移开即可使用...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.