So verhindern Sie, dass Text in einer Tabellenzelle umbrochen wird

285

Weiß jemand, wie ich verhindern kann, dass der Text in einer Tabellenzelle umbrochen wird? Dies ist für die Kopfzeile einer Tabelle und die Überschrift ist viel länger als die Daten darunter, aber ich brauche sie, um sie nur in einer Zeile anzuzeigen. Es ist in Ordnung, wenn die Spalte sehr breit ist.

Der HTML-Code meiner (vereinfachten) Tabelle sieht folgendermaßen aus:

<table>
  <thead>
    <tr>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
      <th>
        <div>Really long column heading</div>
      </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
      <td>
        <div>data</div>
      </td>
    </tr>
  </tbody>
</table>

Die Überschrift selbst wird thaus Gründen, die das Javascript auf der Seite betreffen, in ein div innerhalb des Tags eingeschlossen.

Die Tabelle wird mit Überschriften in mehreren Zeilen angezeigt. Dies scheint nur zu geschehen, wenn die Tabelle ausreichend breit ist, da der Browser versucht, horizontales Scrollen zu vermeiden. In meinem Fall möchte ich jedoch horizontales Scrollen.

Irgendwelche Ideen?

pkaeding
quelle

Antworten:

485

Schauen Sie sich die white-spaceImmobilie so an:

th {
    white-space: nowrap;
}

Dadurch wird der Inhalt von <th>in einer Zeile angezeigt.

Auf der verlinkten Seite finden Sie hier die verschiedenen Optionen für white-space:

normal
Dieser Wert weist Benutzeragenten an, Leerzeichenfolgen zu reduzieren und Zeilen nach Bedarf zu unterbrechen, um Zeilenfelder zu füllen.

pre
Dieser Wert verhindert, dass Benutzeragenten Leerzeichenfolgen reduzieren. Zeilen werden nur bei erhaltenen Zeilenumbrüchen unterbrochen.

nowrap
Dieser Wert reduziert Leerzeichen wie bei 'normal', unterdrückt jedoch Zeilenumbrüche im Text.

Pre-Wrap
Dieser Wert verhindert, dass Benutzeragenten Leerzeichenfolgen reduzieren. Zeilen werden bei beibehaltenen Zeilenumbrüchen und bei Bedarf zum Füllen von Zeilenfeldern unterbrochen.

Vorzeile
Dieser Wert weist Benutzeragenten an, Leerzeichenfolgen zu reduzieren. Zeilen werden bei beibehaltenen Zeilenumbrüchen und bei Bedarf zum Füllen von Zeilenfeldern unterbrochen.

Owen
quelle
8
funktioniert nicht für Eingabefeld und Schaltfläche in derselben Zelle. zufällig Orte unten.
Doomsknight
16
TableElement muss haben table-layout:fixed;, damit dies funktioniert.
Daniloquio
@Doomsknight Haben Sie einen Weg gefunden, dies mit einem Eingabefeld und einem anderen Element in derselben Zelle zu erreichen?
loveNoHate
Leerraum: vor; war das, was ich brauchte, da -28.04 zwischen dem - und 28.04
Brent
1
@ Doomsknight Ich hatte das gleiche Problem mit einem Kontrollkästchen und löste es durch Aktualisierung des CSS mitinput { display: inline; }
Programster
66
<th nowrap="nowrap">

oder

<th style="white-space:nowrap;">

oder

<th class="nowrap">
<style type="text/css">
.nowrap { white-space: nowrap; }
</style>
Grant Wagner
quelle
6
Beachten Sie, dass nowrapveraltet ist. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Verwenden Sie stattdessen Stylesheets.
wisbucky
Hinweis. Bei unachtsamer Verwendung kann dieses Attribut zu übermäßig breiten Zellen führen.
ArifMustafa
1
@wisbucky Wie benutzt man "Stylesheets"?
Rogerdpack
22

Es gibt mindestens zwei Möglichkeiten:

Verwenden Sie das nowrap-Attribut im "td" -Tag:

<th nowrap="nowrap">Really long column heading</th>

Verwenden Sie nicht unterbrechbare Leerzeichen zwischen Ihren Wörtern:

<th>Really&nbsp;long&nbsp;column&nbsp;heading</th>
Sergey Golovchenko
quelle
6
Beachten Sie, dass nowrapveraltet ist. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Verwenden Sie stattdessen Stylesheets.
wisbucky
6

Ich kam zu dieser Frage, um zu verhindern, dass der Bindestrich umbrochen wird.

So habe ich es gemacht:

<td><nobr>Table Text</nobr></td>

Referenz:

So verhindern Sie Zeilenumbrüche bei Bindestrichen in allen Browsern

Cssyphus
quelle
Es ist erwähnenswert, dass das nobrTag nicht dem Standard entspricht, wie in der akzeptierten Antwort in dieser Antwort angegeben: stackoverflow.com/a/8755071/4257
pkaeding
Ganz richtig. Ihr Punkt wird gut aufgenommen. Ich las all diese Kommentare, notierte die Erfahrung der entsprechenden Kommentatoren und machte ein Urteil. Der Bindestrich ist etwas knifflig. (Hinweis: Die Frage, die Sie in Ihrem Kommentar verlinkt haben, ist die gleiche, die ich in meiner Antwort verlinkt habe.)
cssyphus
Ja, es sollte die gleiche Frage sein. Ich wollte nur sichergehen, dass die Einschränkung hier veröffentlicht wurde, falls jemand diese Antwort in Zukunft finden sollte, und habe mir nicht die Mühe gemacht, die verknüpfte Referenz zu lesen.
pkaeding
1

Zur Verwendung mit React / Material UI

Falls Sie sich hier fragen, wie dies für die Material-Benutzeroberfläche beim Erstellen in React funktioniert, fügen Sie dies Ihrer <TableHead>Komponente wie folgt hinzu :

<TableHead style={{ whiteSpace: 'nowrap'}}>
Davis Jones
quelle