644 votes

Le word-wrap dans un tableau HTML

J'ai utilisé word-wrap: break-word pour envelopper le texte dans div et span s. Cependant, cela ne semble pas fonctionner dans les cellules de tableau. J'ai un tableau réglé sur width:100% avec une ligne et deux colonnes. Le texte en colonnes, bien qu'il soit stylisé avec le style ci-dessus word-wrap n'est pas enveloppée. Le texte dépasse alors les limites de la cellule. Cela se produit sur Firefox, Google Chrome et Internet Explorer.

Voici à quoi ressemble la source :

td {
  border: 1px solid;
}

<table style="width: 100%;">
  <tr>
    <td>
      <div style="word-wrap: break-word;">
        Looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong word
      </div>
    </td>
    <td><span style="display: inline;">Short word</span></td>
  </tr>
</table>

Le long mot ci-dessus est plus grand que les limites de ma page, mais il n'y a pas de rupture avec le HTML ci-dessus. J'ai essayé les suggestions ci-dessous d'ajouter text-wrap:suppress y text-wrap:normal mais aucun n'a aidé.

0 votes

Ajoutez le trait d'union. <tr> <td style="text-wrap:normal;word-wrap:break-word"> Ceci est une pré-sentation. </td> </tr>

0 votes

Malheureusement, le texte qui s'y trouve provient d'un contenu généré par les utilisateurs. Bien sûr, je pourrais le prétraiter et ajouter le trait d'union, mais j'espérais qu'il y aurait un meilleur moyen.

0 votes

Je m'excuse d'avoir utilisé le mot 'hard-hyphen'. En HTML, le trait d'union simple est représenté par le caractère "-" (- ou -). Le trait d'union doux est représenté par le caractère référence entité &shy ; ( ou )

687voto

Marc Stober Points 3856

Ce qui suit fonctionne pour moi dans Internet Explorer. Notez l'ajout de l'élément table-layout:fixed Attribut CSS

td {
  border: 1px solid;
}

<table style="table-layout: fixed; width: 100%">
  <tr>
    <td style="word-wrap: break-word">
      LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongWord
    </td>
  </tr>
</table>

0 votes

@ewomac ouais, parfois je dois juste ignorer les erreurs de VS2010 à propos du HTML/CSS si je sais que ça va fonctionner dans le navigateur.

0 votes

Je ne visualise JAMAIS la page dans VS et je code manuellement le balisage. Si c'est trop compliqué, la page a probablement besoin d'être retravaillée et VS ne fait qu'injecter trop de choses et d'une manière que je ne veux pas pour que ma page reste propre.

2 votes

@marc !! mec, merci beaucoup pour ça. J'ai été chargé de construire une version mobile du site d'un client qui utilise des tableaux, et j'avais du mal à faire fonctionner ce système ! table-layout:fixed a fait l'affaire !

201voto

Pratik Stephen Points 592
<td style="word-break:break-all;">longtextwithoutspace</td>

ou

<span style="word-break:break-all;">longtextwithoutspace</span>

0 votes

Je peux confirmer que l'approche de Pratik fonctionne également avec Safari sur iOS (iPhone).

0 votes

Pour contourner le problème des mots courts et des mots longs, vous pourriez éventuellement prétraiter le texte et n'insérer que les mots longs (disons, > 40 caractères) dans la balise <span> .

9 votes

Ce n'est pas supporté par firefox, opera

163voto

Rick Grundy Points 511

C'est peu probable, mais vérifiez avec Firebug (ou similaire) que vous n'héritez pas accidentellement de la règle suivante :

white-space:nowrap;

Cela peut remplacer le comportement de retour à la ligne que vous avez spécifié.

0 votes

C'est ce qui a été hérité et qui a brisé l'emballage du mot pour moi.

1 votes

@RickGrundy Par quoi le changez-vous si vous avez ce problème ?

16 votes

@cokedude Je suis bien trop en retard ici, mais c'est white-space:normal;

60voto

psychotik Points 11937

Il s'avère qu'il n'y a pas de bon moyen de faire ça. Le plus proche que j'ai trouvé est d'ajouter "overflow:hidden ;" au div autour de la table et de perdre le texte. La vraie solution semble être d'abandonner le tableau. En utilisant des divs et un positionnement relatif, j'ai réussi à obtenir le même effet, sans l'héritage de l'application <table>

2015 UPDATE : C'est pour ceux qui, comme moi, veulent cette réponse. Après 6 ans, ça marche, merci à tous les contributeurs.

* { /* this works for all but td */
  word-wrap:break-word;
}

table { /* this somehow makes it work for td */
  table-layout:fixed;
  width:100%;
}

0 votes

Bizarre pour moi, quand j'ai enlevé le commentaire // this works for all but td ça marche.

32voto

loungerdork Points 659

Comme mentionné, mettre le texte dans div fonctionne presque. Il suffit de spécifier le width de la div ce qui est une bonne chose pour les mises en page statiques.

Cela fonctionne sur FF 3.6, IE 8, Chrome.

<td>
  <div style="width: 442px; word-wrap: break-word">
    <!-- Long Content Here-->
  </div>
</td>

2 votes

Vous pouvez ajouter min-width: 100% ainsi que width pour assurer la div occupe la totalité de la cellule.

0 votes

Je veux faire un retour à la ligne avec une virgule (,). Comme Long,Long,Long,Long,Long . Je veux l'envelopper après toute virgule (,).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X