Word-wrap dans un tableau HTML

j'ai utilisé word-wrap: break-word pour envelopper le texte dans div s et span s. Cependant, il ne semble pas fonctionner dans les cellules de table. J'ai un tableau placé à width:100% , avec une ligne et deux colonnes. Texte en colonnes, bien que stylé avec le ci-dessus word-wrap , ne s'emballe pas. Il fait que le texte dépasse les limites de la cellule. Cela se produit sur Firefox, Google Chrome et Internet Explorer.

voici à quoi ressemble la source:

css lang-css prettyprint-override">td {
  border: 1px solid;
}
html lang-html prettyprint-override"><table style="width: 100%;">
  <tr>
    <td align="left">
      <div style="word-wrap: break-word;">Long Content</div>
    </td>
    <td align="right"><span style="display: inline;">Short Content</span>
    </td>
  </tr>
</table>

Long "Contenu" est plus large que les limites de ma page, mais il ne rompt pas avec le HTML ci-dessus. J'ai essayé les suggestions ci-dessous d'ajouter text-wrap:suppress et text-wrap:normal , mais ni aidé.

497
demandé sur Ruslan López 2009-08-11 08:01:28

22 réponses

les travaux suivants pour moi dans Internet Explorer. Notez l'ajout de la 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>
564
répondu Marc Stober 2015-05-29 23:34:10
<td style="word-break:break-all;">longtextwithoutspace</td>

ou

<span style="word-break:break-all;">longtextwithoutspace</span>
128
répondu Pratik Stephen 2009-10-08 17:01:45

un long shot, mais double-check avec Firebug (ou similaire) que vous n'héritez pas accidentellement la règle suivante:

white-space:nowrap;

cela peut annuler votre comportement de rupture de ligne spécifié.

101
répondu Rick Grundy 2014-06-02 18:43:04

S'avère Qu'il n'y a pas de bonne façon de le faire. Le plus proche que je suis venu est d'ajouter "overflow:hidden;" à la div autour de la table et de perdre le texte. La vraie solution semble être d'abandonner la table. En utilisant les divs et le positionnement relatif j'ai pu obtenir le même effet, moins l'héritage de <table>

2015 mise à jour: C'est pour ceux comme moi qui veulent cette réponse. Après 6 ans, cela fonctionne, 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%;
}
37
répondu psychotik 2015-09-19 18:39:51

comme mentionné, en mettant le texte dans div presque fonctionne. Vous avez juste à spécifier le width du div , qui est des dispositions statiques chanceux.

cela fonctionne sur FF 3.6, IE 8, Chrome.

<td>
  <div style="width: 442px; word-wrap: break-word">
    <!-- Long Content Here-->
  </div>
</td>
23
répondu loungerdork 2013-08-25 01:23:04

changer votre code

word-wrap: break-word;

à

word-break:break-all;

exemple

<table style="width: 100%;">
  <tr>
    <td align="left">
      <div style="word-break:break-all;">longtextwithoutspacelongtextwithoutspace Long Content, Long Content, Long Content, Long Content, Long Content, Long Content, Long Content, Long Content, Long Content, Long Content</div>
    </td>
    <td align="right"><span style="display: inline;">Short Content</span>
    </td>
  </tr>
</table>
15
répondu Duc Nguyen 2016-04-12 02:39:32

problème avec

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

est qu'il ne fonctionnera pas si bon lorsque le texte a certains espaces, par exemple

<td style="word-break:break-all;">long text with andthenlongerwithoutspaces</td>

si le mot andthenlongerwithoutspaces s'inscrit dans la cellule de la table dans une ligne mais long text with andthenlongerwithoutspaces ne le fait pas, le long mot sera cassé en deux, au lieu d'être enveloppé.

solution Alternative: insérer U+200B ( ZWSP ), U+00AD ( tiret souple ) ou U+200C ( ZWNJ ) en chaque long mot après chaque, disons, 20ème caractère.

12
répondu Piotr Findeisen 2017-05-23 12:02:51

texte de http://www.w3.org/TR/css3-text/#word-wrap

cette propriété spécifie si L'UA peut se briser dans un mot pour empêcher le débordement lorsqu'une chaîne par ailleurs Indestructible est trop longue pour s'insérer dans la boîte de ligne. Il n'a d'effet que lorsque "text-wrap' est "normal" ou "supprimer". Valeurs possibles

9
répondu adatapost 2009-08-11 04:41:51

Check out cette démo

<table style="width: 100%;">
<tr>
    <td align="left"><div style="word-break:break-all;">LongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWordLongWord</div>
    </td>
    <td align="right">
        <span style="display: inline;">Foo</span>
    </td>
