Come mostrare il testo multilinea in una cella di tabella


119

Voglio mostrare un paragrafo dal database in una cella di tabella.

Il risultato è una grande riga 1, ignorando come è organizzata nel database. ignorando ad esempio "entra" (nuove righe)

Voglio mostrarlo esattamente in base a come è scritto nel database.

Ad esempio, se il paragrafo viene salvato in questo modo:

hello ,
my name is x.

Voglio che venga mostrato esattamente così, invece di:

hello, myname is x.

Risposte:


164

Si desidera utilizzare il CSS white-space:preapplicato al file <td>. Per eseguire questa operazione su tutte le celle della tabella, ad esempio:

td { white-space:pre }

In alternativa, se puoi modificare il markup, puoi utilizzare un <pre>tag attorno al tuo contenuto. Per impostazione predefinita, i browser Web utilizzano il loro foglio di stile agente utente per applicare la stessa white-space:preregola a questo elemento.

L'elemento PRE dice ai programmi utente visivi che il testo incluso è "preformattato". Quando si maneggia testo preformattato, i programmi utente visivi:

  • Può lasciare intatti gli spazi bianchi.
  • Può rendere il testo con un carattere a passo fisso.
  • Può disabilitare il ritorno a capo automatico.
  • Non deve disabilitare l'elaborazione bidirezionale.

Mi piace, white-spaceè una proprietà CSS 2.1 ampiamente supportata. Testato su IE8, funziona alla grande.
— leesei

Ora mi trovo in una situazione in cui white-space: pre;viene ignorato quando applicato in un <td>tag. L'utilizzo <pre></pre>di avvolgere il nostro contenuto funziona bene, ma a causa dell'uso di questa tabella (esportazione in excel), grandi numeri di colonne e righe aumentano le dimensioni del file esportato e causano l'arresto anomalo di Excel durante la lettura del file. (strano, lo so). Qualcun altro l'ha visto o ha un'idea per una soluzione?
— JoeBrockhaus

1
Questa soluzione è lungi dall'essere perfetta. Ne risulta che Excel produce più righe per le celle che hanno interruzioni di riga. L'unica risposta corretta può essere trovata qui: bennadel.com/blog/…
— Elmue

55
style="white-space:pre-wrap; word-wrap:break-word"

Ciò risolverebbe il problema della nuova linea. pre tag aggiungerebbe CSS aggiuntivo rispetto a quanto richiesto.


1
Questa è una bella soluzione mirata. Il <pre>tag fa tutti i tipi di cose oltre a consentire solo i caratteri di nuova riga, ma queste impostazioni di stile risolvono solo il problema presentato.
— trasferisce l'

Ho avuto un problema in cui i miei dati contengono una nuova riga. Altre soluzioni come la sostituzione del testo con <br/> o <div> o <pre> venivano trattate solo come testo. Questa soluzione funziona perfettamente superando quel problema.
— Anshuman Goel

Fantastico!! Questo funziona molto bene per me. Avevo un JDataTable che elencava più testo e avevo bisogno del tuo CSS per avvolgere il testo correttamente! Day saver Grazie mille!
— PatsonLeaner

1
Questo funziona per me in termini di preservazione delle interruzioni di riga, ma aggiunge un'interruzione di riga all'inizio di ogni cella ... qualche soluzione?
— jtr13

30

Avvolgi il contenuto in un <pre>tag (testo preformattato)

<pre>hello ,
my name is x.</pre>

3
Ciò, tuttavia, sovrascrive il carattere con monospazio.
— hardmooth

23

Due suggerimenti per risolvere questo problema:

SOLUZIONE 1: <div style="white-space:pre;">{database text}</div> o<pre>{database text}</pre>

Questa è una buona soluzione se il tuo testo non ha tag html o proprietà css. Permette anche di mantenere le schede per esempio.

SOLUZIONE 2: sostituire \n con<p></p> or <br/>

Questa è una soluzione se desideri semplicemente aggiungere linee di interruzione, senza perdere altre proprietà del testo o formattazione. Un esempio in php potrebbe essere$text = str_replace("\n","<br />",$database_text);

Puoi anche usare <p></p>o <div></div>, ma questo richiede un po 'più di analisi del testo.


7

Sul tuo codice lato server, sostituisci le nuove righe ( \n) con<br/> .

Se stai usando PHP, puoi usare nl2br()


6

Ciao, dovevo fare la stessa cosa! Non chiedermi perché, ma stavo generando un html usando Python e avevo bisogno di un modo per scorrere gli elementi in un elenco e fare in modo che ogni elemento prendesse una riga all'interno di una singola cella di una tabella.

Ho scoperto che il tag br ha funzionato bene per me. Per esempio:

<!DOCTYPE html>
<HTML>
    <HEAD>
        <TITLE></TITLE>
    </HEAD>
    <BODY>
  <TABLE>
            <TR>
                <TD>
                    item 1 <BR>
                    item 2 <BR>
                    item 3 <BR>
                    item 4 <BR>
                </TD>
            </TR>
        </TABLE>
  </BODY>

Questo produrrà l'output che volevo.


5

Uso il tag del codice html dopo ogni riga (vedi sotto) e funziona per me.

George Benson </br> 123 Main Street </br> New York, Ny 12344 </br>


2
dovrebbe essere un commento non una risposta.
— Deep Sharma il

<br> rompe la semantica della tabella. Quando si visualizza la tabella utilizzando un browser basato su testo, le nuove righe vengono visualizzate come righe di tabella.
— JAT86

3

il codice seguente funziona come per magia per me >>

td { white-space:pre-line }

1

Ho aggiunto solo <br>all'interno del <td>e funziona bene, rompi la linea!


0

Se hai una variabile stringa con \ndentro, che vuoi inserire td, puoi provare

<td>
    {value
        .split('\n')
        .map((s, index) => (
            <React.Fragment key={index}>
                {s}
                <br />
            </React.Fragment>
        ))}
</td>
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.