Impostare la costante di larghezza della colonna della tabella indipendentemente dalla quantità di testo nelle sue celle?


535

Nella mia tabella ho impostato la larghezza della prima cella in una colonna 100px.
Tuttavia, quando il testo in una delle celle di questa colonna è troppo lungo, la larghezza della colonna diventa maggiore di 100px. Come posso disabilitare questa espansione?


5
stackoverflow.com/questions/1258416/word-wrap-in-a-html-table potrebbe aiutarti a orientarti nella giusta direzione
justinl

2
Nel mio caso non è avvenuta l'espansione, ma il contrario: riduzione indesiderata della larghezza nonostante la mia dichiarazione esplicita sulla larghezza. Ridicolo!
Csaba Toth,

L'unica soluzione corretta a questo è utilizzare colgroup con cols in esso e impostare la larghezza dei cols.
MightyPork,

table-layout:fixed;è la soluzione
emfi

Risposte:


607

Ci ho giocato un po 'perché avevo difficoltà a capirlo.

È necessario impostare la larghezza della cella (una tho entrambe td, ho impostato entrambi) E impostare table-layoutsu fixed. Per qualche motivo, la larghezza della cella sembra rimanere fissa anche se è impostata anche la larghezza della tabella (penso che sia sciocca ma whatev).

Inoltre, è utile impostare la overflowproprietà in modo hiddenda impedire che il testo aggiuntivo esca dalla tabella.

Dovresti assicurarti di lasciare anche tutto il confine e il dimensionamento per i CSS.

Ok quindi ecco quello che ho:

table {
  border: 1px solid black;
  table-layout: fixed;
  width: 200px;
}

th,
td {
  border: 1px solid black;
  width: 100px;
  overflow: hidden;
}
<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

Eccolo in JSFiddle

Questo ragazzo aveva un problema simile: larghezza delle celle della tabella - larghezza di fissaggio, avvolgimento / troncamento di parole lunghe


77
E 'importante notare questo: "Il browser quindi impostare la larghezza delle colonne in base alla larghezza delle celle nella prima riga della tabella", da stackoverflow.com/questions/570154/...
daniloquio

12
Funziona quando la larghezza della tabella non è fissa. jsfiddle.net/lavinski/CGCFW/3 Hai solo bisogno di una riga dinamica per occupare lo spazio rimanente.
Daniel Little,

2
@DanielLittle in alternativa puoi impostare la larghezza della tabella su 1px; con overflow: visibleper le tabelle di dimensioni dinamiche, fintanto che la dimensione delle celle è fissa e l'overflow è visibile, non importa se la dimensione della tabella stessa è più grande o più piccola delle celle effettive.
Mahn,

Cosa potresti fare se il tuo td ha "larghezza = 30%;"?
71GA,

Si prega di aggiungere l'overflow: nascosto @ RokoC.Buljan
Alex Grande

178

Vedi: http://www.html5-tutorials.org/tables/changing-column-width/

Dopo il tag table, usa l'elemento col. non hai bisogno di un tag di chiusura.

Ad esempio, se avessi tre colonne:

<table>
  <colgroup>
    <col style="width:40%">
    <col style="width:30%">
    <col style="width:30%">
  </colgroup>  
  <tbody>
    ...
  </tbody>
</table>

26
Questo! Questa è la risposta HTML5 e funziona davvero senza che io debba saltare attraverso stupidi cerchi. Inoltre puoi usare <col class = "someClassName"> invece per mantenere le tue larghezze in CSS e non inquinare il tuo HTML con informazioni di stile.
John Munsch,

2
@Sam potresti aver avuto qualche altro problema sovrascrivendolo come CSS, stile inline o doctype errato ecc. Questo sicuramente funziona, è il modo standard di impostare gli stili di colonna.
Sameer Alibhai,

Non sono sicuro che questo sia il "modo HTML5". Sembra che colgroup / col in html5 sia realmente utilizzato solo per contrassegnare gli span. MDN non menziona l'uso dell'attributo style sui tag col (a parte quello che eredita dagli attributi globali) e dice solo di bgcolor: "... usa la proprietà CSS ... sui relativi elementi <td>". developer.mozilla.org/en-US/docs/Web/HTML/Element/col .
Stephen Panzer,

5
Ha funzionato per me con lo stile del tavolo table-layout: fixed; width: 100%;. Grazie!
nrodic

Non è end-all / definitive, ma anche w3schools non menziona l'uso di colquesto. Suggerisce l'uso di CSS applicato a <td>(o a <th>) - w3schools.com/tags/att_td_width.asp
Don Cheadle,

128

Basta aggiungere il <div>tag all'interno <td>o <th>definire la larghezza all'interno <div>. Questo ti aiuterà. Nient'altro funziona.

per esempio.

<td><div style="width: 50px" >...............</div></td>

2
Ho combinato questa soluzione specificando anche larghezza minima / larghezza massima per la stessa larghezza di pixel solo per essere al sicuro. Finalmente funziona. Non so perché devo eseguire tutti questi round extra solo per farlo davvero riparato, ridicolo ...
Csaba Toth,

1
Non sono sicuro di come sia meglio che impostare lo stesso css style="width: 50px"su<td>
Don Cheadle il

2
@mmcrae È meglio perché funziona, l'impostazione della larghezza su <td>no.
Madbreaks

66

