Comment faire pour empêcher le texte dans une cellule de tableau d'habillage

285

Est-ce que quelqu'un sait comment empêcher le texte d'une cellule de tableau de s'habiller? C'est pour l'en-tête d'un tableau, et l'en-tête est beaucoup plus long que les données en dessous, mais j'ai besoin qu'il s'affiche sur une seule ligne. C'est correct si la colonne est très large.

Le code HTML de ma table (simplifiée) ressemble à ceci:

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

Le titre lui-même est enveloppé dans un div à l'intérieur de la thbalise pour des raisons liées au javascript sur la page.

Le tableau sort avec les en-têtes sur plusieurs lignes. Cela ne semble se produire que lorsque le tableau est suffisamment large, car le navigateur essaie d'éviter le défilement horizontal. Dans mon cas, cependant, je veux un défilement horizontal.

Des idées?

pkaeding
la source

Réponses:

486

Jetez un œil à la white-spacepropriété, utilisée comme ceci:

th {
    white-space: nowrap;
}

Cela forcera le contenu de <th>à s'afficher sur une seule ligne.

À partir de la page liée, voici les différentes options pour white-space:

normal
Cette valeur indique aux agents utilisateurs de réduire les séquences d'espaces blancs et de couper les lignes si nécessaire pour remplir les zones de ligne.

pre
Cette valeur empêche les agents utilisateurs de réduire les séquences d'espaces blancs. Les lignes ne sont rompues qu'au niveau des caractères de nouvelle ligne préservés.

nowrap
Cette valeur réduit l'espace blanc comme pour «normal», mais supprime les sauts de ligne dans le texte.

pre-wrap
Cette valeur empêche les agents utilisateurs de réduire les séquences d'espace blanc. Les lignes sont coupées au niveau des caractères de nouvelle ligne conservés et, si nécessaire, pour remplir les zones de ligne.

pre-line
Cette valeur indique aux agents utilisateurs de réduire les séquences d'espaces blancs. Les lignes sont coupées au niveau des caractères de nouvelle ligne conservés et, si nécessaire, pour remplir les zones de ligne.

Owen
la source
8
ne fonctionne pas pour le champ de saisie et le bouton dans la même cellule. place au hasard ci-dessous.
Doomsknight
16
Tableélément doit avoir table-layout:fixed;pour que cela fonctionne.
daniloquio
@Doomsknight Avez-vous trouvé un moyen d'y parvenir avec un champ de saisie et un autre élément dans la même cellule?
loveNoHate
espace blanc: pré; était ce dont j'avais besoin car -28.04 passait entre le - et le 28.04
Brent
1
@Doomsknight J'ai eu le même problème avec une case à cocher et je l'ai résolu en mettant à jour le CSS avecinput { 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
la source
6
Notez que cela nowrapa été déprécié. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Utilisez plutôt des feuilles de style.
wisbucky
Remarque. s'il est utilisé avec négligence, cet attribut peut entraîner des cellules excessivement larges.
ArifMustafa
1
@wisbucky Comment "utilise-t-on les feuilles de style"?
rogerdpack
22

Il existe au moins deux façons de procéder:

Utilisez l'attribut nowrap à l'intérieur de la balise "td":

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

Utilisez des espaces insécables entre vos mots:

<th>Really&nbsp;long&nbsp;column&nbsp;heading</th>
Sergey Golovchenko
la source
6
Notez que cela nowrapa été déprécié. w3.org/TR/html401/struct/tables.html#h-11.2.6 . Utilisez plutôt des feuilles de style.
wisbucky
6

J'en suis venu à cette question qui avait besoin d'empêcher l'habillage du texte au trait d'union.

Voici comment je l'ai fait:

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

Référence:

Comment éviter les sauts de ligne au niveau des tirets sur tous les navigateurs

cssyphus
la source
Il convient de noter que la nobrbalise n'est pas standard, comme indiqué dans la réponse acceptée liée à cette réponse: stackoverflow.com/a/8755071/4257
pkaeding
Très bien. Votre point est bien reçu. J'ai lu tous ces commentaires, j'ai noté l'expérience des commentateurs correspondants et j'ai rendu un jugement. Le tiret est un peu délicat. (Remarque: la question que vous avez liée dans votre commentaire est la même que celle que j'ai liée dans ma réponse)
cssyphus
Oui, c'était censé être la même question. Je voulais juste être sûr que la mise en garde a été publiée ici au cas où quelqu'un trouverait cette réponse à l'avenir et ne prendrait pas la peine de lire la référence liée.
pkaeding
1

À utiliser avec React / Material UI

Dans le cas où vous vous demandez comment cela fonctionne pour l'interface utilisateur matérielle lors de la construction dans React, voici comment ajouter ceci à votre <TableHead>composant:

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