Avvolgere il testo nel tag <td>


136

Voglio avvolgere del testo che viene aggiunto a un <td>elemento. Ci ho provato style="word-wrap: break-word;" width="15%". Ma non sta avvolgendo il testo. È obbligatorio dargli una larghezza del 100%? Ho altri controlli da visualizzare, quindi è disponibile solo la larghezza del 15%.


1
Quale HTML stai usando? è <td> del testo ... </td> o il tuo TD contiene un <p> o <span>? Anche quando dici che non sta andando a capo presumo che stai vedendo il TD espandersi in larghezza quando il testo è più lungo del "15%" della larghezza delle tabelle?
scunliffe,

Il mio HTML ha <td> testo dinamico .. </td> e ciò che presumi sull'espansione TD è assolutamente corretto.

Risposte:


221

Per avvolgere il testo TD

Primo set di stile da tavolo

table{
    table-layout: fixed;
}

quindi impostare TD Style

td{
    word-wrap:break-word
}

5
Suppongo che non sia accettato perché non funziona in Chrome ... :-( Qualche soluzione per il webkit?
MarcoS

4
Ha funzionato perfettamente per me in Chrome.
Alejandro Riedel,

17
Interessante ... In Chrome, ho dovuto usare white-space: normallo stile td per far funzionare il wrapping (anziché il word-wrap:break-word)
Jim,

3
Posso confermare di aver avuto la stessa esperienza con la risposta di Jim. Per qualche ragione Chrome non risponde senzawhite-space:normal;
petrosmm il

1
Utilizzare white-space: pre-wrapse è necessario preservare gli spazi bianchi.
eicksl

47

Le tabelle HTML supportano uno stile css "layout di tabella: fisso" che impedisce all'agente utente di adattare le larghezze delle colonne al loro contenuto. Potresti volerlo usare.


7
Ho tentato questa soluzione, ma non sembra funzionare in Chrome. Ho una tabella che viene riempita in modo dinamico con un collegamento ipertestuale che è oltre il doppio della larghezza della cella. 'table-layout: fixed' risolve il problema con l'allungamento della tabella, ma non avvolge il testo; invece continua ad allungare a destra della pagina. Mi sto perdendo qualcosa?
VUOTO

30

Credo che tu abbia riscontrato la cattura di 22 tavoli. Le tabelle sono ottime per avvolgere i contenuti in una struttura tabulare e fanno un ottimo lavoro di "stiramento" per soddisfare le esigenze del contenuto che contengono.

Per impostazione predefinita, le celle della tabella si allungheranno per adattarsi al contenuto ... quindi il tuo testo lo renderà più ampio.

Ci sono alcune soluzioni.

1.) Puoi provare a impostare una larghezza massima sul TD.

<td style="max-width:150px;">

2.) Puoi provare a inserire il testo in un elemento a capo (ad es. Un intervallo) e impostarne dei vincoli.

<td><span style="max-width:150px;">Hello World...</span></td>

Tenere presente che le versioni precedenti di IE non supportano la larghezza min / max.

Poiché IE non supporta nativamente la larghezza massima, dovrai aggiungere un hack se vuoi forzarlo. Esistono diversi modi per aggiungere un hack, questo è solo uno.

Al caricamento della pagina, solo per IE6, ottieni la larghezza di rendering della tabella (in pixel), quindi ottieni il 15% di quella e applica quella come larghezza al primo TD in quella colonna (o TH se hai le intestazioni) di nuovo, in pixel .


Ho in entrambi i modi. Ma non è in grado di avvolgere il testo. Sto usando IE6.0

1
ah, IE6. Questo aggiunge complessità. Revisionerò la mia risposta con un hack IE6.
scunliffe,

11

table-layout:fixedrisolverà il problema di espansione della cella, ma ne creerà uno nuovo. IE per impostazione predefinita nasconderà l'overflow ma Mozilla lo renderà fuori dagli schemi.

Un'altra soluzione sarebbe quella di utilizzare: overflow:hidden;width:?px

<table style="table-layout:fixed; width:100px">
 <tr>
   <td style="overflow:hidden; width:50px;">fearofthedarkihaveaconstantfearofadark</td>
   <td>
     test
   </td>
 </tr>
</table>


9

Questo ha funzionato per me con alcuni framework css (material design lite [MDL]).

table {
  table-layout: fixed;
  white-space: normal!important;
}

td {
  word-wrap: break-word;
}

8

Utilizzare word-breakpuò essere utilizzato senza styling tablepertable-layout: fixed

table {
  width: 140px;
  border: 1px solid #bbb
}

.tdbreak {
  word-break: break-all
}
<p>without word-break</p>
<table>
  <tr>
    <td>LOOOOOOOOOOOOOOOOOOOOOOOOOOOOGGG</td>
  </tr>
</table>

<p>with word-break</p>
<table>
  <tr>
    <td class="tdbreak">LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOGGG</td>
  </tr>
</table>


3

Funziona davvero bene:

<td><div style = "width:80px; word-wrap: break-word"> your text </div></td> 

Puoi usare la stessa larghezza per tutti i tuoi <div , o regolare la larghezza in ogni caso per spezzare il testo dove preferisci.

In questo modo non devi scherzare con larghezze di tabella fisse o CSS complessi.


1
Forse avresti voluto usare CSS, invece, ma gli stili in linea sono generalmente evitati nell'HTML moderno, specialmente se stai ripetendo sempre gli stessi stili per ogni div copiato.
TankorSmash

3

Ho avuto alcuni dei miei tdcon:

white-space: pre;

