138 votes

Indique un endroit préféré pour un saut de ligne

Supposons que je veuille afficher ce texte dans une cellule d'un tableau HTML :

Honey Nut Cheerios, Wheat Chex, Grape-Nuts, Rice Krispies, Some random cereal with a very long name, Honey Bunches of Oats, Wheaties, Special K, Froot Loops, Apple Jacks

et je veux que la ligne s'interrompe de préférence après l'une des virgules.

Existe-t-il un moyen d'indiquer au moteur de rendu HTML d'essayer de rompre à un endroit donné, et de le faire d'abord avant d'essayer de rompre après l'un des espaces, sans en utilisant des espaces insécables ? Si j'utilise des espaces insécables, la largeur est augmentée sans condition. I vouloir le saut de ligne doit avoir lieu après l'un des espaces, si l'algorithme de retour à la ligne a essayé avec les virgules d'abord et n'a pas réussi à faire tenir la ligne.

J'ai essayé d'envelopper des fragments de texte dans <span> mais cela ne semble rien apporter d'utile.

<html>
  <head>
      <style type="text/css">
        div.box { width: 180px; }
        table, table td { 
          border: 1px solid; 
          border-collapse: collapse; 
        }
      </style>
  </head>
  <body>
    <div class="box">
      <table>
      <tr>
          <td>lorem ipsum</td>
          <td>lorem ipsum</td>
          <td>lorem ipsum</td>
      </tr>
      <tr>
          <td>lorem ipsum</td>
          <td>
            <span>Honey Nut Cheerios,</span>
            <span>Wheat Chex,</span>
            <span>Grape-Nuts,</span>
            <span>Rice Krispies,</span>
            <span>Some random cereal with a very long name,</span>
            <span>Honey Bunches of Oats,</span>
            <span>Wheaties,</span>
            <span>Special K,</span>
            <span>Froot Loops,</span>
            <span>Apple Jacks</span>
          </td>
          <td>lorem ipsum</td>
      </tr>
      </table>
    </div>
  </body>
</html>

note : Il semble que le CSS3 text-wrap: avoid est ce que je veux, mais je n'arrive pas à le faire fonctionner.

186voto

Eggert Jóhannesson Points 281

En utilisant

span.avoidwrap { display:inline-block; }

et en enveloppant le texte que je veux garder ensemble dans

<span class="avoidwrap"> Text </span>

il sera d'abord enveloppé dans des blocs préférentiels, puis dans des fragments plus petits selon les besoins.

31voto

Stephan Weinhold Points 1493

Il existe une solution RWD très soignée de la part de Dan Mall que je préfère. Je vais l'ajouter ici parce que d'autres questions concernant les sauts de ligne réactifs sont marquées comme des doublons de celle-ci.
Dans votre cas, vous auriez :

<span>Honey Nut Cheerios, <br class="rwd-break">Wheat Chex, etc.</span>

Et une ligne de CSS dans votre requête média :

@media screen and (min-width: 768px) {
    .rwd-break { display: none; }
}

13voto

Une solution simple consiste à utiliser la fonction caractère espace de largeur nulle &#8203; Il est utilisé pour fabriquer des pauses à l'intérieur des mots à des endroits spécifiques .

