2010-02-13 32 views
63

Estoy tratando de detener una tabla que tiene ancho declaradamente declarado no desbordamiento fuera de su padre div. Supongo que puedo hacer esto de alguna manera usando max-width, pero parece que no puedo hacer que esto funcione.Desbordamiento de tabla fuera de Div

El siguiente código (con una ventana muy pequeña) causará esto:

<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> 

La línea roja es el borde derecho de la div, y si usted hace su pequeña ventana del navegador, verá que la mesa no encaja en ella

+2

fuera de tema: no usar ''

. Ha estado en desuso por años. Además, ya tienes un 'align =" center "' en tu mesa. –

+0

Esto es desafortunadamente algo de lo que no tengo control. El contenido dentro del div se incluye de hecho en un archivo que no he generado. Solo puedo tocar el CSS, pero eliminaría el

si pudiera. – waiwai933

Respuesta

15

darle la vuelta haciendo:

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

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

También le aconsejo a:

  • No usar la etiqueta center (que está en desuso)
  • No utilice width, bgcolor atributos , configúrelos por CSS (width y background-color)

(suponiendo que se puede controlar la tabla que se rindió)

+0

Si hago ancho: 100% ignora mi margen: a la derecha. lo que causa que la barra horizontal se desplace – Jesse

-2

Hay una width="400" sobre la mesa, y eliminar y funcionará ...

48

Una obra crudo alrededor es establecer display: table en el div que contiene .

+6

Esto es brillante, exactamente lo que estaba buscando. Para ayudar a otros aquí hay algunas cadenas de googleable: estaba tratando de usar CSS para encajar el div principal para desbordar, o ajustar un fondo para cubrir el contenido desbordante de la tabla. Esto funcionó perfectamente, ¡muchas gracias! – trisweb

+0

Solo una adición, preste atención al contexto donde se aplica esto, esto se usa para impartir un diseño de tabla como el comportamiento y, por lo tanto, la presencia de otros atributos de estilo como tabla-fila, tabla-celda. Los diseños tabulares no flotan. En el momento en que la pantalla: la propiedad de la tabla por sí sola no es suficiente – questzen

+0

También llegó aquí después de horas de excavación para responder. Cadenas para el motor de búsqueda: La tabla dentro de div no se desplazará, Firefox. div con tabla no se desplazará, firefox. Sin barras de desplazamiento que aparecen en la tabla dentro de un div. – user2038085

147

Puede impedir que las tablas se expandan más allá de su div principal utilizando table-layout:fixed.

El siguiente CSS hará que sus tablas se expandan al ancho del div que lo rodea.

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

He encontrado este truco here.

+44

Esto obliga a todas las columnas a tener el mismo ancho ... no es muy útil –

+8

En realidad, puede hacer que las columnas tengan diferentes anchuras, solo tiene que especificar anchuras en ''s o en la primera fila de' 's (contra dejarlo fluir basado en el tamaño del texto). Desde MDN: "fijo: los anchos de tabla y columna se establecen por el ancho de la tabla y los elementos col o por el ancho de la primera fila de celdas. Las celdas en las filas posteriores no afectan el ancho de las columnas". – philfreo

+1

@philfreo Me salvaste de una tonelada de problemas. ¡Gracias! – Daria

9

Al principio usé el método de James Lawruk. Sin embargo, esto cambió todos los anchos de td.

La solución para mí fue utilizar white-space: normal en las columnas (que se estableció en white-space: nowrap). De esta manera, el texto siempre se romperá. El uso de word-wrap: break-word asegurará que todo se rompa cuando sea necesario, incluso a la mitad de una palabra.

El CSS se verá así entonces:

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

esto podría no ser siempre la solución deseable, ya que word-wrap: break-word podría hacer que sus palabras en la tabla ilegible. Sin embargo mantendrá su mesa con el ancho correcto.

+0

Ayudó mucho. Ninguna de las soluciones anteriores funcionó –

14

Probé todas las soluciones mencionadas anteriormente, y luego no funcionó. Tengo 3 tablas una debajo de la otra. El último fluyó.Me fijo usando:

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

Para EI11 en el modo de borde, es necesario establecer esto en word-break:break-all

+0

eso es un buen css que no sabía sobre –

0

Probé casi todos los anteriores, pero no funcionó para mí ... La siguiente hizo

word-break: break-all; 

Este que se añade en el div padre (contenedor de la mesa.)

Cuestiones relacionadas