Як запобігти загортанню тексту в комірці таблиці


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>

Сам заголовок загортається у div всередині thтегу з причин, що стосуються javascript на сторінці.

Таблиця виходить із заголовками, що загортаються на кілька рядків. Здається, це відбувається лише тоді, коли таблиця є достатньо широкою, оскільки браузер намагається уникати горизонтальної прокрутки. Однак у моєму випадку я хочу горизонтальну прокрутку.

Будь-які ідеї?

Відповіді:


486

Подивіться на white-spaceвласність, використану так:

th {
    white-space: nowrap;
}

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

На пов'язаній сторінці наведені різні варіанти для white-space:

нормальне
Це значення спрямовує користувальницьких агентів на згортання послідовностей пробілів та розрив ліній у міру необхідності для заповнення рядків.

pre
Це значення не дозволяє користувачам-агентам згортати послідовності пробілів. Рядки розбиваються лише на збережених символах нового рядка.

nowrap
Це значення згортає пробіл, як для 'нормального', але пригнічує розриви рядків у тексті.

попереднє обгортання
Це значення не дозволяє користувачам-агентам згортати послідовності пробілів. Рядки розбиваються на збережених символах нового рядка і за необхідності заповнюють рядки.

попередня лінія
Це значення спрямовує агентів користувача на згортання послідовностей пробілів. Рядки розбиваються на збережених символах нового рядка і за необхідності заповнюють рядки.


8
не працює для поля введення та кнопки в тій же комірці. випадковим чином місця внизу.
Doomsknight

16
Tableелемент повинен мати table-layout:fixed;для того, щоб це працювало.
daniloquio

@Doomsknight Ви знайшли спосіб досягти цього за допомогою поля введення та іншого елемента в тій же комірці?
loveNoHate

пробіл: перед; те, що мені було потрібно, коли -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 . Замість цього використовуйте таблиці стилів.
Вісбукі

Примітка.якщо використовувати недбало, цей атрибут може призвести до надмірно широких комірок.
АріфМустафа

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>

Довідка:

Як запобігти розриву рядків у дефісах у всіх браузерах


Варто відзначити , що nobrтег не є стандартним, як зазначено в загальноприйнятому відповіді , пов'язаного з цією відповіддю: stackoverflow.com/a/8755071/4257
pkaeding

Абсолютно вірно. Ваш бал добре сприйнятий. Я прочитав усі ці коментарі, відзначив досвід відповідних коментаторів і здійснив судження. Дефіс трохи хитрий. (Примітка: питання, яке ви пов’язали у своєму коментарі, те саме, що я пов’язав у своїй відповіді)
cssyphus

Так, це мало бути те саме питання. Я просто хотів бути впевненим, що застереження було розміщено тут, якщо хтось знайде цю відповідь у майбутньому, і не потурбується прочитати пов'язані посилання.
pkaeding

1

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

Якщо вам цікаво, як це працює для інтерфейсу матеріалу при будівництві в React, ось як ви додасте це до свого <TableHead>компонента:

<TableHead style={{ whiteSpace: 'nowrap'}}>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.