Jak zapobiec zawijaniu tekstu w komórce tabeli

285

Czy ktoś wie, jak mogę zapobiec zawijaniu tekstu w komórce tabeli? To jest dla nagłówka tabeli, a nagłówek jest znacznie dłuższy niż dane w nim zawarte, ale muszę go wyświetlać tylko w jednym wierszu. W porządku, jeśli kolumna jest bardzo szeroka.

HTML mojej (uproszczonej) tabeli wygląda następująco:

<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>

Sam nagłówek jest zawinięty w div wewnątrz thtagu z powodów związanych z javascript na stronie.

Stół wychodzi z nagłówkami zawijanymi w wiele wierszy. Wydaje się, że dzieje się tak tylko wtedy, gdy stół jest wystarczająco szeroki, ponieważ przeglądarka próbuje uniknąć przewijania w poziomie. Jednak w moim przypadku chcę przewijanie w poziomie.

Jakieś pomysły?

pkaeding
źródło

Odpowiedzi:

486

Spójrz na white-spacewłaściwość, użytą w ten sposób:

th {
    white-space: nowrap;
}

Wymusi <th>to wyświetlenie zawartości w jednym wierszu.

Na połączonej stronie znajdują się różne opcje white-space:

normal
Ta wartość kieruje programy klienckie do zwijania sekwencji białych znaków i przerywania linii w razie potrzeby w celu wypełnienia pól linii.

pre
Ta wartość zapobiega zwijaniu się przez użytkownika sekwencji sekwencji białych znaków. Linie są łamane tylko przy zachowanych znakach nowej linii.

nowrap
Ta wartość zwija białe znaki jak dla „normalnego”, ale pomija łamanie linii w tekście.

pre-wrap
Ta wartość zapobiega zwijaniu się przez użytkownika sekwencji sekwencji białych znaków. Linie są przerywane przy zachowanych znakach nowej linii i, jeśli to konieczne, do wypełnienia pól linii.

pre-line
Ta wartość kieruje programy użytkownika do zwinięcia sekwencji białych znaków. Linie są przerywane przy zachowanych znakach nowej linii i, jeśli to konieczne, do wypełnienia pól linii.

piekarnik
źródło
8
nie działa dla pola wprowadzania i przycisku w tej samej komórce. losowo poniżej.
Doomsknight
16
Tableelement musi mieć table-layout:fixed;, aby to działało.
daniloquio,
@Doomsknight Czy udało Ci się to osiągnąć za pomocą pola wejściowego i innego elementu w tej samej komórce?
loveNoHate
biała spacja: przed; było to, czego potrzebowałem, ponieważ -28.04 zawijało między - a 28.04
Brent
1
@Doomsknight Miałem ten sam problem z polem wyboru i rozwiązałem go, aktualizując CSS za pomocąinput { display: inline; }
Programster
66
<th nowrap="nowrap">

lub

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

lub

<th class="nowrap">
<style type="text/css">
.nowrap { white-space: nowrap; }
</style>
Grant Wagner
źródło
6
Uwaga: nowrapprzestarzała. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Zamiast tego użyj arkuszy stylów.
wisbucky 6.04.16
Uwaga. jeśli zastosuje się go niedbale, ten atrybut może spowodować nadmiernie szerokie komórki.
ArifMustafa
1
@wisbucky W jaki sposób można „używać arkuszy stylów”?
rogerdpack
22

Istnieją co najmniej dwa sposoby, aby to zrobić:

Użyj atrybutu nowrap w tagu „td”:

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

Używaj nieprzerwanych spacji między swoimi słowami:

<th>Really&nbsp;long&nbsp;column&nbsp;heading</th>
Siergiej Golovchenko
źródło
6
Uwaga: nowrapprzestarzała. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Zamiast tego użyj arkuszy stylów.
wisbucky 6.04.16
6

Doszedłem do tego pytania, aby zapobiec zawijaniu tekstu przy łączniku.

Oto jak to zrobiłem:

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

Odniesienie:

Jak zapobiec łamaniu linii przy łącznikach we wszystkich przeglądarkach

cssyphus
źródło
Warto zauważyć, że nobrtag jest niestandardowy, jak wskazano w zaakceptowanej odpowiedzi
podanej
Całkiem dobrze. Twój punkt został dobrze przyjęty. Przeczytałem wszystkie te komentarze, zauważyłem doświadczenia odpowiednich komentatorów i wydałem wyrok. Łącznik jest nieco trudny. (Uwaga: pytanie, które podałeś w komentarzu, jest tym samym, które
podłączyłem
Tak, miało to być to samo pytanie. Chciałem się tylko upewnić, że zastrzeżenie zostało opublikowane tutaj, na wypadek, gdyby ktoś znalazł tę odpowiedź w przyszłości, i nie zawracałem sobie głowy czytaniem odnośnika.
pkaeding
1

Do użytku z interfejsem React / Material

Jeśli zastanawiasz się, jak to działa w interfejsie materiałowym podczas budowania w React, oto jak dodajesz to do swojego <TableHead>komponentu:

<TableHead style={{ whiteSpace: 'nowrap'}}>
Davis Jones
źródło