Ich baue eine mehrsprachige Website auf, wobei der Eigentümer mir bei einigen Übersetzungen hilft. Einige der angezeigten Phrasen benötigen Zeilenumbrüche, um den Stil der Site beizubehalten.
Leider ist der Besitzer kein Computer-Typ. Wenn er also sieht, foo<br />bar
dass die Möglichkeit besteht, dass er die Daten während der Übersetzung irgendwie ändert.
Gibt es eine CSS-Lösung (neben der Änderung der Breite), die auf ein Element angewendet werden kann, das nach jedem Wort unterbrochen wird?
(Ich weiß, dass ich dies in PHP tun kann, aber ich frage mich, ob es einen raffinierten Trick gibt, den ich in CSS nicht kenne, um dasselbe zu erreichen, vielleicht in den CJK-Funktionen.)
BEARBEITEN
Ich werde versuchen zu zeichnen, was passiert:
---------------- ----------------
| Short Word | | Gargantuan |
| | | Word |
---------------- ----------------
Das lange Wort bricht automatisch, das kurze Wort nicht. Ich möchte, dass es so aussieht:
---------------- ----------------
| Short | | Gargantuan |
| Word | | Word |
---------------- ----------------
quelle
Antworten:
Verwenden
Dabei
<parent-width>
ist die Breite des übergeordneten Elements (oder ein beliebig hoher Wert, der nicht in eine Zeile passt). Auf diese Weise können Sie sicher sein, dass nach einem einzelnen Buchstaben sogar ein Zeilenumbruch auftritt. Funktioniert mit Chrome / FF / Opera / IE7 + (und wahrscheinlich sogar mit IE6, da es auch Wortabstände unterstützt).quelle
.parent { word-spacing: 100px; }
Wo100px
ist die Breite des übergeordneten Elements ? Das Problem ist, dass diese Lösung nicht funktioniert, wenn Sie einen fließenden Elternteil haben.word-spacing: 100000px
und Sie müssen sich keine Sorgen machen, dass das übergeordnete Element in Bezug auf die Breite flüssig ist. Das Festlegen eines Wortabstands von 100% wäre sinnvoll gewesen (es wäre 100% der übergeordneten Breite gewesen), aber in Prozent ausgedrückte Werte werden für diese CSS-Eigenschaft nicht unterstützt.word-spacing: 2em;
Bei einer mobilen Breite möchte ich, dass sie einzeilig sind:word-spacing: unset;
Die Antwort von @HursVanBloob funktioniert nur mit übergeordneten Containern mit fester Breite, schlägt jedoch bei Containern mit flüssiger Breite fehl .
Ich habe viele Immobilien ausprobiert, aber nichts hat wie erwartet funktioniert. Schließlich kam ich zu dem Schluss, dass es
word-spacing
sehr gut funktioniert , einen sehr großen Wert zu geben .Für moderne Browser können Sie auch die CSS-
vw
Einheit verwenden (visuelle Breite in% der Bildschirmgröße).quelle
Eine alternative Lösung wird unter Separater Satz auf ein Wort pro Zeile beschrieben , indem
display:table-caption;
auf das Element angewendet wirdquelle
Versuchen Sie es mit
white-space: pre-line;
. Es wird ein Zeilenumbruch erstellt, wo immer ein Zeilenumbruch im Code angezeigt wird, ignoriert jedoch das zusätzliche Leerzeichen (Tabulatoren und Leerzeichen usw.).Schreiben Sie zuerst Ihre Wörter in separate Zeilen in Ihrem Code:
Wenden Sie dann den Stil auf das Element an, das die Wörter enthält.
Seien Sie jedoch vorsichtig , jeder Zeilenumbruch im Code innerhalb des Elements führt zu einem Zeilenumbruch. Wenn Sie also Folgendes schreiben, führt dies zu einem zusätzlichen Zeilenumbruch vor dem ersten und nach dem letzten Wort:
Es gibt einen großartigen Artikel über CSS-Tricks , in dem die anderen Leerraumattribute erläutert werden.
quelle
white-space
die Frage beantworten können. Entschuldigung, aber ich verstehe nicht wie.white-space: pre;
" zu verwenden, um diese Zeilenumbrüche anzuzeigen, wie es ein<pre>
Tag tun würde? Das könnte funktionieren, und ein Zeilenumbruch sollte für Übersetzer natürlicher aussehen als ein<br />
. Ich werde versuchen, Ihre Antwort zu bearbeiten, um sie hinzuzufügen :)white-space: pre-line;
wäre es wahrscheinlich angemessener, da es zusätzliche Leerzeichen in Ihrem Code ignoriert. Ich werde die Antwort aktualisieren.white-space: pre;
für IE 7 hinzufügen .Wenn Sie zusätzlich zu den gegebenen Antworten aus verschiedenen Lösungen wählen möchten ...
Eine alternative Methode besteht darin, dem Container eine Breite von 0 zu geben und sicherzustellen, dass ein Überlauf sichtbar ist. Dann wird jedes Wort überlaufen und in einer eigenen Zeile stehen.
Oder Sie können einen dieser neu vorgeschlagenen
width
Werte verwenden, sofern diese zum Zeitpunkt des Lesens noch vorhanden sind.quelle
Sie können nicht jedes Wort in CSS als Ziel festlegen. Mit ein bisschen jQuery könnten Sie es jedoch wahrscheinlich.
Mit jQuery können Sie jedes Wort in eine
<span>
und dann eine CSS-festgelegte Spanne einschließen, aufdisplay:block
die es in eine eigene Zeile gesetzt wird.Theoretisch natürlich: P.
quelle
:first-child
Trick oder etwas da draußen geben ...https://jsfiddle.net/bm3Lfcod/1/
Für diejenigen, die nach einer Lösung suchen, die in einem flexiblen übergeordneten Container mit einem in beiden Dimensionen flexiblen untergeordneten Container funktioniert. z.B. Navbar-Schaltflächen.
quelle
CSS
Eigenschaft zu geben, die Sie geben können. Sagen Sie eine Eigenschaft, die verursachen könntebrowser reflow
Ich hatte das gleiche Problem und keine der Optionen hier hat mir geholfen. Einige Mail-Dienste unterstützen bestimmte Stile nicht. Hier ist meine Version, die das Problem gelöst hat und überall funktioniert, wo ich sie überprüft habe:
ODER mit CSS:
quelle
Die beste Lösung ist die
word-spacing
Immobilie.Fügen Sie die
<p>
in einem Container mit einer bestimmten Größe hinzu (Beispiel300px
) und nachdem Sie diese Größe als Wert im Wortabstand hinzugefügt haben.HTML
CSS
Auf diese Weise wird Ihr Satz immer gebrochen und in eine Spalte gesetzt, aber das Mit des Absatzes ist dynamisch.
Hier ein Beispiel Codepen
quelle
In meinem Fall,
hat perfekt funktioniert, hoffe es hilft jedem anderen Newcomer wie mir.
quelle