218 votes

Comment forcer une longue chaîne sans blanc à être enveloppée ?

J'ai une longue chaîne (une séquence d'ADN). Elle ne contient aucun caractère d'espacement.

Par exemple :

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

Quel serait le sélecteur CSS qui forcerait ce texte à être enveloppé dans une balise html:textarea ou dans un xul:textbox ?

20 votes

Ironiquement, la chaîne ne se casse pas non plus dans Stack Overflow...

309voto

heeen Points 1836

Pour les éléments du bloc :

<textarea style="width:100px; word-wrap:break-word;">
  ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTC
</textarea>

pour les éléments en ligne :

<span style="width:100px; word-wrap:break-word; display:inline-block;"> 
   ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTC
</span>

1 votes

Il n'est pris en charge que par IE, Safari et FF3.1 (alpha).

0 votes

Je viens de tester votre solution avec le dernier FF . Cela a bien fonctionné.

1 votes

Cela ne fonctionne que dans la nouvelle vague de navigateurs - voir caniuse.com/#search=word-break

111voto

Remy Blank Points 2214

Lieu les espaces de largeur nulle aux endroits où vous souhaitez autoriser des pauses. L'espace de largeur nulle est &#8203; en HTML. Par exemple :

ACTGATCG&#8203;AGCTGAAG&#8203;CGCAGTGC&#8203;GATGCTTC&#8203;GATGATGC

2 votes

Merci pour cette solution. J'avais du mal à faire fonctionner quelque chose comme ça à l'intérieur d'un tableau, et cette solution est la seule que j'ai trouvée qui fonctionne dans IE, Firefox et Chrome.

1 votes

+1, cela fonctionne mieux car cela couvre plus de cas, même si la question portait sur un cas plus particulier.

2 votes

Vous pouvez également utiliser l'option <wbr> qui a le même objectif de fournir une possibilité optionnelle de saut de ligne.

20voto

Rani Points 109

Pour moi, cela fonctionne,

<td width="170px" style="word-wrap:break-word;">
  <div style="width:140px;overflow:auto">
    LONGTEXTGOESHERELONGDIVGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESLONGTEXTGOESHERELONGDIVLONGTEXTLONGTEXT
  </div>
</td>

Vous pouvez également utiliser une div à l'intérieur d'une autre div au lieu de td . J'ai utilisé overflow:auto Il s'agit d'une version très complète, qui affiche tout le texte à la fois dans mon navigateur Opera et IE.

0 votes

Cela n'a pas fonctionné pour moi. Je dois déplacer la propriété "word-wrap" dans la div et supprimer la propriété "overflow". Avec ces changements, cela fonctionne.

12voto

Peter Hilton Points 10580

Je ne pense pas que vous puissiez faire cela avec CSS. Au lieu de cela, à des "longueurs de mots" régulières le long de la chaîne, insérez un trait d'union HTML :

ACTGATCG&shy;AGCTGAAG&shy;CGCAGTGC&shy;GATGCTTC&shy;GATGATGC&shy;TGACGATG

Cela affichera un trait d'union à la fin de la ligne, à l'endroit où elle s'enroule, ce qui peut ou non correspondre à ce que vous souhaitez.

Notez que Safari semble envelopper la longue chaîne de caractères dans un fichier <textarea> de toute façon, contrairement à Firefox.

0 votes

Wow, je ne savais même pas que c'était le cas. C'est bien !

0 votes

Je ne le savais pas non plus. Double Neat !

12voto

Graeck Points 332

Utiliser une méthode CSS pour forcer l'habillage d'une chaîne de caractères qui ne contient pas d'espaces blancs. Trois méthodes :

1) Utiliser la propriété d'espacement CSS. Pour tenir compte des incohérences des navigateurs, vous devez la déclarer de plusieurs manières. Il suffit donc de placer votre looooongue chaîne de caractères dans un élément de niveau bloc (par exemple, div, pre, p) et de donner à cet élément la CSS suivante :

some_block_level_tag {
    white-space: pre;           /* CSS 2.0 */
    white-space: pre-wrap;      /* CSS 2.1 */
    white-space: pre-line;      /* CSS 3.0 */
    white-space: -pre-wrap;     /* Opera 4-6 */
    white-space: -o-pre-wrap;   /* Opera 7 */
    white-space: -moz-pre-wrap; /* Mozilla */
    white-space: -hp-pre-wrap;  /* HP Printers */
    word-wrap: break-word;      /* IE 5+ */
}

2) utiliser le force-wrap mixin de Compass .

3) Je viens d'étudier cette possibilité et je pense qu'elle pourrait également fonctionner (mais je dois tester le support du navigateur de manière plus complète) :

.break-me {
    word-wrap: break-word;
    overflow-wrap: break-word;
}

Référence : contenu de l'emballage

0 votes

Oui, le #3 fonctionne dans tous les navigateurs modernes et même dans l'ancien IE6+.

1 votes

Le numéro 3 ne fonctionne que s'il y a des possibilités de rompre avec les mots. Une chaîne trop longue n'est pas coupée (testé sur Chrome 52.0.2743.82).

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