Larghezza cella tabella fissa


175

Molte persone usano ancora le tabelle per i controlli di layout, i dati, ecc. - Un esempio è il popolare jqGrid. Tuttavia, sta accadendo un po 'di magia che non riesco a capire (i suoi tavoli per gridare ad alta voce, quanta magia potrebbe esserci?)

Come è possibile impostare la larghezza della colonna di una tabella e farla obbedire come fa jqGrid !? Se provo a replicare questo, anche se imposto ogni <td style='width: 20px'>, non appena il contenuto di una di quelle celle è maggiore di 20px, la cella si espande!

Qualche idea o approfondimento?

Risposte:


249

Potresti provare a usare il <col>tag per gestire lo stile della tabella per tutte le righe ma dovrai impostare lo table-layout:fixedstile sulla <table>classe css delle tabelle o e impostare lo overflowstile per le celle

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col

<table class="fixed">
    <col width="20px" />
    <col width="30px" />
    <col width="40px" />
    <tr>
        <td>text</td>
        <td>text</td>
        <td>text</td>
    </tr>
</table>

e questo è il tuo CSS

table.fixed { table-layout:fixed; }
table.fixed td { overflow: hidden; }

15
col non funzionerebbe in html5, impostare la larghezza della singola td invece delle classi css o css inline
Pankaj Phartiyal

10
La risposta accettata non funziona se non si applica esplicitamente una larghezza per la tabella desiderata. Funziona perfettamente se si utilizza un'unità o una percentuale. Ho pensato che l'avrei sottolineato poiché la risposta di @ totymedli non ha ottenuto alcun voto e non volevo che gli utenti lo ignorassero. Tuttavia, il suggerimento di interruzione di parole non è necessario a meno che non sia quello a cui stai mirando.
thebdawk05,

Cosa succede quando hai righe con solo 1 elemento TD che si estende su più colonne? Usando il tuo codice di esempio, se avessi <TD colspan="3">in fila da solo sarebbe 90px?
sab669,

Grazie ha aiutato. Per la sovrapposizione dei dati, aggiungere questo table.fixed td { word-wrap: break-word; }.
Parag Tyagi,

Il suggerimento per la rottura delle parole non è necessario, ma è utile per il resto degli utenti SO e abbastanza pertinente alla domanda, dato che quasi tutti gli scenari si verificano in eccesso di contenuti in tabelle a larghezza fissa.
Amy Pellegrini,

101

Ora in HTML5 / CSS3 abbiamo una soluzione migliore per il problema. A mio avviso si consiglia questa soluzione puramente CSS:

table.fixed {table-layout:fixed; width:90px;}/*Setting the table width is important!*/
table.fixed td {overflow:hidden;}/*Hide text outside the cell.*/
table.fixed td:nth-of-type(1) {width:20px;}/*Setting the width of column 1.*/
table.fixed td:nth-of-type(2) {width:30px;}/*Setting the width of column 2.*/
table.fixed td:nth-of-type(3) {width:40px;}/*Setting the width of column 3.*/
<table class="fixed">
    <tr>
        <td>Veryverylongtext</td>
        <td>Actuallythistextismuchlongeeeeeer</td>
        <td>We should use spaces tooooooooooooo</td>
    </tr>
</table>

Devi preparare il tavolo widthanche nella soluzione di Haunter . Altrimenti non funziona.
Inoltre una nuova funzionalità CSS3 che vsync suggerito è il seguente: word-break:break-all;. Questo spezzerà le parole senza spazi in esse anche su più righe. Basta modificare il codice in questo modo:

table.fixed { table-layout:fixed; width:90px; word-break:break-all;}

Risultato finale

Tavolo reso


Se si lancia una riga con a colspan, questo sembra interrompere questa soluzione. Qualche suggerimento su come utilizzare questa soluzione con una tabella che contiene colspan> 1?
Eric K,

@QuantumDynamix Ho risolto questo problema includendo come prima riga, una riga senza colonne, solo tutte le singole colonne con larghezza. Ho quindi nascosto quella riga con altezza 0, bordo: nessuno, visibilità: nascosto, imbottitura: 0px ecc., Quindi la seconda riga è la prima che voglio vedere dove ci sono colonne. La prima riga con singole celle a larghezza fissa stabilisce le larghezze.
AaronS

@totymedli Qualche idea su come convincere la mia tabella a prendere la somma di tutte le larghezze delle mie colonne? La mia tabella viene generata in modo un po 'dinamico e quindi non posso calcolare in anticipo la larghezza della tabella, ma non voglio usare il 100% perché allunga alcuni elementi.
AaronS

14
table td 
{
  table-layout:fixed;
  width:20px;
  overflow:hidden;
  word-wrap:break-word;
}

9
Sei sicuro di poter usare table-layoutun elemento td?
Nick,

@Nick - funziona bene. Hovewer devo aggiungere anche la proprietà min-width e max-width (stesso valore di width), e poi è diventata una larghezza veramente fissa.
Denis Khay,

11

Avevo una lunga cella da tavolo, questo costringeva il tavolo ai bordi del browser e sembrava brutto. Volevo solo che quella colonna avesse solo dimensioni fisse e spezzasse le parole quando raggiunge la larghezza specificata. Quindi questo ha funzionato bene per me:

<td><div style='width: 150px;'>Text to break here</div></td>

Non è necessario specificare alcun tipo di stile per la tabella, elementi tr. Puoi anche usare overflow: nascosto; come suggerito da altre risposte, ma fa scomparire il testo in eccesso.


2
Oppure puoi usare la larghezza massima anziché la larghezza dove necessario. Ciò ti consentirà di non rompere il testo a meno che tu non raggiunga il limite di larghezza. E la cella della tabella non avrà spazio vuoto se il testo è più piccolo della larghezza specificata. <td> <div style = 'max-width: 150px;'> Testo da interrompere qui </div> </td>
Tarik,

1
table { 
    table-layout:fixed; width:200px;
}
table tr {
    height: 20px;
}

10x10


0

per la tabella della larghezza FULLSCREEN:

  • la larghezza del tavolo DEVE essere del 100%

  • se hai bisogno di N colonne, allora DEVE essere N + 1

esempio per 3 colonne:

table.fixed {
      table-layout: fixed;
      width: 100%;
    }
    table.fixed td {
      overflow: hidden;
    }
  <table class="fixed">
      <col width=20 />
      <col width=20 />
      <col width=20 />
    <tr>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>FREE</th>
    </tr>
    <tr>
      <td>text111111111</td>
      <td>text222222222</td>
      <td>text3333333</td>
    </tr>
  </table>


-2
table
{
  table-layout:fixed;
}
td,th
{
  width:20px; 
  word-wrap:break-word;
}

: first-child ...: nth-child (1) o ...

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.