2016-11-27 10 views
1

ページ内に、インラインブロック要素を含む固定幅のコンテナがあり、その後にテキストが続きます。インラインブロック後の改行を防止する

場合によっては、このテキストがコンテナよりも広いことがあります。これが起こると、私はそれを次の行に壊したい(以下の最初の例に見られるように)。

場合によっては、このテキストもコンテナ内に表示するには幅があります。これが起こると、超過分を切り捨てる(overflow: hidden)ようにします。しかし、これを明白な方法でやってみると、inline-block要素の後に改行が挿入されます(2番目の例のように)。

インラインブロック要素とテキストの最初の文字を<nobr>要素(3番目の例または同等のラッパーであるwhite-space:nowrapラッパー)にまとめることで回避できますが、これは本当に物事について行く醜い方法。これを行うより良い方法はありますか?

.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

* "または同等の空白:nowrap'ラッパー..." * - なぜそれは醜いのですか?それがそうであるように思える。実際、私はそのフレーズを見落とし、そのアプローチを示唆する答えを提示しようとしていました。 ''タグは同じソリューションの1997年版です(https://developer.mozilla.org/nl/docs/Web/HTML/Element/nobr)ので、私はそれを選択しますCSSのバージョン。 – GolezTrol

+0

'.container'に' white-space:nowrap; 'を追加しないだけで探していますか?または、私が何かを逃している –

+0

@GolezTrol私は、テキストの最初の文字が残りの部分から分割されている必要があるため、 "醜い"解決策と考えています。また、テキストが別の要素にラップされる必要がある場合(たとえばリンクの場合)は不可能です。 – duskwuff

答えて

0

最初の文字は<nobr>要素である必要はありませんので、これは動作しますように見えます:

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

それでも醜い、間違いなく少ない醜いです! FirefoxとChromeで少なくとも動作します。

+0

ありがとう!奇妙なことに、 'white-space:nowrap'を直接インラインブロックスパンに適用することはできません。それは別の要素を含む必要があります。 – duskwuff

関連する問題