Es gibt Zeiten, in denen eine sehr lange Textzeichenfolge den Container eines Layouts überlaufen kann.
Zum Beispiel:

Hier ist ein großes Snippet mit allen beteiligten CSS-Playern
.dont-break-out {
/* These are technically the same, but use both */
overflow-wrap: break-word;
word-wrap: break-word;
-ms-word-break: break-all;
/* This is the dangerous one in WebKit, as it breaks things wherever */
word-break: break-all;
/* Instead use this non-standard one: */
word-break: break-word;
/* Adds a hyphen where the word breaks, if supported (No Blink) */
-ms-hyphens: auto;
-moz-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
Das würde das Problem für uns lösen

Hier ist die Erklärung
overflow-wrap: break-word;sorgt dafür, dass lange Zeichenfolgen umbrechen und nicht aus dem Container ausbrechen. Sie können auchword-wrapverwenden, da laut Spezifikation beides einfach alternative Namen füreinander sind. Einige Browser unterstützen das eine und nicht das andere. Firefox (getestet v43) unterstützt nurword-wrap. Blink (getestet Chrome v45) akzeptiert beides.- Wenn
overflow-wrapallein verwendet wird, brechen Wörter fast überall, wo es nötig ist. Wenn es ein „akzeptables Trennzeichen“ gibt (wie zum Beispiel ein Bindestrich), wird dort getrennt, ansonsten macht es einfach, was es tun muss. - Sie könnten auch
hyphensverwenden, denn dann wird versucht, geschmackvoll einen Bindestrich hinzuzufügen, wo getrennt wird, falls der Browser dies unterstützt (Blink tut dies zum Zeitpunkt des Schreibens nicht, Firefox schon). word-break: break-all;weist den Browser an, dass es in Ordnung ist, das Wort überall zu trennen, wo es nötig ist. Obwohl er das ohnehin irgendwie tut, bin ich mir nicht sicher, in welchen Fällen es zu 100 % notwendig ist.
Wenn Sie bei der Silbentrennung manueller vorgehen möchten, können Sie diese in Ihrem Markup vorschlagen. Mehr dazu finden Sie auf der MDN-Seite.
Browser-Unterstützung
Für word-break
Diese Daten zur Browserunterstützung stammen von Caniuse, wo weitere Details verfügbar sind. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 44 | 15 | 5.5 | 12 | 9 |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 127 | 9.0-9.2 |
Für hyphens
Diese Daten zur Browserunterstützung stammen von Caniuse, wo weitere Details verfügbar sind. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 88 | 6* | 10* | 12* | 5.1* |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 127 | 4.2-4.3* |
Für overflow-wrap
Diese Browser-Support-Daten stammen von Caniuse, das weitere Details enthält. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 23 | 49 | 11 | 18 | 6.1 |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 4.4 | 7.0-7.1 |
Für text-overflow
Diese Daten zur Browserunterstützung stammen von Caniuse, wo weitere Details verfügbar sind. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 4 | 7 | 6 | 12 | 3.1 |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 2.1 | 3.2 |
Überlauf mit Ellipsen verhindern
Ein weiterer Ansatz ist, den Text komplett abzuschneiden und Ellipsen hinzuzufügen, wo die Textzeichenfolge den Container erreicht
.ellipses {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
Das Schöne an der Verwendung von text-overflow ist, dass es universell unterstützt wird.
Beispiele
Siehe den Pen lange Wörter mit Silbentrennung von CSS-Tricks (@css-tricks) auf CodePen.
Siehe den Pen Ellipsen von CSS-Tricks (@css-tricks) auf CodePen.
Siehe den Pen Zeilenumbruch herausfinden von Chris Coyier (@chriscoyier) auf CodePen.
Weitere Ressourcen
- Michael Scharnagl: Umgang mit langen Wörtern in CSS
- Kenneth Auchenberg: Wortumbruch/Silbentrennung mit CSS
- MDN: word-wrap, word-break, hyphens
- Spezifikation: CSS Text Level 3
Für SCSS-affine
Dies sind die Arten von Dingen, die man bei Bedarf in den Code einstreut, daher eignen sie sich gut für @mixins
@mixin word-wrap() {
overflow-wrap: break-word;
word-wrap: break-word;
-ms-word-break: break-all;
word-break: break-all;
word-break: break-word;
-ms-hyphens: auto;
-moz-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
@mixin ellipsis() {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
Anscheinend ist
overflow-wrapdas neueword-wrap, da es aus der CSS3-Spezifikation entfernt wurde. Ich habe gerade vor ein paar Tagen davon gelesen, zusammen mit einigen anderen interessanten vorgeschlagenen typografischen Eigenschaften.http://www.impressivewebs.com/new-css3-text-wrap/
Bemerkenswert: Obwohl word-wrap aus der Spezifikation entfernt wurde, gibt es derzeit keine Browserunterstützung für die Ersatz-Eigenschaft!
Aber bevor Sie nun alles, was Sie gerade an word-wrap hinzugefügt haben, überstürzt ändern – aus der Spezifikation: „Aus Legacy-Gründen können UAs auch ‚word-wrap‘ als alternativen Namen für die Eigenschaft ‚overflow-wrap‘ akzeptieren.“
Das umgebende Element muss eine angegebene Breite haben, sonst bricht Ihre lange URL immer noch aus der Box aus.
Sie haben ein Problem gelöst, das ich hatte. Großartig!
Danke, agentsuperdave, dieser Tipp war äußerst nützlich. Für eine Tabelle bedeutet dies, dass Sie „table-layout: fixed“ verwenden und Breiten für Ihre tds angeben sollten.
Quentin, ich liebe dich Mann, du hast mir den Arsch gerettet! ;)
Übrigens. Ich habe keine Breite deklariert, nur „table {table-layout: fixed; width: 100%}“ und „table a {word-wrap: break-word}“.
Ich habe keine „td“-Breite deklariert, nur…
Ja, das funktioniert auch. In meinem Fall brauchte ich eine andere Breite für jede Spalte.
Vielen Dank dafür, ich habe etwa eine Stunde lang nach einer Lösung für word-break in FF gesucht. Prost
Ihre robuste Lösung hat mein Problem behoben, meine URL wollte nicht brechen, während sie sich innerhalb einer Tabelle befand, die für Responsivität (display:block) gestylt war. Prost!
Beispiel für
zu
Wenn Ihnen diese Optionen nicht genug Kontrolle geben, schauen Sie sich diese Frage auf SO an, insbesondere zwei meiner Antworten (;-), http://stackoverflow.com/a/6298738/736006 und http://stackoverflow.com/a/6508168/736006.
Danke, Mann!
Ich habe versucht, dies zu verwenden
// Im obigen Beitrag angegeben
-ms-word-break: break-all;
word-break: break-all;
-webkit-hyphens: auto;
-moz-hyphens: auto;
hyphens: auto;
aber es funktionierte nicht.
Bis ich hinzugefügt habe
float:left und eine Breite.
Jetzt funktioniert es perfekt.
Das funktioniert in allen Browsern gut.
Ich habe alle diese Lösungen ausprobiert und sie funktionieren perfekt in Safari, Firefox und IE, aber nicht im neuesten Chrome.
Die, die ich jetzt verwende, ist diese aus dem Artikel
Der Artikel besagt, dass sie in Chrome funktionieren sollte. Weiß jemand, was das Problem sein könnte?
Wenn Sie Compass verwenden, gibt es ein Mixin, das all diesen Code enthält
Danke für den Tipp @Damon. Leider verwende ich Compass nicht und habe nicht die Möglichkeit, es in der Firma, für die ich arbeite, zu verwenden.
Aber enthält der Code im Mixin auch Code, der für Chrome funktioniert?
Danke, das war sehr nützlich und hat mir geholfen, ein Problem mit Links zu beheben, die im Pre-Footer-Bereich meiner Drupal-Website nicht umgebrochen wurden. Vielleicht interessiert Sie das Ergebnis hier im dritten Pre-Footer-Bereich: http://www.mtusesthis.com/
Dies bricht jedes Wort um, sodass selbst wenn ich z. B. „teams“ am Ende einer Zeile habe und es nicht ganz passt, das „s“ in die nächste Zeile geschoben wird. Ich möchte nur Wörter umbrechen, die länger als die Breite meines Div sind. Mache ich hier etwas falsch? Gibt es noch etwas anderes, das ich tun kann, um dies zu erreichen? Danke.
Ich denke, Sie sollten darüber nachdenken, eine JS-Bibliothek einzubinden, um eine solche Verfeinerung zu erhalten – z. B.: https://code.google.com/p/hyphenator/
es hat eine Einstellung, um dieses Verhalten zu erreichen: minwordlength : 10
Großartig! Es funktioniert wie ein Zauberstift ^. ^, danke für den Tipp!
Und die zu langen E-Mail-Adressen??
Wirklich, für mehr Kontrolle, schauen Sie sich die oben genannten Stack Overflow-Posts an. Funktioniert sehr gut, wenn JS eine Option ist.
Dave hat Recht, und tatsächlich sollte JS eine Option sein, da es im Wesentlichen um Ästhetik geht.
Danke Chris! Ich habe mir darüber den Kopf zerbrochen!
Funktionierte wie ein Zauberstift in FF, Chrome und Safari für mich, habe IE nicht geprüft
Ich arbeite mit DocBook, es gibt PDF aus. Der Inhalt meiner Tabellenzellen wird nicht mit langen Wörtern ohne Leerzeichen umgebrochen. Ich glaube, unser CSS ist eine docbook_custom.xsl. Wo würde ich diese Anweisungen für Wortumbruch und -trennung einfügen?
Sehr nützlich, in der Tat. Danke.
Die Tatsache, dass
break-allWörter an seltsamen Stellen bricht, war für mich ein No-Go, also habe ich es entfernt und stattdessenword-wrap: break-wordhinzugefügt.Mein Mixin sieht jetzt so aus
Es scheint in Chrome, Safari, Firefox, IE9-10 OK zu funktionieren, es sei denn, ich verpasse etwas.
Ihre Lösung scheint besser zu funktionieren als die Lösung des Artikels. Das Problem, das ich hatte, war, dass die superlangen Wörter wie erwartet in die nächste Zeile umgebrochen wurden, aber ein kleineres Wort, das in die nächste Zeile passen könnte, wurde ebenfalls umgebrochen, anstatt einfach in die nächste Zeile „geschoben“ zu werden.
sehen Sie das „schlechte“ (Chris‘ Lösung), beachten Sie, dass das „d“ abgeschnitten ist: http://imgur.com/avo2kxS,i0aqqwX#1
sehen Sie das gute (Sugarenia’s Lösung): http://imgur.com/avo2kxS,i0aqqwX
Danke! Ich habe danach gesucht.
großartig! Hat mich in die richtige Richtung gewiesen, als ich ein Layout-Problem aufgrund langer Wörter / Zeichenfolgen / Texte hatte. Danke.
PHP und HTML5 zur Rettung
$url = str_replace(‘/’,’/<WBR>’,htmlentities($url))
Natürlich, tun Sie dies nicht mit der URL im HREF, sondern nur mit der, die angezeigt wird.
Vielen Dank für den Tipp. Funktioniert mit einem langen Wort innerhalb einer %-Breiten-Tabelle
Vielen Dank. Ich habe eine Tabelle, die sich über 100 % der Bildschirmbreite erstreckt, die ersten beiden Spalten enthalten Zeitstempel und Spitznamen (letztere variable Breite) und die dritte enthält Text und sollte den verfügbaren Platz ausfüllen. Lange URLs fügten jedoch weiterhin eine horizontale Scrollleiste hinzu, da sie die Tabelle über 100 % der Bildschirmbreite hinaus ausdehnten. Ihr CSS hat den Text in der Textspalte genau dann umbrechen lassen, wenn er sollte, nicht mehr (zwischen beliebigen Zeichen) oder weniger (mit horizontalem Scrollen leben). Danke.
Wenn all diese Vorschläge fehlschlagen, stellen Sie sicher, dass Ihr langer Text NICHT von { white-space: nowrap } betroffen ist (Facepalm)
Ellipsen funktionieren für einzeiliges Abschneiden. Es gibt jedoch noch keine gute Möglichkeit, mehrzeilige Elemente abzuschneiden. Angenommen, Ihr Text erstreckt sich über 3 (oder mehr) Zeilen, Sie möchten aber bis zu 2 Zeilen Text zulassen, bevor die Ellipse angezeigt wird. Es gibt keine gute Möglichkeit, dies zu tun.
Hier sind einige Möglichkeiten: https://css-tricks.de/line-clampin/
Versuchen Sie vielleicht diese JavaScript-Lösung
Sie schneidet auf eine festgelegte Anzahl von Zeilen zu, fügt eine Ellipse hinzu und das responsiv. Sie erweitert den kopierten Text auch zugänglich per Klick, aber diese Funktion könnte bearbeitet werden.
Wir haben es mit großem Erfolg bei Tesco Food Love Stories eingesetzt
https://www.tesco.com/food-love-stories/
Das hatte ich schon gesehen, aber wie Sie in diesem Artikel schrieben: „Es gibt ein paar Möglichkeiten, dies zu erreichen, keine davon ist spektakulär.“ Ich wollte mir die Clamp.js-Methode ansehen, aber das Beispiel in Ihrem Artikel scheint nicht zu funktionieren, und das hat mich davon abgehalten, weiter zu recherchieren. Ich wünschte nur, es gäbe einen Standardweg, dies zu tun.
Es ist erwähnenswert, dass Chrome sich beim Verwenden auf Inline-Elementen innerhalb einer Tabelle anders verhält als IE 11 und Edge.
Chrome funktioniert wie erwartet, aber IE 11 und Edge erfordern, dass die Mixin-Klasse auf das ‚td‘ selbst angewendet wird
Silbentrennung ist eine gute Technik. Während Ellipsen Cross-Browser-Probleme haben.
Ich lande immer zu etwa 90 % der Zeit auf dieser Website für FUNKTIONIERENDE CSS-Antworten. Es ärgert mich ungemein, wie viele andere Websites Ratschläge geben und ihre Lösungen nicht funktionieren. StackOverflow ist der größte Schuldige. Sehr gute Sachen zum Umbrechen langer Texte. Wir werden es auf unserer Website verwenden.
@Dave Murray: So WAHR :D
Schöne Mixins, super!
Das Einzige, was für mich in allen Browsern funktioniert, ist
word-break: break-word;Doh, entschuldigen Sie, Tippfehler. Machen Sie das
word-break: break-all;Bei der Verwendung von Flex funktioniert es manchmal nicht.
Sie müssen verwenden
Auf dem Block zusätzlich zu den
break-word-Regeln.Laut diesem CodePen
http://codepen.io/anon/pen/YWZWJV
Ich kann eine reine URL in einer Tabellenzelle in IE nicht umbrechen lassen. Wie hier erwähnt
IE erwartet, dass das CSS auf die td und/oder die Tabelle angewendet wird, was den gesamten Text darin umbricht, nicht nur die URL. Kennt jemand einen Ausweg?
Perfekte Lösung. Der Unterschied zwischen break-word und break-all hat mich umgebracht, in einem dynamisch dimensionierten Div mit display:table-cell;
Funktioniert brillant. Habe es gerade so in einer neuen Website mit einer langen E-Mail-Adresse verwendet.
Das ist genial! Danke für deine Arbeit Chris!
Chris, danke für die Tipps! Zum Zeitpunkt des Schreibens unterstützt Chrome Hyphen immer noch nicht richtig, sodass die Wrap/Break-Lösung immer noch notwendig ist. Firefox bricht lange URLs beim / -Zeichen mit nur Hyphen.
Vielen Dank! Es war sehr hilfreich, ich habe sogar einen Kommentar hinterlassen ;-)
Guten Morgen, Genossen. Es ist sehr gut möglich, dass ich es übersehen habe, aber gibt es eine Möglichkeit, dies so einzurichten, dass es nur greift, wenn der Bildschirm eine bestimmte Größe hat? Zum Beispiel, wenn ein Titel oder eine Überschrift auf Desktop und Tablet gut aussieht, aber auf einem Smartphone vom Bildschirm nach rechts läuft. Wenn das passiert, wäre es großartig, wenn etwas die Punktgröße des betreffenden Elements verringern würde.
Genau das, was ich brauchte! Vielen Dank!
Ich habe mich heute damit herumgeschlagen: Es gibt ein Problem in IE11 und Edge – wenn Sie
display: flexauf dem Container haben, der den Text mit einer langen URL/einem langen Wort enthält, wird er nicht umbrochen. Dieser Pen zeigt eine reduzierte Demo: https://codepen.io/jdsteinbach/pen/JBZrLR?editors=1100Hallo Chris! Laut dem Chicago Manual of Style: „Um Verwirrung zu vermeiden, sollte eine Adresse, die einen Bindestrich enthält, niemals am Bindestrich getrennt werden; und auch kein Bindestrich sollte hinzugefügt werden, um eine E-Mail-Adresse oder URL zu trennen.“
Wenn Sie diesem Rat folgen, sollte
hyphen: autonur für lange Wörter gelten, da es Bindestriche hinzufügt, um einen Zeilenumbruch zu erzwingen. Aber selbst wenn Sie URLs nicht mehr mithyphen: autoansprechen, können sie immer noch umgebrochen werden, wenn sie Bindestriche enthalten. Und das kann immer noch zu Verwirrung führen, da nicht klar ist, ob der Bindestrich Teil der URL ist oder zum Trennen des Absatzes hinzugefügt wurde.Laut der neuesten Version von Text Module Level 3 ist dies mit dem Wert ‚none‘ der Eigenschaft
hyphenmöglich, der definiert ist als: „Wörter werden nicht mit Silbentrennung versehen, auch wenn Zeichen innerhalb des Wortes explizit Silbentrennungschancen definieren“.CSS Text Level 3 definiert nicht die genauen Regeln für die Silbentrennung oder was eine Silbentrennungschance ist, aber Unicode.org tut dies: „Leerzeichen und Bindestriche werden verwendet, um Brüche zu bestimmen“. Leider bricht
hyphen: noneWörter immer noch an Bindestrichen (einer explizit definierten Silbentrennungschance), obwohl die Spezifikation besagt, dass dies nicht der Fall sein sollte.Ich versuche, lange Dateinamen unterzubringen mit
overflow: hidden;
text-overflow: ellipsis;
width: 70%;
und es funktioniert gut, wenn die Dateinamen aus Buchstaben, Leerzeichen oder „_“ bestehen, aber wenn es ein „-“ gibt, bricht das Wort über mehrere Zeilen und Ellipsen sind nicht implementiert.
Gibt es eine Möglichkeit, das zu überwinden?
Vielen Dank im Voraus :)
In Internet Explorer 11 und in Microsoft Edge 42.17134.1.0 wird der Text 9999\XY5514Z in einem div-Tag angezeigt. Aufgrund des Backslashs „\“ im genannten Text wird der Text in 9999 und XY5514Z aufgeteilt. Derselbe Code funktioniert in Chrome und Firefox wie erwartet. Ich habe word-break: normal; in CSS und erwarte, dass der gesamte Text „9999\XY5514Z“ in die nächste Zeile umgebrochen wird, und nicht der gesamte Text nach „\“, wenn nicht genügend Platz in der Zeile ist, in der das Wort gerendert wird. In Internet Explorer 11 und in Microsoft Edge 42.17134.1.0 wird das Ergebnis als 9999 und dann der restliche Text in der nächsten Zeile \XY5514Z angezeigt. In Chrome und Firefox wird der Text wie erwartet als 9999\XY5514Z angezeigt. Ich möchte nicht, dass das Wort in IE und Edge am „\“-Backslash umgebrochen wird.
Wie sieht es mit sehr langen E-Mails aus wie: [email protected]?
Danke! Sie haben mir sehr geholfen
Siehe auch: das Tag
<wbr>.MDN gibt ein Daumen runter für „word-break: break-word;“, aber das hat mein Problem gelöst, wo nichts anderes hier vorgeschlagen hat, bis ich es zu meiner Absatzformatierung hinzugefügt habe.
Vielen Dank, das war sehr hilfreich. Ich hatte Schwierigkeiten, die URLs innerhalb des Rahmens meiner HTML-E-Mails zu halten. Ich habe dieses CSS hinzugefügt und es hat wie ein Zauber funktioniert. Vielen Dank!
Vielen Dank :), ich habe stundenlang nach einer Lösung dafür gesucht! In WordPress RTL mit den englischen Links bricht die Seitenbreite. Es scheint, dass der Theme-Entwickler nur „word-wrap: break-word;“ hinzugefügt hat und es in Firefox gut funktionierte, aber nicht in Chrome. Nachdem ich dann overflow-wrap: break-word; hinzugefügt habe, sieht es jetzt gut aus.
Wow! Vielen Dank!! Das hat mein URL-Overflow-Problem gelöst!