2016-03-23 14 views
0

Beim Ausführen des folgenden Snippets auf FF 45 zeigt das erste der beiden Felder nur eine einzige Zeile wie "ThisIsATest ...", während das zweite Feld zwei Zeilen mit dem gesamten Text durch den Bindestrich getrennt zeigt . In Chrome und Edge zeigen beide Felder zwei Zeilen an. Meine Frage: Wie kann ich den Text in der ersten Pause nach dem Bindestrich in FF machen? Offensichtlich hat es etwas mit der Länge des folgenden Textes zu tun, aber was ist der Grund dafür?Zeilenumbruch nach Bindestrich

.test { 
 
    width: 100px; 
 
    overflow: hidden; 
 
    text-overflow: ellipsis; 
 
    background: #00bcd4; 
 
    margin-bottom: 1rem; 
 
}
<div class="test"> 
 
    ThisIsATest-Test 
 
</div> 
 

 
<div class="test"> 
 
    ThisIsATest-Test123 
 
</div>

Ich möchte dieses Verhalten erreichen (die bereits in Chrome und Edge-Werke): Wenn der Text keine Bindestriche oder Leerzeichen enthält, kann es nicht brechen und die Show“. .. ". Wenn der Text ein Leerzeichen oder einen Bindestrich enthält, brechen Sie ihn gegebenenfalls ab.

Update: Auslassungszeichen und ein ähnliches Ergebnis erhalten:

Sie können Text-Überlauf entfernen. Jetzt wird der Text manchmal abgeschnitten, manchmal wird eine neue Zeile angezeigt. Ich sehe keinen Grund, warum zwei ähnliche divs (eines mit etwas mehr Inhalt) ein so unterschiedliches Verhalten zeigen sollten.

.test { 
 
    width: 100px; 
 
    overflow: hidden; 
 
    background: #00bcd4; 
 
    margin-bottom: 1rem; 
 
}
<div class="test"> 
 
    ThisIsATest-Test 
 
</div> 
 

 
<div class="test"> 
 
    ThisIsATest-Test123 
 
</div>

In FF 45.0.1 unter Windows 10, es sieht derzeit wie folgt aus:

Text sometimes getting cut-off, sometimes jumping into a new line

+0

Das Verhalten in Firefox korrekt ist. Aus irgendeinem Grund zeigt Chrome die Auslassungspunkte nicht wie gewünscht an. Aber das ist nicht das Gesamtproblem, ich weiß. – Rob

+0

Warum kann das Verhalten in FF als korrekt angesehen werden, wenn es manchmal eine neue Zeile zeigt und manchmal nicht? Dies sieht für mich nicht sehr konsistent aus ... –

+0

Sie geben den Überlauf als Ellipse an. Firefox macht das, während Chrome nicht ist. Ich bin mir nicht sicher, ob du das überhaupt willst. – Rob

Antwort

0

Wenn es sich um eine "echte" Bindestrich (dh ist, wenn Sie don‘ t muss das "-" angezeigt werden, wenn alles in eine Zeile passt, können Sie das Element "Soft Bindestrich" &shy;:

verwenden
ThisIsATest&shy;Test 
+0

Ich brauche eigentlich den Bindestrich. Es ist nur ein ziemlich seltsames Verhalten für mich: Längerer Text wird korrekt angezeigt (mit zwei Zeilen). Gibt es einen Grund dafür? –

0

Fügen Sie die Eigenschaften word-wrap: break-word; oder white-space: nowrap; zu Ihrer Testklasse hinzu und beide Divs werden das gleiche Verhalten erzeugen.

Zum Beispiel:

word-wrap: break-word;

Erzeugt zwei Zeilen.

.test { 
 
    width: 100px; 
 
    overflow: hidden; 
 
    word-wrap: break-word; 
 
    text-overflow: ellipsis; 
 
    background: #00bcd4; 
 
    margin-bottom: 1rem; 
 
}
<div class="test"> 
 
    ThisIsATest-Test 
 
</div> 
 

 
<div class="test"> 
 
    ThisIsATest-Test123 
 
</div>

white-space: nowrap;

Erzeugt eine Zeile mit Auslassungspunkten.

.test { 
 
    width: 100px; 
 
    overflow: hidden; 
 
    white-space: nowrap; 
 
    text-overflow: ellipsis; 
 
    background: #00bcd4; 
 
    margin-bottom: 1rem; 
 
}
<div class="test"> 
 
    ThisIsATest-Test 
 
</div> 
 

 
<div class="test"> 
 
    ThisIsATest-Test123 
 
</div>

+0

OK, tut mir leid. Ich hätte das ein bisschen mehr spezifizieren sollen. Ich möchte nicht, dass der Text in einer einzelnen Zeile angezeigt wird (deshalb habe ich die zweite Box erstellt - das ist das "gewünschte Verhalten"). Ich möchte, dass der Text nach dem Bindestrich bricht. Wenn kein Bindestrich vorhanden ist, sollte der Text in einer einzelnen Zeile angezeigt werden. Dies funktioniert auch in Chrome und für längere Wörter nach dem Bindestrich in FF. Was ich nicht verstehe: Warum funktioniert es nicht mit meinem ersten Beispiel? –

+0

Aktualisiert! Wolltest du das? –

+0

Mh, nicht wirklich - Entschuldigung. Die Sache ist: Verwenden von Word-Wrap: Break-Word wird das Wort "zufällig" brechen. Ich möchte das Wort nach einem Leerzeichen oder Bindestrich brechen. (Nur fyi: Auf Deutsch gibt es viele zusammengesetzte Substantive (die genaue Übersetzung ist nicht bekannt). Anstatt "Smartphone App" zu sagen, sagen wir "Smartpone-App". Es ist also ein bisschen mehr, als zwei Wörter nebeneinander stehen zu haben zu einander (geteilt durch ein Leerzeichen), aber in vielen Fällen macht es Sinn, sie am Bindestrich zu trennen.) –

0

fand ich diesen Trick auf dieser blog, aber ich weiß nicht, ob das Problem behoben wird.

.test { 
 
    width: 100px; 
 
    overflow: hidden; 
 
    text-overflow: ellipsis; 
 
    background: #00bcd4; 
 
    margin-bottom: 1rem; 
 

 
    -ms-word-break: break-all; 
 
    word-break: break-all; 
 

 
    word-break: break-word; 
 

 
    -webkit-hyphens: auto; 
 
    -moz-hyphens: auto; 
 
    -ms-hyphens: auto; 
 
    hyphens: auto; 
 
}
<div class="test"> 
 
    ThisIsATest-Test 
 
</div> 
 

 
<div class="test"> 
 
    ThisIsATest-Test123 
 
</div>

+0

Ihr Testcode bricht so: "ThisIsATest-Te" + "st" wegen Wortbruch: break-all ; Btw: word-break: break-word existiert nicht und ich nehme an du meinst word-wrap –

+0

Das tag ** word-break ** existiert aber ich habe es nie benutzt. Die [Spezifikation] (http://www.w3schools.com/cssref/css3_pr_word-break.asp) auf W3. –

+0

Sie verwendeten Wort-Break: Break-Word und ich wollte erwähnen, dass es nicht gültig ist. Mögliche Werte für den Wortumbruch sind: normal, break-all, keep-all, initial und inherit. Sie haben Break-Word verwendet, das einfach nicht angegeben ist. Lies deinen Code nochmal und du wirst sehen was ich meine :-) Ich habe es hier hervorgehoben: [link] (http://snag.gy/9OMkT.jpg) –

Verwandte Themen