Est-ce que le exactement le contraire de la espace insécable &nbsp; (en fait, le jointure de mots &#8288; )( jointure de mots est la version à largeur nulle de espace insécable )

(il existe également d'autres codes qui ne sont pas cassants, comme le code trait d'union non brisant &#8209; ) (vous trouverez ici une réponse détaillée sur les différentes "variantes" des nbsp )

Si vous souhaitez une solution HTML uniquement (sans CSS/JS), vous pouvez utiliser une combinaison des éléments suivants espace de largeur nulle et le espace insécable Cependant, il s'agirait d'une véritable désordonné et l'écriture d'une version lisible par l'homme demande un peu d'effort.

ctrl + c , ctrl + v aide

exemple :

   Honey&nbsp;Nut&nbsp;Cheerios,<!---->&#8203;<!--
-->Wheat&nbsp;Chex,<!---->&#8203;<!--
-->Grape&#8209;Nuts,<!---->&#8203;<!--
-->Rice&nbsp;Krispies,<!---->&#8203;<!--
-->Some&nbsp;random&nbsp;cereal&nbsp;with&nbsp;a&nbsp;very&nbsp;long&nbsp;name,<!---->&#8203;<!--
-->Honey&nbsp;Bunches&nbsp;of&nbsp;Oats,<!---->&#8203;<!--
-->Wheaties,<!---->&#8203;<!--
-->Special&nbsp;K,<!---->&#8203;<!--
-->Froot&nbsp;Loops,<!---->&#8203;<!--
-->Apple&nbsp;Jacks

illisible ? il s'agit du même HTML sans balises de commentaires :

   Honey&nbsp;Nut&nbsp;Cheerios,&#8203;Wheat&nbsp;Chex,&#8203;Grape&#8209;Nuts,&#8203;Rice&nbsp;Krispies,&#8203;Some&nbsp;random&nbsp;cereal&nbsp;with&nbsp;a&nbsp;very&nbsp;long&nbsp;name,&#8203;Honey&nbsp;Bunches&nbsp;of&nbsp;Oats,&#8203;Wheaties,&#8203;Special&nbsp;K,&#8203;Froot&nbsp;Loops,&#8203;Apple&nbsp;Jacks

Cependant, comme le rendu html des courriers électroniques n'est pas complètement standardisé, cette solution est adaptée à ce type d'utilisation puisqu'elle utilise pas de CSS/JS

De plus, si vous utilisez ce produit en combinaison avec l'un des produits de la catégorie <span> -Vous aurez un contrôle total sur les solutions basées sur la technologie. algorithme de rupture de ligne

(note éditoriale :)

Le seul problème que je pourrais rencontrer serait de modifier dynamiquement les points de rupture privilégiés. Cela nécessiterait une manipulation JS constante de la taille proportionnelle de chaque travée, et la gestion de ces entités HTML dans le texte.

6voto

Ian Boyd Points 50743

La chose que vous êtes censé faire (utiliser l'Unicode pour ce qu'il est censé faire) donne les meilleurs résultats :

enter image description here

<table border="1">
  <thead>
    <tr><th>Method</th><th>Results</th></tr>
  </thead>
  <tbody>
    <tr><td>&lt;wbr></td><td>Honey Nut Cheerios,<wbr> Wheat Chex,<wbr> Grape&#8209;Nuts,<wbr> Rice Krispies,<wbr> Some random cereal with a very long name,<wbr> Honey Bunches of Oats,<wbr> Wheaties,<wbr> Special K,<wbr> Froot Loops,<wbr> Apple Jacks</td></tr>
    <tr><td>U+200B Zero width Space</td><td>Honey Nut Cheerios,&#8203;Wheat Chex, &#x200b;Grape&#8209;Nuts, &#x200b;Rice Krispies, &#x200b;Some random cereal with a very long name, &#x200b;Honey Bunches of Oats, &#x200b;Wheaties, &#x200b;Special K, &#x200b;Froot Loops, &#x200b;Apple Jacks</td></tr>
    <tr><td>U+00A0 No&#8209;break Space</td><td>Honey&nbsp;Nut&nbsp;Cheerios, Wheat&nbsp;Chex, Grape&#8209;Nuts, Rice&nbsp;Krispies, Some&nbsp;random&nbsp;cereal&nbsp;with&nbsp;a&nbsp;very&nbsp;long&nbsp;name, Honey&nbsp;Bunches&nbsp;of&nbsp;Oats, Wheaties, Special&nbsp;K, Froot&nbsp;Loops, Apple&nbsp;Jacks</td></tr>
  </tbody>
</table>

2voto

Marcel Points 14151

Avec votre marquage ci-dessus, utilisez span { white-space:nowrap } . C'est le mieux que l'on puisse espérer.

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