Se hai bisogno di una o più colonne a larghezza fissa mentre altre colonne devono ridimensionare, prova a impostare entrambi min-widthe max-widthallo stesso valore.


Questo ha funzionato per me quando l'impostazione della larghezza esplicitamente con table-layout: fixed;non ha funzionato.
Jordan Mack,

Merda! Nessuna delle altre soluzioni ha funzionato o era troppo ingombrante! Questo ha funzionato perfettamente! Nessun div richiesto anche!
NeilRoy

29

Devi scrivere questo nel CSS corrispondente

table-layout:fixed;

migliore tavolo circostante con tag div e poi div div overflow: auto
vinoth kumar

Ha funzionato per me quando l'ho combinato con i gruppi di colonne: <table style = "table-layout: fixed"> <colgroup> <col style = "larghezza: 50%"> <col style = "larghezza: 50%"> </ colgroup> <tbody> ... </ tbody> </ table>.
Russ Bateman,

Questo articolo di Chris Coyer lo spiega bene: css-tricks.com/fixing-tables-long-strings
cssyphus

24

Quello che faccio è:

  1. Imposta la larghezza td:

    <td width="200" height="50"><!--blaBlaBla Contents here--></td>
  2. Imposta la larghezza td con CSS:

    <td style="width:200px; height:50px;">
  3. Imposta di nuovo la larghezza come max e min con CSS:

    <td style="max-width:200px; min-width:200px; max-height:50px; min-height:50px; width:200px; height:50px;">

Sembra un po 'ripetitivo ma mi dà il risultato desiderato. Per raggiungere questo obiettivo con molta facilità, potrebbe essere necessario inserire i valori CSS in una classe nel foglio di stile:

.td_size {    
  width:200px; 
  height:50px;
  max-width:200px;
  min-width:200px; 
  max-height:50px; 
  min-height:50px;
  **overflow:hidden;** /*(Optional)This might be useful for some overflow contents*/   
}

poi:

<td class="td_size">

Posiziona l'attributo class su quello <td>che desideri.


Questa era l'unica soluzione che sembrava funzionare in tutti i casi senza imporre restrizioni extra, potenzialmente indesiderate.
Sam,

3

Ho usato questo

.app_downloads_table tr td:first-child {
    width: 75%;
}

.app_downloads_table tr td:last-child {
    text-align: center;
}

Non dimenticare ntch-child (2) (o 3, 4 e così via)

table td nth-child (n + 1) {...} tratterà tutto tranne la prima colonna
Ed Randall,

2

Se non si desidera un layout fisso, specificare una classe per la dimensione della colonna in modo appropriato.

CSS:

.special_column { width: 120px; }

HTML:

<td class="special_column">...</td>

2

Inoltre, aiuta a inserire l'ultima "cella di riempimento", con larghezza: auto . Questo occuperà lo spazio rimanente e lascerà tutte le altre dimensioni come specificato.


2

Fai in modo che la risposta accettata risponda per schermi di dimensioni ridotte se inferiore alla larghezza fissa.

HTML:

<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

CSS

table{
    border: 1px solid black;
    table-layout: fixed;
    max-width: 600px;
    width: 100%;
}

th, td {
    border: 1px solid black;
    overflow: hidden;
    max-width: 300px;
    width: 100%;
}

JS Fiddle

https://jsfiddle.net/w9s3ebzt/



1

KAsun ha l'idea giusta. Ecco il codice corretto ...

<style type="text/css">
  th.first-col > div, 
  td.first-col > div {
    overflow:hidden;
    white-space:nowrap;
    width:100px
  }
</style>

<table>
  <thead><tr><th class="first-col"><div>really long header</div></th></tr></thead>
  <tbody><tr><td class="first-col"><div>really long text</div></td></tr></tbody>
</table>

1

Secondo la mia risposta qui , è anche possibile utilizzare una testata da tavolo (che può essere vuota) e applicare larghezze relative per ogni cella di testata da tavolo. Le larghezze di tutte le celle nel corpo della tabella saranno conformi alla larghezza della testa della colonna. Esempio:

HTML

<table>
  <thead>
    <tr>
      <th width="5%"></th>
      <th width="70%"></th>
      <th width="15%"></th>
      <th width="10%"></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Some text...</td>
      <td>May 2018</td>
      <td>Edit</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Another text...</td>
      <td>April 2018</td>
      <td>Edit</td>
    </tr>
  </tbody>
</table>

CSS

table {
  width: 600px;
  border-collapse: collapse;
}

td {
  border: 1px solid #999999;
}

Visualizza risultato

In alternativa, utilizzare colgroupcome suggerito nella risposta di Hyathin.


0

Uso un elemento :: after nella cella in cui desidero impostare una larghezza minima indipendentemente dal testo presente, in questo modo:

.cell::after {
    content: "";
    width: 20px;
    display: block;
}

Non devo impostare la larghezza sul genitore della tabella né utilizzare il layout della tabella.


-4

Ho trovato che la risposta di KAsun funziona meglio usando vw invece di px in questo modo:

<td><div style="width: 10vw" >...............</div></td>

Questo era l'unico stile che mi serviva per regolare la larghezza della colonna


-5

Non è necessario impostare "fixed"- tutto ciò che serve è l'impostazione overflow:hiddenpoiché la larghezza della colonna è impostata.


3
Che nasconderà il contenuto dietro i bordi delle celle, non è una buona idea.
mystrdat,
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.