Questo mi ha risolto:

white-space: pre-wrap;

2

Per rendere la larghezza della cella esattamente uguale alla parola più lunga del testo, basta impostare la larghezza della cella su 1px

vale a dire

td {
  width: 1px;
}

Questo è sperimentale e ne sono venuto a conoscenza mentre lo facevo prove ed errori

Fiddle dal vivo: http://jsfiddle.net/harshjv/5e2oLL8L/2/


1

È possibile che ciò funzioni, ma potrebbe rivelarsi un po 'fastidioso ad un certo punto in futuro (se non immediatamente).

<style> 
tbody td span {display: inline-block;
               width: 10em; /* this is the nuisance part, as you'll have to define a particular width, and I assume -without testing- that any percent widths would be relative to the containing `<td>`, not the `<tr>` or `<table>` */
               overflow: hidden; 
               white-space: nowrap; }

</style>

...

<table>

<thead>...</thead>
<tfoot>...</tfoot>

<tbody>

<tr>

<td><span title="some text">some text</span></td> <td><span title="some more text">some more text</span></td> <td><span title="yet more text">yet more text</span></td>

</tr>

</tbody>

</table>

La logica di spanciò è che, come sottolineato da altri, una <td>volontà si espande in genere per adattarsi al contenuto, mentre a <span>può essere data - e ci si aspetta che mantenga - una larghezza prestabilita; il overflow: hiddenè destinato a, ma non potrebbe, nascondere ciò che altrimenti causare <td>ad espandersi.

Consiglio di usare la titleproprietà dell'intervallo per mostrare il testo presente (o ritagliato) nella cella visiva, in modo che il testo sia ancora disponibile (e se non vuoi / hai bisogno che le persone lo vedano, perché farlo in primo luogo, immagino ...).

Inoltre, se si definisce una larghezza per il td {...}td si espanderà (o potenzialmente si contrarrà, ma ne dubito) per riempire la sua larghezza implicita (come la vedo io sembra che siatable-width/number-of-cells ), una larghezza di tabella specificata non sembra creare lo stesso problema.

Il rovescio della medaglia è il markup aggiuntivo utilizzato per la presentazione.


1

Il wrapping del testo avviene automaticamente nelle tabelle. L'errore che le persone commettono durante il test è ipoteticamente assumere una lunga stringa come "ggggggggggggggggggggggggggggggggggggggggggggggggg" e lamentarsi che non si avvolge. Praticamente non c'è una parola in inglese che sia così lunga e anche se c'è, c'è una debole possibilità che venga usata all'interno di quel<td> .

Prova a testare con frasi come "La contrapposizione è superstiziosa in circostanze predeterminate".


Questo è corretto. Non riesco a capire perché la gente stia suggerendo di usare "white-space: nowrap" in quanto farà esattamente l'opposto di ciò che l'OP vuole.
mluisbrown,

29
non correggo nessuna parola in inglese che sia così lunga ma supponiamo che io stia mostrando un percorso di file, che sarà continuo e molto lungo.
Krisp

2
.. Oppure un lungo elenco di numeri separati da virgole, ad esempio che sfortunatamente non hanno spazi.
Aditya Sanghi,

4
.. O un nome di dominio lungo che può arrivare a 63 caratteri (estensione e www esclusi) http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/
Brainfeeder

Sto cercando di risolvere questo problema quando la "parola" è un URL molto lungo. Il commento sopra con l'esempio "ggggggggggggggggggggggggggggggggggggggggggggggggg" non tiene conto degli URL lunghi.
geekandglitter

0

Applica le classi ai tuoi TD, applica le larghezze appropriate (ricorda di lasciarne una senza larghezza in modo da assumere il resto della larghezza), quindi applica gli stili appropriati. Copia e incolla il codice seguente in un editor e visualizza in un browser per vederlo funzionare.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
<!--
td { vertical-align: top; }
.leftcolumn { background: #CCC; width: 20%; padding: 10px; }
.centercolumn { background: #999; padding: 10px; width: 15%; }
.rightcolumn { background: #666; padding: 10px; }
-->
</style>
</head>

<body>
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="leftcolumn">This is the left column. It is set to 20% width.</td>
    <td class="centercolumn">
        <p>Hi,</p>
        <p>I want to wrap a text that is added to the TD. I have tried with style="word-wrap: break-word;" width="15%". But the wrap is not happening. Is it mandatory to give 100% width ? But I have got other controls to display so only 15% width available.</p>
        <p>Need help.</p>
        <p>TIA.</p>
    </td>
    <td class="rightcolumn">This is the right column, it has no width so it assumes the remainder from the 15% and 20% assumed by the others. By default, if a width is applied and no white-space declarations are made, your text will automatically wrap.</td>
  </tr>
</table>
</body>
</html>

Credo che l'OP, sebbene non lo affermi esplicitamente, stia riscontrando problemi con il wrapping di contenuti dinamici non spaziali. In questo caso, la soluzione di cui sopra non funzionerà - jsfiddle.net/qZrFW
user66001

-1
<!DOCTYPE html>
<html>
<head>
<style>
table, th, td {
    border: 1px solid black;
}
</style>
</head>
<body>

<table>
  <tr>
    <th>Poem</th>
    <th>Poem</th>
  </tr>
  <tr>
    <td nowrap>Never increase, beyond what is necessary, the number of entities required to explain anything</td>
    <td>Never increase, beyond what is necessary, the number of entities required to explain anything</td>
  </tr>
</table>

<p>The nowrap attribute is not supported in HTML5. Use CSS instead.</p>

</body>
</html>
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.