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?

Pierre
la source
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>

heeen
la source
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

Rémy Blank
la source
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;
emik
la source
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.

Rani
la source
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.

Peter Hilton
la source
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

Graeck
la source
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.

Ben
la source
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.

innerurge
la source
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.

Dave
la source
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>

la source
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.

warvariuc
la source
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;"
rakpan
la source
1

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

width:100%;
float:left;
TechBrush.Org
la source
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