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.


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)


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 .


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.


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


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.


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.


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

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


-3

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.