2008-09-26 9 views
29

Espero que alguien pueda ayudarme aquí. Intenté simplificar mi ejemplo lo mejor que puedo.DIV con desbordamiento: automático y una tabla 100% amplia

Tengo una DIV completamente posicionada, que para este ejemplo he hecho llenar la ventana del navegador. Este div tiene el atributo overflow: auto para proporcionar barras de desplazamiento cuando el contenido es demasiado grande para que aparezca el DIV.

Dentro del DIV tengo una tabla para presentar algunos datos, y su ancho es del 100%.

Cuando el contenido se vuelve demasiado grande verticalmente, espero que la barra de desplazamiento vertical aparezca y la tabla se contraiga horizontalmente ligeramente para acomodar la barra de desplazamiento. Sin embargo, en IE7, lo que sucede es que también aparece la barra de desplazamiento horizontal, a pesar de que todavía hay suficiente espacio horizontalmente para todo el contenido en el div.

Esto es específico de IE - Firefox funciona perfectamente.

Fuente completa a continuación. Cualquier ayuda muy apreciada.

, Tony

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Table sizing bug?</title> 
    <style> 
     #maxsize 
     { 
      position: absolute; 
      left: 5px; 
      right: 5px; 
      top: 5px; 
      bottom: 5px; 
      border: 5px solid silver; 
      overflow: auto; 
     } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div id="maxsize"> 
     <p>This will be fine until such time as the vertical size forces a 
      vertical scroll bar. At this point I'd expect the table to re-size 
      to now take into account of the new vertical scroll bar. Instead, 
      IE7 keeps the table the full size and introduces a horizontal 
      scroll bar. 
     </p> 
     <table width="100%" cellspacing="0" cellpadding="0" border="1"> 
     <tbody> 
      <tr> 
       <td>A</td> 
       <td>B</td> 
       <td>C</td> 
       <td>D</td> 
       <td>E</td> 
       <td>F</td> 
       <td>G</td> 
       <td>H</td> 
       <td>I</td> 
       <td>J</td> 
       <td>K</td> 
       <td>L</td> 
       <td>M</td> 
       <td>N</td> 
       <td>O</td> 
       <td>P</td> 
       <td>Q</td> 
       <td>R</td> 
      </tr> 
     </tbody> 
     </table> 

     <p>Resize the browser window vertically so this content doesn't 
      fit any more</p> 
     <p>Hello</p><p>Hello</p><p>Hello</p><p>Hello</p><p>Hello</p> 
     <p>Hello</p><p>Hello</p><p>Hello</p><p>Hello</p><p>Hello</p> 
    </div> 
    </form> 
</body> 
</html> 

añadió 03/16/10 ... pensé que podría ser interesante señalar que los puntos de código fuente de GWT a esta pregunta en un comentario ... http://www.google.com/codesearch/p?hl=en#MTQ26449crI/com/google/gwt/user/client/ui/ScrollPanel.java&q=%22hack%20to%20account%20for%20the%22%20scrollpanel&sa=N&cd=1&ct=rc&l=48

Respuesta

0

Esto parece que debería solucionar su problema, siempre y cuando no esté en condiciones de condicionar declaraciones. Fixing IE overflow

5

Cambio:

overflow: auto; 

a:

overflow-y:hidden; 
overflow-x:auto; 
+1

Este método suprime las barras de desplazamiento horizontales, pero no vuelve a dibujar el ancho de la tabla interna. Entonces, cuando se muestran las barras de desplazamiento verticales, el borde de la tabla interna se corta. Esto puede o no ser aceptable en su diseño. –

0

Por desgracia, esto es un capricho de la IE. No hay forma de usar XHTML puro y CSS para que funcione igual que Firefox.

Puede hacerlo usando JavaScript para detectar el tamaño de la ventana y establecer el ancho de la tabla dinámicamente. Puedo agregar más detalles sobre eso si realmente quieres seguir esa ruta.

5

Bien, este me ha molestado por MUCHO tiempo. He hecho demasiados diseños que tienen un relleno extra a la derecha, lo que permite que los IEs ignoren por completo su propia barra de desplazamiento.

La respuesta es: anidar dos divs, darles ambos hasLayout, configurar el interno para que se desborde.

<!-- zoom: 1 is a proprietary IE property. It doesn't really do anything here, except give hasLayout --> 

<div style="zoom: 1;"> 
    <div style="zoom: 1; overflow: auto"> 
     <table style="width: 100%"... 
     ... 
     </table> 
    </div> 
</div> 

http://www.satzansatz.de/cssd/onhavinglayout.html
Ir allí para leer más acerca de tener la disposición

+0

No creo que importe qué div tiene el conjunto de desbordamiento. – CaffGeek

+0

@Chad: ¿podría proporcionar un violín que muestre que esto funciona con el desbordamiento establecido en el div interno? Porque eso es lo que necesito, mientras que solo puedo hacer que funcione al revés. – raphinesse

33

que tenía un problema con la barra de horizonte excesiva en IE7.He usado levemente solución de D Carter cambió

<div style="zoom: 1; overflow: auto;"> 
    <div id="myDiv" style="zoom: 1;"> 
     <table style="width: 100%"... 
     ... 
     </table> 
    </div> 
</div> 

Para trabajar en el navegador Internet Explorer menor que 7 debe añadir:

<!--[if lt IE 7]><style> #myDiv { overflow: auto; } </style><![endif]--> 
+0

Esto funciona para mí. Tengo una altura máxima en el div externo. –

+0

hey, GWT usa esta respuesta y la señala en su código fuente. :) http://www.google.com/codesearch/p?hl=en#MTQ26449crI/com/google/gwt/user/client/ui/ScrollPanel.java&q=%22hack%20to%20account%20for%20the%22 % 20scrollpanel & sa = N & cd = 1 & ct = rc & l = 48 – Epaga

+0

@Epaga. Gracias. Es bueno saber :) – cetnar

8
solución de

Eran Galperin no tiene en cuenta el hecho de que sólo apagar el desplazamiento horizontal aún permitirá que la tabla se una debajo de la barra de desplazamiento vertical. Supongo que esto se debe a que IE está calculando el significado de "100%" antes de decidir que necesita una barra de desplazamiento vertical, y luego no puede reajustarse para el espacio horizontal restante disponible. solución

de Cetnar por encima de lo clava, sin embargo:

<div style="zoom: 1; overflow: auto;"> 
    <div id="myDiv" style="zoom: 1;"> 
     <table style="width: 100%"> 
     ... 
     </table> 
    </div> 
</div> 

Esto funciona correctamente en IE6 y 7 en mis pruebas. Por lo que puedo decir, el "" hack no parece ser realmente necesario en IE6.

+11

Para aclararle a cualquiera que tenga la mala suerte de estar viendo esto en 2012 (o más adelante): La clave es tener su tabla 100% de ancho envuelta en un elemento con hasLayout (por ejemplo, un #myDiv en el ejemplo de Joel, un div con zoom: 1 para activar hasLayout) DENTRO del elemento de desplazamiento con desbordamiento: automático. Esto hace que IE vuelva a dibujar el ancho de la tabla DESPUÉS de tener en cuenta el ancho de la barra de desplazamiento vertical. –

1

Si es la etiqueta del cuerpo que insiste en tener el desplazamiento horizontal (supongo que porque tengo elementos secundarios configurados al 100%) puede agregar esto a su CSS para solucionar el problema en IE7 (u 8 modo de compatibilidad):

html{overflow-x:hidden;} 
Cuestiones relacionadas