Tavolo straripante fuori div


94

Sto provando a fermare una tabella con una larghezza dichiarata esplicitamente dall'overflow al di fuori del suo genitore div. Presumo di poterlo fare in qualche modo usando max-width, ma non riesco a farlo funzionare.

Il seguente codice (con una finestra molto piccola) causerà questo:

<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 linea rossa è il bordo destro del div, e se riduci la finestra del browser, vedrai che la tabella non ci sta.


2
Fuori tema: non usare <center>. È stato deprecato per anni. Inoltre, ne hai già una align="center"sul tuo tavolo.
ЯegDwight

Questo è purtroppo qualcosa su cui non ho il controllo. Il contenuto all'interno del div è effettivamente incluso da un file che non è stato generato da me. Posso solo toccare il CSS, ma eliminerei il <center> se potessi.
waiwai933

Risposte:


24

Giralo facendo:

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

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

Inoltre ti consiglio di:

  • Non utilizzare il centertag (è deprecato)
  • Non utilizzare width, bgcolorgli attributi, li fissato dal CSS ( widthe background-color)

(supponendo che tu possa controllare la tabella che è stata renderizzata)


Se creo larghezza: 100% ignora il mio margine: giusto. che causa lo scorrimento della barra orizzontale
Jesse

208

Puoi impedire alle tabelle di espandersi oltre il loro div genitore utilizzando table-layout:fixed.

Il CSS sottostante farà espandere le tue tabelle alla larghezza del div che le circonda.

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

Ho trovato questo trucco qui .


63
Questo costringe tutte le colonne ad avere la stessa larghezza ... non molto utile
Serj Sagan

11
In realtà puoi ancora rendere le colonne di larghezza diversa, devi solo specificare le larghezze in <col>s o sulla s della prima riga <td>(anziché lasciarlo scorrere in base alla dimensione del testo). Da MDN: "fisso: le larghezze di tabelle e colonne vengono impostate dalle larghezze degli elementi table e col o dalla larghezza della prima riga di celle. Le celle nelle righe successive non influiscono sulla larghezza delle colonne."
philfreo

1
grazie mille. Questo è stato un grande aiuto per me ...
Parthan_akon,

67

Una soluzione approssimativa è impostare display: tableil div contenitore.


8
È brillante, esattamente quello che stavo cercando. Per aiutare gli altri ecco alcune stringhe googleabili: stavo cercando di usare CSS per adattare il div genitore all'overflow, o adattare uno sfondo per coprire il contenuto della tabella in overflow. Ha funzionato perfettamente, grazie mille!
trisweb

Solo un addendum, si prega di prestare attenzione al contesto in cui viene applicato, questo viene utilizzato per impartire un comportamento simile al layout della tabella e quindi la presenza di altri attributi di stile come tabella-riga, tabella-cella. I layout tabulari non sono flottanti. Al momento la visualizzazione: la proprietà della tabella da sola non è sufficiente
questzen

Inoltre è venuto qui dopo ore di ricerca di risposte. Stringhe per il motore di ricerca: la tabella all'interno di div non scorre, firefox. Div con tabella non scorre, Firefox. Nessuna barra di scorrimento che appare nella tabella all'interno di un div.
anevaude

2
Ho provato alcune cose ma aggiungo semplicemente display: table al div genitore superiore. Il problema è stato risolto, grazie.
Günay Gültekin

La migliore soluzione per le tabelle con nomi di intestazione lunghi e contenuto di celle lungo. Grazie!.
Ege Bayrak,

34

Ho provato tutte le soluzioni sopra menzionate, quindi non ha funzionato. Ho 3 tavoli uno sotto l'altro. L'ultimo traboccava. L'ho risolto usando:

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

Per IE11 in modalità edge, è necessario impostarlo su word-break:break-all


12

All'inizio ho usato il metodo di James Lawruk. Questo tuttavia ha cambiato tutte le larghezze di td's.

La soluzione per me era usare white-space: normalsulle colonne (che era impostata su white-space: nowrap). In questo modo il testo si romperà sempre. L'utilizzo word-wrap: break-wordfarà in modo che tutto si rompa quando necessario, anche a metà di una parola.

Il CSS sarà così allora:

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

Questa potrebbe non essere sempre la soluzione desiderabile, in quanto word-wrap: break-wordpotrebbe rendere illeggibili le tue parole nella tabella. Tuttavia, manterrà il tuo tavolo della giusta larghezza.


5

Ho provato quasi tutto quanto sopra ma non ha funzionato per me ... Quanto segue ha funzionato

word-break: break-all;

Questo da aggiungere al div genitore (contenitore della tabella.)



-3

Ce n'è un width="400"sul tavolo, rimuovilo e funzionerà ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.