Table débordant en dehors de div


94

J'essaie d'empêcher une table dont la largeur est explicitement déclarée de déborder en dehors de son parent div. Je suppose que je peux faire cela d'une certaine manière en utilisant max-width, mais je n'arrive pas à faire fonctionner cela.

Le code suivant (avec une très petite fenêtre) provoquera ceci:

<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 ligne rouge est la bordure droite du div, et si vous réduisez la fenêtre de votre navigateur, vous verrez que le tableau ne rentre pas dedans.


2
Hors sujet: ne pas utiliser <center>. Il est obsolète depuis des années. D'ailleurs, vous en avez déjà un align="center"sur votre table.
ЯegDwight

C'est malheureusement quelque chose sur lequel je n'ai aucun contrôle. Le contenu à l'intérieur du div est en fait inclus à partir d'un fichier qui n'est pas généré par moi. Je ne peux toucher que le CSS, mais j'éliminerais le <center> si je le pouvais.
waiwai933

Réponses:


24

Retournez-le en faisant:

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

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

Je vous conseille également de:

  • Ne pas utiliser la centerbalise (elle est obsolète)
  • Ne pas utiliser width, les bgcolorattributs, les définir en CSS ( widthet background-color)

(en supposant que vous puissiez contrôler la table qui a été rendue)


Si je fais une largeur: 100%, il ignore ma marge: à droite. qui provoque un défilement horizontal de la barre
Jesse

208

Vous pouvez empêcher les tables de s'étendre au-delà de leur div parent en utilisant table-layout:fixed.

Le CSS ci-dessous fera étendre vos tableaux à la largeur du div qui l'entoure.

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

J'ai trouvé cette astuce ici .


63
Cela force toutes les colonnes à avoir la même largeur ... pas très utile
Serj Sagan

11
En fait, vous pouvez toujours créer des colonnes de largeurs différentes, il vous suffit de spécifier les largeurs en <col>s ou sur les s de la première ligne <td>(plutôt que de la laisser couler en fonction de la taille du texte). De MDN: "fixe: les largeurs de tableau et de colonne sont définies par la largeur des éléments de table et de colonne ou par la largeur de la première ligne de cellules. Les cellules des lignes suivantes n'affectent pas la largeur des colonnes."
philfreo

1
Merci beaucoup. Ce fut une grande aide que vous avez fait pour moi ...
Parthan_akon

67

Une solution rudimentaire consiste à définir display: tablele div contenant.


8
C'est génial, exactement ce que je recherchais. Pour aider les autres, voici quelques chaînes googlables: j'essayais d'utiliser CSS pour adapter le div parent au débordement, ou adapter un arrière-plan pour couvrir le contenu de table débordant. Cela a parfaitement fonctionné, merci beaucoup!
trisweb

Juste un addendum, veuillez faire attention au contexte dans lequel cela est appliqué, cela est utilisé pour donner une mise en page de tableau comme un comportement et donc la présence d'autres attributs de style comme table-row, table-cell. Les mises en page tabulaires ne sont pas flottantes. Au moment de l'affichage: la propriété de la table seule n'est pas suffisante
Questzen

Également venu ici après des heures de recherche de réponse. Chaînes pour le moteur de recherche: Le tableau à l'intérieur de div ne défile pas, Firefox. Div avec table ne défile pas, Firefox. Aucune barre de défilement n'apparaissant dans le tableau d'un div.
anevaude

2
J'ai essayé quelques choses mais j'ajoute simplement display: table au div parent supérieur. Le problème a été résolu, merci.
Günay Gültekin

Meilleure solution pour les tableaux avec de longs noms d'en-tête et un long contenu de cellule. Merci!.
Ege Bayrak

34

J'ai essayé toutes les solutions mentionnées ci-dessus, puis je n'ai pas fonctionné. J'ai 3 tableaux l'un en dessous de l'autre. Le dernier a débordé. Je l'ai corrigé en utilisant:

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

Pour IE11 en mode Edge, vous devez le définir sur word-break:break-all


12

Au début, j'ai utilisé la méthode de James Lawruk. Cela a cependant changé toutes les largeurs des td's.

La solution pour moi était d'utiliser white-space: normalsur les colonnes (qui était réglé sur white-space: nowrap). De cette façon, le texte se cassera toujours. L'utilisation word-wrap: break-wordgarantira que tout se cassera en cas de besoin, même à mi-chemin d'un mot.

Le CSS ressemblera alors à ceci:

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

Ce n'est peut-être pas toujours la solution souhaitable, car cela word-wrap: break-wordpourrait rendre vos mots dans le tableau illisibles. Cela gardera cependant votre table à la bonne largeur.


5

J'ai essayé presque tout ce qui précède mais cela n'a pas fonctionné pour moi ...

word-break: break-all;

Ceci à ajouter sur le div parent (conteneur de la table.)


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

Appliquez le style ci-dessus à la division parent.


-3

Il y a un width="400"sur la table, retirez-le et cela fonctionnera ...

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.