Comment puis-je forcer une longue chaîne sans aucun blanc à enrouler?


193

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

Par exemple:

ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA

Quel serait le sélecteur CSS pour forcer ce texte à être enveloppé dans un html:textareaou dans un xul:textbox?


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

Réponses:


273

pour les éléments de 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>


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

1
cela ne fonctionne que dans une nouvelle vague de navigateurs - voir caniuse.com/#search=word-break
Michal Bernhard

9
@Michael: La réponse utilise la règle de "retour à la ligne", pas celle de "rupture de mot"; le premier est pris en charge tel qu'il est utilisé dans presque tous les navigateurs utilisés aujourd'hui. Lorsque le "soutien partiel" est indiqué, il apparaît que la valeur "break-word" pour la règle "word-wrap" est toujours viable.
Robusto

2
La propriété a été renommée overflow-wrapdepuis dans les normes, mais wrod-wrapest largement mise en œuvre.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
Fonctionne également avec "display: table-cell", était nécessaire dans mon cas
César León

107

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

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


4
Bonne suggestion, j'ai appris quelque chose de nouveau aujourd'hui, merci!
Matteo Conta

2
Merci pour cette solution. J'avais du mal à faire fonctionner quelque chose comme ça dans une table, et cette solution est la seule que j'ai trouvée qui fonctionne dans IE, Firefox et Chrome.
Farinha

1
+1, cela fonctionne mieux car il couvre plus de cas, même si la question concernait un cas plus particulier.
montréaliste le

2
Vous pouvez également utiliser la <wbr>balise, qui sert le même objectif de fournir une possibilité de saut de ligne facultatif.
justisb

7
Regardez si vous faites cela dans des choses qui pourraient être copiées et collées.
alex

42

Voici quelques réponses très utiles:

Comment empêcher de longs mots de casser ma div?

pour vous faire gagner du temps, cela peut être résolu avec css:

white-space: -moz-pre-wrap; /* Mozilla */
white-space: -hp-pre-wrap; /* HP printers */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: pre-wrap; /* CSS 2.1 */
white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
word-wrap: break-word; /* IE */
word-break: break-all;

4
+1 parce qu'il mentionne le mot-break: break-all; qui a fonctionné pour moi dans IE9
Nick Benedict

3
word-break: break-all;était le seul qui fonctionnait dans Android WebView pour moi.
Stan

Merci pour word-break: break-all;!
Lonnie Best

18

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 un div à l'intérieur d'un autre div au lieu de td. J'ai utilisé overflow:auto, car il montre tout le texte à la fois dans mes navigateurs Opera et IE.


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

12

Je ne pense pas que vous puissiez le faire avec CSS. Au lieu de cela, à des «longueurs de mots» régulières le long de la chaîne, insérez un tiret logiciel HTML:

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

Cela affichera un trait d'union à la fin de la ligne, où il se termine, qui peut ou non être ce que vous voulez.

Remarque Safari semble envelopper la longue chaîne de <textarea>toute façon, contrairement à Firefox.


Wow, je ne savais même pas à ce sujet. Soigné!
Daniel Schaffer

Je n'en savais rien non plus. Double Neat!
Karl

11

Utilisez une méthode CSS pour forcer l'habillage d'une chaîne qui n'a pas d'espaces blancs. Trois méthodes:

1) Utilisez la propriété d'espace blanc CSS. Pour couvrir les incohérences du navigateur, vous devez le déclarer de plusieurs façons. Il suffit donc de mettre votre chaîne looooong dans un élément de niveau bloc (par exemple, div, pre, p) et de donner à cet élément le CSS suivant:

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) utilisez le mixin force-wrap de Compass .

3) J'étais juste en train d'examiner cela et je pense que cela pourrait également fonctionner (mais je dois tester le support du navigateur plus complètement):

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

Référence: encapsulation de contenu


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

1
# 3 ne fonctionne que s'il y a des occasions de casser par des mots. Une chaîne trop longue ne se casse pas (testé sur Chrome 52.0.2743.82).
collapsar

8

Mon chemin à parcourir (quand il n'y a pas de moyen approprié d'insérer des caractères spéciaux) via CSS:

-ms-word-break: break-all;
word-break: break-all;
word-break: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;

Comme on le trouve ici: http://kenneth.io/blog/2012/03/04/word-wrapping-hypernation-using-css/ avec quelques recherches supplémentaires à y trouver.


5

Pour word-wrap:break-word;travailler pour moi, je devais m'assurer que le displayétait réglé sur block, et que la largeur était réglée sur l'élément. Dans Safari, il devait avoir un ptag et le widthdevait être installé ex.


3

Si vous utilisez PHP, la fonction wordwrap fonctionne bien pour cela: http://php.net/manual/en/function.wordwrap.php

La solution CSS word-wrap: break-word;ne semble pas cohérente dans tous les navigateurs.

D'autres langages côté serveur ont des fonctions similaires - ou peuvent être construits à la main.

Voici comment fonctionne la fonction wordwrap PHP:

$string = "ACTGATCGAGCTGAAGCGCAGTGCGATGCTTCGATGATGCTGACGATGCTACGATGCGAGCATCTACGATCAGTCGATGTAGCTAGTAGCATGTAGTGA";

$wrappedstring = wordwrap($string,50,"&lt;br&gt;",true);

Cela enveloppe la chaîne à 50 caractères avec une balise <br>. Le paramètre «true» force la chaîne à être coupée.


Vous pouvez mélanger cette solution avec la solution de Remy pour insérer des espaces de largeur nulle: wordwrap ($ longtext, 5, "& # 8203;", true);
MV.

3
<textarea style="width:100px; word-wrap:break-word;">
  place your text here
</textarea>

3

Utiliser la <wbr>balise:

ACTGATCG<wbr>AGCTGAAG<wbr>CGCAGTGC<wbr>GATGCTTC<wbr>GATGATGC

Je pense que c'est mieux que d'utiliser un espace de largeur nulle &#8203;qui pourrait causer des problèmes lorsque vous copiez le texte.


2

Dans le cas où la table n'est pas de taille fixe, la ligne ci-dessous a fonctionné pour moi:

style="width:110px; word-break: break-all;"

1

le réglage widthet l'ajout ont floatfonctionné pour moi :-)

width:100%;
float:left;

C'est une réponse complète et facile, je pense que le gars qui a posté ce problème à l'origine devrait utiliser la largeur: 100%; avec flotteur: gauche; sur l'élément qui contient cette chaîne et son problème sera résolu. alors pourquoi cette réponse n'est-elle pas pertinente?
TechBrush.Org

parce que ce gars qui a signalé ce problème ne pense pas que votre solution a fonctionné il y a cinq ans.
Pierre

2
Oui, mais ce forum ne concerne pas seulement ce type mais son forum et d'autres personnes confrontées à des problèmes similaires comme moi aujourd'hui peuvent également en bénéficier.
TechBrush.Org
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.