2008-08-11 102 views
52

我有一个元素可能包含非常大量的数据,但我不希望它破坏页面布局,所以我设置max-height: 100pxoverflow:auto,希望滚动条出现时内容不适合。IE8溢出:自动与最大高度

它在Firefox和IE7中都可以正常工作,但是IE8的行为好像存在overflow:hidden而不是overflow:auto

我试过overflow:scroll,仍然没有帮助,IE8只是截断内容而不显示滚动条。更改max-height声明到height使溢出工作正常,这是max-heightoverflow:auto的组合破坏的东西。

这也记录为official bug in the final, release version of IE8

有没有解决办法?现在我使用height而不是max-height,但它留下了大量的空白空间,以防数据不多。

+1

注意:这在IE9(至少在RC)中显示为固定 – 2011-02-11 08:35:46

+4

只是后面发现这个问题的ppl的一个注释,我已经看到在IE8中设置最大高度和溢出在一个div崩溃整个页面 - 作为在页面中保持完全空白,但显示页面标题。有趣的乐趣... – James 2011-07-19 09:33:19

回答

71

这是一个非常讨厌的错误,因为它影响着我们大量的堆栈溢出与<pre>代码块,其中有max-height:600width:auto

它被记录为IE8最终版本中的错误,无法修复。

http://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=408759

有一个非常,非常哈克CSS解决方法:

http://my.opera.com/dbloom/blog/2009/03/11/css-hack-for-ie8-standards-mode

/* 
SUPER nasty IE8 hack to deal with this bug 
*/ 
pre 
{ 
    max-height: none\9 
} 

,当然有条件的CSS如其他人所说的,但我不喜欢的是,因为这意味着你”在每个页面请求中重新提供额外的HTML cruft。

3

我看到这记录为RC1中的一个固定的错误。但是我发现了一个似乎会导致硬性渲染失败的变体。在嵌套表格中涉及这两种样式。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <title>Test</title> 
    <style type="text/css"> 
    .calendarBody 
    { 
     overflow: scroll; 
     max-height: 500px; 
    } 
    </style> 
</head> 
<body> 
    <table> 
    <tbody> 
     <tr> 
     <td> 
      This is a cell in the outer table. 
     <div class="calendarBody"> 
      <table> 
       <tbody> 
       <tr> 
        <td> 
        This is a cell in the inner table. 
       </td> 
        </tr> 
      </tbody> 
       </table> 
     </div> 
     </td> 
    </tr> 
    </tbody> 
</table> 
</body> 
</html> 
1

重现:

(这崩溃的整个页面。)

<HTML> 
<HEAD> 
    <META content="IE=8" http-equiv="X-UA-Compatible"/> 
</HEAD> 

<BODY> 
    look: 

    <TABLE width="100%"> 
     <TR> 
      <TD> 
       <TABLE width="100%"> 
        <TR> 
         <TD> 
          <DIV style="overflow-y: scroll; max-height: 100px;"> 
           X 
          </DIV> 
         </TD> 
        </TR> 
       </TABLE> 
      </TD> 
     </TR> 
    </TABLE> 
</BODY> 
</HTML> 

(虽然这工作得很好......)

<HTML> 
<HEAD> 
    <META content="IE=8" http-equiv="X-UA-Compatible"/> 
</HEAD> 

<BODY> 
    look: 

    <TABLE width="100%"> 
     <TR> 
      <TD> 
       <TABLE width="100%"> 
        <TR> 
         <TD> 
          <DIV style="overflow-y: scroll; max-height: 100px;"> 
           The quick brown fox 
          </DIV> 
         </TD> 
        </TR> 
       </TABLE> 
      </TD> 
     </TR> 
    </TABLE> 
</BODY> 
</HTML> 

(而且,疯狂,那么,这是否。[无div中的内容。])

<HTML> 
<HEAD> 
    <META content="IE=8" http-equiv="X-UA-Compatible"/> 
</HEAD> 

<BODY> 
    look: 

    <TABLE width="100%"> 
     <TR> 
      <TD> 
       <TABLE width="100%"> 
        <TR> 
         <TD> 
          <DIV style="overflow-y: scroll; max-height: 100px;"> 
          </DIV> 
         </TD> 
        </TR> 
       </TABLE> 
      </TD> 
     </TR> 
    </TABLE> 
</BODY> 
</HTML> 
4
{ 
overflow:auto 
} 

尝试的div溢出:汽车

2
{max-height:200px, Overflow:auto} 

感谢SRINIVAS玉田,上面的代码所做的工作对我来说。

1

类似的情况,由js设置maxHeight以适应分配空间的pre元素,宽度100%,溢出自动。如果内容比maxHeight短,并且水平放置,我们就很好。如果调整窗口大小以使内容不再水平放置,将出现一个水平滚动条,但元素的高度会立即跳转到完整的maxHeight,而不管内容的高度如何。

试过了杰夫提到的各种形式的CSS黑客,但没有发现任何类似的东西,这不是一个JS错误的参数错误。

我能找到的最好的选择是为ie8选择毒性:或者降低maxHeight限制,因此元素可以是任何高度(最适合我的情况),或者设置高度而不是maxHeight,所以它总是那么高,即使内容本身要短得多。非常不理想。 ie9中失去了行为。

1

仅设置最大高度,不设置溢出。这样,如果内容大于最大高度,它将显示滚动条,如果内容小于最大高度,则会缩小。

0

我发现这一点: https://perishablepress.com/maximum-and-minimum-height-and-width-in-internet-explorer/

该方法已在IE6得到了验证,并且应在IE5工作。只需更改值以满足您的需求(代码注释了注释)。在这个例子中,我们在333px 1 IE设置的最大高度,所有符合标准的浏览器:

* html div#division { height: expression(this.scrollHeight > 332 ? "333px" : "auto"); /* sets max-height for IE */ }

,这对我的作品完美,所以我决定分享。