</tr>
</table>

voici le lien vers lire

9
répondu abi1964 2011-08-12 06:21:48

testé dans IE 8 et Chrome 13.

<table style="table-layout: fixed; width: 100%">
    <tr>
        <td align="left">
              <div style="word-wrap: break-word;">
                 longtexthere
              </div>
        </td>
        <td align="right"><span style="display: inline;">Foo</span></td>
    </tr>
</table>

Cela fait que le tableau s'adapte à la largeur de la page et chaque colonne prend 50% de la largeur.

si vous préférez que la première colonne reprenne plus de la page, ajoutez un width: 80% au td comme dans l'exemple suivant, en remplaçant 80% par le pourcentage de votre choix.

<table style="table-layout: fixed; width: 100%">
    <tr>
        <td align="left" style="width:80%">
               <div style="word-wrap: break-word;">
                 longtexthere
               </div>
            </td>
        <td align="right"><span style="display: inline;">Foo</span></td>
    </tr>
</table>
9
répondu Waylon Flinn 2011-08-15 20:23:16

la seule chose à faire est d'ajouter de la largeur au <td> ou au <div> à l'intérieur du <td> en fonction de la disposition que vous voulez réaliser.

par exemple:

<table style="width: 100%;" border="1"><tr>
<td align="left" ><div style="word-wrap: break-word; width: 100px;">looooooooooodasdsdaasdasdasddddddddddddddddddddddddddddddasdasdasdsadng word</div></td>
<td align="right"><span style="display: inline;">Foo</span></td>
</tr></table>

ou

 <table style="width: 100%;" border="1"><tr>
    <td align="left" width="100" ><div style="word-wrap: break-word; ">looooooooooodasdsdaasdasdasddddddddddddddddddddddddddddddasdasdasdsadng word</div></td>
    <td align="right"><span style="display: inline;">Foo</span></td>

</tr></table>
9
répondu ShalomSam 2011-08-16 13:51:57

solution de contournement qui utilise débordement-enveloppement et fonctionne bien avec la disposition normale de la table + largeur de la table 100%

https://jsfiddle.net/krf0v6pw/

HTML

<table>
  <tr>
    <td class="overflow-wrap-hack">
      <div class="content">
        wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
      </div>
    </td>
  </tr>
</table>

CSS

.content{
  word-wrap:break-word; /*old browsers*/
  overflow-wrap:break-word;
}

table{
  width:100%; /*must be set (to any value)*/
}

.overflow-wrap-hack{
  max-width:1px;
}

prestations:

  • utilise overflow-wrap:break-word au lieu de word-break:break-all . Ce qui est mieux parce qu'il essaie de casser sur les espaces d'abord, et coupe le mot seulement si le mot est plus grand que c'est conteneur.
  • Non table-layout:fixed nécessaire. Utilisez votre auto-dimensionnement régulier.
  • N'est pas nécessaire pour définir fixe width ou fixe max-width en pixels. Définir % du parent si nécessaire.

testé en FF57, Chrome62, IE11, Safari11

9
répondu Alph.Dev 2018-01-05 22:08:05
<p style="overflow:hidden; width:200px; word-wrap:break-word;">longtexthere<p>
8
répondu Sarawut Positwinyu 2013-08-25 01:23:23

il semble que vous ayez besoin de définir word-wrap:break-word; sur un élément de bloc ( div ), avec une largeur spécifiée (non relative). Ex:

<table style="width: 100%;"><tr>
<td align="left"><div style="display:block; word-wrap: break-word; width: 40em;">loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong word</div></td>
<td align="right"><span style="display: inline;">Foo</span></td>
</tr></table>

ou en utilisant word-break:break-all selon la suggestion D'Abhishek Simon.

7
répondu stslavik 2011-08-24 05:51:27

la réponse qui a gagné la prime est correcte, mais cela ne fonctionne pas si la première rangée de la table a une cellule fusionnée/jointe (toutes les cellules obtiennent la largeur égale).

dans ce cas, vous devez utiliser les étiquettes colgroup et col pour l'afficher correctement:

<table style="table-layout: fixed; width: 200px">
<colgroup>
    <col style="width: 30%;">
    <col style="width: 70%;">
</colgroup>
<tr>
    <td colspan="2">Merged cell</td>
</tr>
<tr>
    <td style="word-wrap: break-word">VeryLongWordInThisCell</td>
    <td style="word-wrap: break-word">Cell 2</td>
</tr>
</table>
7
répondu Indrek 2013-01-11 07:15:01

ça marche pour moi:

<style type="text/css">
    td {

        /* CSS 3 */
        white-space: -o-pre-wrap;
        word-wrap: break-word;
        white-space: pre-wrap;
        white-space: -moz-pre-wrap;
        white-space: -pre-wrap;
    }

