2016-11-27 6 views
1

In einer Seite habe ich einen Container mit fester Breite, der ein Inline-Block-Element enthält, gefolgt von einem Text.Zeilenumbruch nach Inline-Block verhindern

Manchmal ist dieser Text breiter als der Container. Wenn dies passiert, möchte ich, dass es in die nächste Zeile springt (wie im ersten Beispiel unten zu sehen).

Manchmal ist dieser Text auch zu breit, um im Container angezeigt zu werden. Wenn dies passiert, möchte ich, dass der Überschuss abgeschnitten wird (overflow: hidden). Wenn ich dies jedoch auf die naheliegende Weise versuche, wird nach dem Inline-Block-Element ein Zeilenumbruch eingefügt (wie im zweiten Beispiel zu sehen ist).

Ich kann umgehen, indem Sie das Inline-Block-Element und den ersten Buchstaben des Textes zusammen in einem <nobr> Element (wie im dritten Beispiel gesehen - oder einem gleichwertigen white-space:nowrap Wrapper), aber das scheint wie ein wirklich hässliche Art, über Dinge zu gehen. Gibt es einen besseren Weg, dies zu tun?

.container { 
 
    outline: 2px solid blue; 
 
    width: 150px; 
 
    overflow: hidden; 
 
    margin: 10px; 
 
} 
 

 
.inlineblock { 
 
    display: inline-block; 
 
    width: 30px; height: 1.5em; vertical-align: middle; 
 
    background: gray; 
 
}
<div class="container"> 
 
    <span class="inlineblock"></span>line breaks only at spaces 
 
</div> 
 

 
<div class="container"> 
 
    <span class="inlineblock"></span>widetextwidetextwidetext second line 
 
</div> 
 

 
<div class="container"> 
 
    <nobr><span class="inlineblock"></span>w</nobr>idetextwidetextwidetext ugly workaround 
 
</div>

+0

* ".. oder ein äquivalenter' white-space: nowrap' Wrapper ... "* - Warum ist das hässlich? Scheint so, als ob es genau das ist. Tatsächlich habe ich diesen Satz übersehen und wollte eine Antwort geben, die diesen Ansatz nahelegt. Ein "" -Tag ist die Version von 1997 derselben Lösung und [formal existiert nicht] (https://developer.mozilla.org/nl/docs/Web/HTML/Element/nobr), also würde ich mich dafür entscheiden die CSS-Version. – GolezTrol

+0

Fügt 'white-space: nowrap;' nicht dem '.container' hinzu, wonach Sie suchen? Oder fehlt mir etwas –

+0

@GolezTrol Ich halte das für eine "hässliche" Lösung, weil es erfordert, dass das erste Zeichen des Textes vom Rest getrennt wird - bedenken Sie, wie das zum Beispiel in einer Vorlage aussehen würde. Es ist auch unmöglich, wenn der Text in ein anderes Element eingeschlossen werden muss (z. B. wenn es sich um einen Link handelt). – duskwuff

Antwort

0

Es sieht aus wie das erste Zeichen muss nicht im <nobr> Elemente sein, so dass dies funktionieren wird:

<nobr><span class="inlineblock"></span></nobr>wide... 

noch hässlich, aber auf jeden Fall weniger hässlich! Es funktioniert zumindest in Firefox und Chrome.

+0

Danke! Seltsamerweise funktioniert 'white-space: nowrap' nicht direkt auf den Inline-Blockbereich. es muss auf einem separaten containing-Element sein. – duskwuff

Verwandte Themen