Как предотвратить перенос текста в ячейке таблицы

285

Кто-нибудь знает, как я могу предотвратить перенос текста в ячейке таблицы? Это для заголовка таблицы, и заголовок намного длиннее, чем данные в нем, но мне нужно, чтобы он отображался только в одной строке. Это нормально, если колонка очень широкая.

HTML-код моей (упрощенной) таблицы выглядит следующим образом:

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

Сам заголовок заключен в thтег внутри тега по причинам, относящимся к JavaScript на странице.

Таблица выходит с заголовками на несколько строк. Похоже, это происходит только тогда, когда таблица достаточно широка, поскольку браузер пытается избежать горизонтальной прокрутки. В моем случае, однако, я хочу горизонтальную прокрутку.

Любые идеи?

pkaeding
источник

Ответы:

486

Посмотрите на white-spaceсвойство, используемое так:

th {
    white-space: nowrap;
}

Это заставит содержимое <th>отображаться в одной строке.

На странице со ссылками представлены различные варианты white-space:

normal
Это значение предписывает пользовательским агентам свернуть последовательности пробелов и разбивать строки по мере необходимости, чтобы заполнить линейные блоки.

pre
Это значение предотвращает свертывание пользовательских агентов последовательностями пробелов. Строки ломаются только у сохраненных символов новой строки.

Nowrap
Это значение сворачивает пробел, как и в случае с «normal», но подавляет разрывы строк в тексте.

pre-wrap
Это значение предотвращает свертывание пользовательских агентов последовательностями пробелов. Строки разбиваются при сохраненных символах новой строки и по мере необходимости заполняют поля строк.

pre-line
Это значение указывает агентам пользователя свернуть последовательности пробелов. Строки разбиваются при сохраненных символах новой строки и по мере необходимости заполняют поля строк.

Оуэн
источник
8
не работает для поля ввода и кнопки в одной ячейке. случайно расположенные места ниже.
Doomsknight
16
Tableэлемент должен иметь table-layout:fixed;для того, чтобы это работало.
daniloquio
@ Doomsknight Вы нашли способ достичь этого с помощью поля ввода и другого элемента в той же ячейке?
loveNoHate
пустое пространство: pre; было то, что мне было нужно, так как -28.04 обернулся между - и 28.04
Brent
1
@ Doomsknight У меня была та же проблема с флажком, и я решил ее, обновив CSS с помощьюinput { display: inline; }
Programster
66
<th nowrap="nowrap">

или

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

или

<th class="nowrap">
<style type="text/css">
.nowrap { white-space: nowrap; }
</style>
Грант Вагнер
источник
6
Обратите внимание, что nowrapэто устарело. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Вместо этого используйте таблицы стилей.
wisbucky
Заметка. При неосторожном использовании этот атрибут может привести к чрезмерно широким ячейкам.
ArifMustafa
1
@wisbucky Как можно "использовать таблицы стилей"?
rogerdpack
22

Есть как минимум два способа сделать это:

Используйте атрибут nowrap внутри тега "td":

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

Используйте неразрывные пробелы между своими словами:

<th>Really&nbsp;long&nbsp;column&nbsp;heading</th>
Сергей Головченко
источник
6
Обратите внимание, что nowrapэто устарело. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Вместо этого используйте таблицы стилей.
wisbucky
6

Я пришел к этому вопросу, чтобы предотвратить перенос текста на дефис.

Вот как я это сделал:

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

Ссылка:

Как предотвратить разрыв строки в дефисах во всех браузерах

cssyphus
источник
Стоит отметить, что nobrтег нестандартный, как указано в принятом ответе, связанном в этом ответе: stackoverflow.com/a/8755071/4257
pkaeding
Совершенно верно. Ваша точка зрения хорошо принята. Я прочитал все эти комментарии, отметил опыт соответствующих комментаторов и сделал суждение. Дефис немного сложнее. (Примечание: вопрос, на который вы ссылались в своем комментарии, тот же, на который я
ссылался
Да, это должен был быть тот же вопрос. Я просто хотел убедиться, что предупреждение было опубликовано здесь на случай, если кто-то найдет этот ответ в будущем, и не потрудится прочитать связанную ссылку.
pkaeding
1

Для использования с пользовательским интерфейсом React / Material

Если вам интересно, как это работает для пользовательского интерфейса материала при сборке в React, вот как вы добавляете это к своему <TableHead>Компоненту:

<TableHead style={{ whiteSpace: 'nowrap'}}>
Дэвис Джонс
источник