et l'attribut de table est:

   table {
      table-layout: fixed;
      width: 100%
   }

</style>
5
répondu Lavekush Agrawal 2014-06-02 18:39:30

si vous n'avez pas besoin d'une bordure de table, appliquez ceci:

table{
    table-layout:fixed;
    border-collapse:collapse;
}
td{
    word-wrap: break-word;
}
5
répondu Fusion 2015-12-11 13:43:53

Tables envelopper par défaut, donc assurez-vous que l'affichage des cellules de la table sont table-cell :

td {
   display: table-cell;
}
4
répondu ironsam 2009-08-11 05:19:51

Pour le manque de runnable extraits de code:

sans styles

td {
  border: 1px solid gold;
}
<table>
  <tr>
    <td>
      LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongWord
    </td>
  </tr>
</table>

utilisant table-layout: fixed pour table et word-wrap: break-word pour td ( réponse de Marc Stober )

td {
  border: 1px solid gold;
}
<table style="table-layout: fixed; width: 100%">
  <tr>
    <td style="word-wrap: break-word">
      LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongWord
    </td>
  </tr>
</table>

à l'Aide word-break: break-all ( Pratique la réponse de Stephen )

td {
  border: 1px solid gold;
}
<table>
  <tr>
    <td style="word-break: break-all">
      LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongWord
    </td>
  </tr>
</table>
4
répondu Krumia 2017-05-23 12:18:14

j'ai trouvé une solution qui semble fonctionner dans Firefox, Google Chrome et Internet Explorer 7-9. Pour faire une mise en page de table à deux colonnes avec un long texte d'un côté. J'ai cherché partout pour le même problème, et ce qui a fonctionné dans un navigateur a cassé l'autre, ou l'ajout de plus d'étiquettes à une table semble juste comme un mauvais codage.

Je n'ai pas utilisé de table pour cela. DL DT DD à la rescousse. Au moins pour la fixation d'une disposition en deux colonnes, qui est fondamentalement un glossaire/dictionnaire/mot-sens configuration.

<dl>
    <dt>test1</dt>
    <dd>Fusce ultricies mi nec orci tempor sit amet</dd>
    <dt>test2</dt>
    <dd>Fusce ultricies</dd>
    <dt>longest</dt>
    <dd>
        Loremipsumdolorsitametconsecteturadipingemipsumdolorsitametconsecteturaelit.Nulla
        laoreet ante et turpis vulputate condimentum. In in elit nisl. Fusce ultricies
        mi nec orci tempor sit amet luctus dui convallis. Fusce viverra rutrum ipsum,
        in sagittis eros elementum eget. Class aptent taciti sociosqu ad litora
        torquent per conubia nostra, per.
    </dd>
</dl>

et un style générique.

dl {
    margin-bottom:50px;
}

dl dt {
    background:#ccc;
    color:#fff;
    float:left;
    font-weight:bold;
    margin-right:10px;
    padding:5px;
    width:100px;
}

dl dd {
    margin:2px 0;
    padding:5px 0;
    word-wrap:break-word;
    margin-left:120px;
}

en utilisant le mot-wrap flottant et marge gauche, j'ai eu exactement ce dont j'avais besoin. J'ai juste pensé que je partagerais ça avec d'autres, peut-être que ça aidera quelqu'un d'autre avec une mise en page de style de définition à deux colonnes, avec des problèmes pour obtenir les mots à envelopper.

j'ai essayé d'utiliser word-wrap dans la cellule de table, mais il n'a fonctionné que dans Internet Explorer 9, (et Firefox et Google Chrome bien sûr) j'essaie surtout de réparer le navigateur Internet Explorer cassé ici.

3
répondu Yogurt The Wise 2017-06-13 23:51:58

style= "table-layout: fixed; width: 98%; word-wrap:break-word "

<table bgcolor="white" id="dis" style="table-layout:fixed; width:98%; word-wrap:break-word" border="0" cellpadding="5" cellspacing="0" bordercolordark="white" bordercolorlight="white" >

Demo - http://jsfiddle.net/Ne4BR/749 /

cela a bien fonctionné pour moi. J'ai eu de longs liens qui causeraient la table à dépasser 100% sur les navigateurs web. Testé sur IE, Chrome, Android et Safari.

Bobby

2
répondu Bobby 2014-10-01 18:37:55

une solution qui fonctionne avec Google Chrome et Firefox (non testé avec Internet Explorer) est de définir display: table-cell comme un élément de bloc.

1
répondu Antoine Guiral 2014-06-02 18:40:12