Tisch läuft über außerhalb von div

93

Ich versuche zu verhindern, dass eine Tabelle, deren Breite explizit deklariert wurde, außerhalb ihres übergeordneten Elements überläuft div. Ich nehme an, ich kann dies auf irgendeine Weise mit tun max-width, aber ich kann nicht scheinen, dass dies funktioniert.

Der folgende Code (mit einem sehr kleinen Fenster) verursacht dies:

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

Die rote Linie ist der rechte Rand von. divWenn Sie Ihr Browserfenster klein machen, sehen Sie, dass die Tabelle nicht hineinpasst.

waiwai933
quelle
2
Off-Topic: nicht verwenden <center>. Es ist seit Jahren veraltet. Außerdem hast du schon einen align="center"auf deinem Tisch.
DegDwight
Dies ist leider etwas, über das ich keine Kontrolle habe. Der Inhalt innerhalb des div ist tatsächlich aus einer Datei enthalten, die nicht von mir generiert wurde. Ich kann nur das CSS berühren, aber ich würde das <Center> entfernen, wenn ich könnte.
Waiwai933

Antworten:

24

Drehen Sie es um, indem Sie Folgendes tun:

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

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

Auch würde ich Ihnen raten:

  • Verwenden Sie das centerTag nicht (es ist veraltet)
  • Verwenden Sie keine width, bgcolorAttribute, setzen sie durch CSS ( widthund background-color)

(vorausgesetzt, Sie können die gerenderte Tabelle steuern)

Zyphrax
quelle
Wenn ich Breite: 100% mache, ignoriert es meinen Rand: richtig. was dazu führt, dass horizontale Balken gescrollt werden
Jesse
208

Mit können Sie verhindern, dass Tabellen über das übergeordnete Div hinaus erweitert werden table-layout:fixed.

Mit dem folgenden CSS werden Ihre Tabellen auf die Breite des sie umgebenden Div erweitert.

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

Ich habe diesen Trick hier gefunden .

James Lawruk
quelle
63
Dies zwingt alle Spalten auf die gleiche Breite ... nicht sehr nützlich
Serj Sagan
11
Tatsächlich können Sie die Spalten immer noch unterschiedlich breit machen. Sie müssen nur die Breiten in <col>s oder in den s der ersten Zeile angeben <td>(anstatt sie basierend auf der Textgröße fließen zu lassen). Aus MDN: "Behoben: Tabellen- und Spaltenbreiten werden durch die Breite der Tabellen- und Spaltenelemente oder durch die Breite der ersten Zellenreihe festgelegt. Zellen in nachfolgenden Zeilen wirken sich nicht auf die Spaltenbreite aus."
Philfreo
1
ich danke dir sehr. Dies war eine große Hilfe, die Sie für mich getan haben ...
Parthan_akon
67

Eine grobe Umgehung besteht darin, display: tableauf das enthaltende Div zu setzen.

questzen
quelle
8
Das ist brillant, genau das, wonach ich gesucht habe. Um anderen hier zu helfen, gibt es einige googleable Zeichenfolgen: Ich habe versucht, CSS zu verwenden, um übergeordnetes div an Überlauf anzupassen, oder einen Hintergrund, um überlaufenden Tabelleninhalt abzudecken. Das hat perfekt funktioniert, vielen Dank!
Trisweb
Nur ein Nachtrag, bitte achten Sie auf den Kontext, in dem dies angewendet wird. Dies wird verwendet, um Tabellenlayout-ähnliches Verhalten und damit das Vorhandensein anderer Stilattribute wie Tabellenzeile, Tabellenzelle zu vermitteln. Tabellarische Layouts werden nicht verschoben. Zur Zeit ist die Anzeige: Tabelle Eigenschaft allein nicht ausreichend
questzen
Kam auch hierher, nachdem ich stundenlang nach Antworten gesucht hatte. Zeichenfolgen für Suchmaschinen: Tabelle in div wird nicht gescrollt, Firefox. Div mit Tabelle wird nicht scrollen, Firefox. In einem Div werden keine Bildlaufleisten angezeigt.
anevaude
2
Ich habe ein paar Dinge ausprobiert, aber ich füge einfach display: table zum obersten übergeordneten div hinzu. Das Problem wurde gelöst, danke.
Günay Gültekin
Beste Lösung für Tabellen mit langen Headernamen und langem Zelleninhalt. Vielen Dank!.
Ege Bayrak
34

Ich habe alle oben genannten Lösungen ausprobiert und dann nicht funktioniert. Ich habe 3 Tabellen untereinander. Der letzte floss über. Ich habe es behoben mit:

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

Für IE11 im Edge-Modus müssen Sie dies einstellen word-break:break-all

Mr. Doomsbuster
quelle
12

Zuerst habe ich James Lawruks Methode angewendet. Dies änderte jedoch alle Breiten der td.

Die Lösung für mich war die Verwendung white-space: normalfür die Spalten (die auf eingestellt war white-space: nowrap). Auf diese Weise wird der Text immer unterbrochen. Durch word-wrap: break-worddie Verwendung wird sichergestellt, dass bei Bedarf alles kaputt geht, auch nach der Hälfte eines Wortes.

Das CSS sieht dann so aus:

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

Dies ist möglicherweise nicht immer die wünschenswerte Lösung, da word-wrap: break-wordIhre Wörter in der Tabelle möglicherweise unleserlich werden. Dadurch bleibt Ihr Tisch jedoch in der richtigen Breite.

Sander Koedood
quelle
5

Ich habe fast alles oben versucht, aber es hat bei mir nicht funktioniert ... Das Folgende hat funktioniert

word-break: break-all;

Dies wird dem übergeordneten div (Container der Tabelle) hinzugefügt.

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

Wenden Sie das obige Styling auf das übergeordnete Div an.

Christian Heath
quelle
-3

Es ist ein width="400"auf dem Tisch, entfernen Sie es und es wird funktionieren ...

Tal
quelle