Como impedir que o texto em uma célula da tabela seja quebrado

285

Alguém sabe como posso impedir que o texto em uma célula da tabela seja quebrado? Isso é para o cabeçalho de uma tabela e o cabeçalho é muito mais longo que os dados abaixo, mas eu preciso que ele seja exibido em apenas uma linha. Tudo bem se a coluna for muito larga.

O HTML da minha tabela (simplificada) fica assim:

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

O cabeçalho em si é envolvido em uma div dentro da thtag por motivos pertencentes ao javascript na página.

A tabela está saindo com os títulos agrupados em várias linhas. Isso parece acontecer apenas quando a tabela é suficientemente larga, pois o navegador está tentando evitar a rolagem horizontal. No meu caso, porém, quero rolagem horizontal.

Alguma ideia?

pkaeding
fonte

Respostas:

485

Dê uma olhada na white-spacepropriedade, usada assim:

th {
    white-space: nowrap;
}

Isso forçará o conteúdo de <th>a ser exibido em uma linha.

Na página vinculada, aqui estão as várias opções para white-space:

normal
Esse valor direciona os agentes do usuário a recolher seqüências de espaços em branco e interromper linhas conforme necessário para preencher caixas de linhas.

pre
Esse valor evita que os agentes do usuário colapsem sequências de espaço em branco. As linhas são quebradas apenas em caracteres de nova linha preservados.

nowrap
Esse valor recolhe o espaço em branco como 'normal', mas suprime as quebras de linha no texto.

pre-wrap
Esse valor evita que os agentes do usuário colapsem sequências de espaço em branco. As linhas são quebradas nos caracteres de nova linha preservados e, conforme necessário, para preencher as caixas de linha.

pré-linha
Esse valor direciona os agentes do usuário a recolher sequências de espaço em branco. As linhas são quebradas nos caracteres de nova linha preservados e, conforme necessário, para preencher as caixas de linha.

Owen
fonte
8
não funciona para o campo de entrada e botão na mesma célula. coloca aleatoriamente abaixo.
Doomsknight
16
TableO elemento deve ter table-layout:fixed;para que isso funcione.
Daniloquio 14/08/12
@Doomsknight Você encontrou uma maneira de alcançá-lo com um campo de entrada e outro elemento na mesma célula?
loveNoHate
espaço em branco: pré; era o que eu precisava como -28,04 estava enrolando entre o - e 28.04
Brent
1
@Doomsknight Eu tive o mesmo problema com a caixa de seleção e resolvê-lo através da actualização do CSS cominput { display: inline; }
Programster
66
<th nowrap="nowrap">

ou

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

ou

<th class="nowrap">
<style type="text/css">
.nowrap { white-space: nowrap; }
</style>
Grant Wagner
fonte
6
Observe que nowrapfoi preterido. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Use folhas de estilo.
wisbucky
Nota. se usado de forma descuidada, esse atributo pode resultar em células excessivamente largas.
ArifMustafa 2/10
1
@wisbucky Como alguém "usa folhas de estilo"?
rogerdpack 30/04
22

Há pelo menos duas maneiras de fazer isso:

Use o atributo nowrap dentro da tag "td":

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

Use espaços inquebráveis ​​entre suas palavras:

<th>Really&nbsp;long&nbsp;column&nbsp;heading</th>
Sergey Golovchenko
fonte
6
Observe que nowrapfoi preterido. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Use folhas de estilo.
wisbucky
6

Cheguei a esta pergunta que precisava impedir a quebra de texto no hífen.

Foi assim que eu fiz:

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

Referência:

Como evitar quebras de linha em hífens em todos os navegadores

cssyphus
fonte
Vale a pena notar que a nobrtag é não-padrão, como fora apontado na resposta aceita ligada nesta resposta: stackoverflow.com/a/8755071/4257
pkaeding
Muito bem. Seu ponto é bem recebido. Li todos esses comentários, observei a experiência dos comentaristas correspondentes e fiz uma chamada de julgamento. O hífen é um pouco complicado. (Nota: a questão é ligada em seu comentário é o mesmo que eu ligado na minha resposta)
cssyphus
Sim, era para ser a mesma pergunta. Eu só queria ter certeza de que a advertência foi publicada aqui, caso alguém encontrasse essa resposta no futuro e não se desse ao trabalho de ler a referência vinculada.
precisa saber é
1

Para uso com a interface do usuário React / Material

Caso você esteja aqui imaginando como isso funciona para a interface do usuário do material ao criar no React, veja como você adiciona isso ao seu <TableHead>componente:

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