La tabla se desborda fuera de div

94

Estoy tratando de evitar que una tabla que tiene un ancho declarado explícitamente se desborde 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.

El siguiente código (con una ventana muy pequeña) provocará 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 del div, y si hace que la ventana de su navegador sea pequeña, verá que la tabla no encaja en ella.

waiwai933
fuente
2
Fuera de tema: no lo use <center>. Ha estado en desuso durante años. Además, ya tienes una align="center"en tu mesa.
ЯegDwight
Desafortunadamente, esto es algo de lo que no tengo control. El contenido dentro del div en realidad se incluye desde un archivo que no genero yo. Solo puedo tocar el CSS, pero eliminaría el <center> si pudiera.
waiwai933

Respuestas:

24

Dale 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 te aconsejaría que:

  • No use la centeretiqueta (está obsoleta)
  • No use width, bgcoloratributos, configúrelos por CSS ( widthy background-color)

(asumiendo que puede controlar la tabla que fue renderizada)

Zyphrax
fuente
Si hago un ancho: 100%, ignora mi margen: derecho. que causa el desplazamiento de la barra horizontal
Jesse
208

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

El CSS a continuación hará que sus tablas se expandan al ancho del div que lo rodea.

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

Encontré este truco aquí .

James Lawruk
fuente
63
Esto obliga a todas las columnas a tener el mismo ancho ... no muy útil
Serj Sagan
11
En realidad, todavía puede hacer que las columnas tengan diferentes anchos, solo tiene que especificar anchos en so en <col>la primera fila <td>(en lugar de dejar que fluya según el tamaño del texto). De MDN: "fijo: los anchos de tabla y columna se establecen por el ancho de los elementos de tabla y columna o por el ancho de la primera fila de celdas. Las celdas en filas subsiguientes no afectan el ancho de columna".
philfreo
1
Muchas gracias. Esta fue una gran ayuda que me has hecho ...
Parthan_akon
67

Una burda solución es establecer display: tableel div contenedor.

questzen
fuente
8
Esto es brillante, exactamente lo que estaba buscando. Para ayudar a otros, aquí hay algunas cadenas que se pueden googlear: estaba tratando de usar CSS para ajustar el div principal al desbordamiento, o ajustar un fondo para cubrir el contenido de la tabla desbordante. Esto funcionó perfectamente, ¡muchas gracias!
trisweb
Solo un apéndice, preste atención al contexto en el que se aplica esto, esto se usa para impartir un comportamiento similar al diseño de la tabla y, por lo tanto, la presencia de otros atributos de estilo como tabla-fila, tabla-celda. Los diseños tabulares no son flotantes. A la hora de la pantalla: propiedad de tabla por sí sola no es suficiente
questzen
También vine aquí después de horas de buscar una respuesta. Cadenas para el motor de búsqueda: la tabla dentro de div no se desplaza, firefox. Div con tabla no se desplaza, firefox. No aparecen barras de desplazamiento en la tabla dentro de un div.
anevaude
2
He intentado algunas cosas, pero solo agrego display: table al div principal superior. El problema se solucionó, gracias.
Günay Gültekin
La mejor solución para las tablas con nombres de encabezado largos y contenido de celda largo. ¡Gracias!.
Ege Bayrak
34

Probé todas las soluciones mencionadas anteriormente, luego no funcionó. Tengo 3 tablas una debajo de la otra. El último se desbordó. Lo arreglé usando:

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

Para IE11 en modo de borde, debe configurarlo en word-break:break-all

Sr. Doomsbuster
fuente
12

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

La solución para mí fue usar white-space: normalen las columnas (que estaba configurado en white-space: nowrap). De esta forma el texto siempre se romperá. El uso word-wrap: break-wordasegurará 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;
}

Es posible que esta no sea siempre la solución deseable, ya que word-wrap: break-wordpodría hacer que sus palabras en la tabla sean ilegibles. Sin embargo, mantendrá su mesa con el ancho correcto.

Sander Koedood
fuente
5

Probé casi todo lo anterior pero no funcionó para mí ... Lo siguiente sí

word-break: break-all;

Esto se agregará en el div principal (contenedor de la tabla).

Waheed Asghar
fuente
1
overflow-x: auto;
overflow-y : hidden;

Aplica el estilo de arriba al div padre.

Christian Heath
fuente
-3

Hay un width="400"sobre la mesa, quítalo y funcionará ...

valle
fuente