HTML要素間の改行を避ける


109

私はこの<td>要素を持っています:

<td><i class="flag-bfh-ES"></i>&nbsp;+34&nbsp;666&nbsp;66&nbsp;66&nbsp;66</td>

私はこれを単一の行に保つことを望んでいましたが、これは私が得るものです:

ここに画像の説明を入力してください

ご覧のとおり、旗と電話番号は別々の行にあります。&nbsp;電話番号の数字の間ではなく、フラグと電話番号の間に働いています。

レンダラーによって改行がまったく導入されないようにするにはどうすればよいですか?

回答:


144

コンテンツの改行を防ぐ方法はいくつかあります。使用&nbsp;は1つの方法であり、単語間で正常に機能しますが、空の要素と一部のテキストの間で使用しても、明確な効果はありません。同じことが、アイコンに画像を使用する、より論理的でアクセスしやすい方法にも当てはまります。

最も堅牢な代替手段はnobrマークアップを使用することです。これは非標準ですが、普遍的にサポートされており、CSSが無効になっている場合でも機能します。

<td><nobr><i class="flag-bfh-ES"></i> +34 666 66 66 66</nobr></td>

&nbsp;この場合、スペースの代わりに使用できますが、必須ではありません。)

別の方法はnowrap属性です(非推奨/廃止されましたが、いくつかのまれな癖を除いて、引き続き正常に動作します)。

<td nowrap><i class="flag-bfh-ES"></i> +34 666 66 66 66</td>

次に、CSS対応のブラウザーで機能するCSSの方法があり、もう少しコードが必要です。

<style>
.nobr { white-space: nowrap }
</style>
...
<td class=nobr><i class="flag-bfh-ES"></i> +34 666 66 66 66</td>

16
Re:nobr、mozillaは警告します "この機能は非標準であり、標準化の過程にありません。Webに面している本番サイトでは使用しないでください。すべてのユーザーに対して機能するわけではありません。実装と行動は将来変わるかもしれません。」- developer.mozilla.org/en-US/docs/Web/HTML/Element/nobr
ルーク

1
@ルーク、それは「標準的な」警告です。それらは非互換性(小さなものであっても)を記述しておらず、をサポートしていないブラウザについては触れていませんnobr。ありません。
Jukka K.Korpela、2014

23
nobrタグが使用するのと同じカテゴリーであるblinkw3.org/TR/html5/obsolete.html#obsoleteのどちらかが、あなたはWeb標準に向けて作業したり、あなたは混沌としたウェブに向けて作業します。選択はあなた次第です。
ルーク

8
ブートストラップを使用している場合、それに応じてstypeを設定するクラス「text-nowrap」がすでに定義されています。
Ratatwisker、2015

4
@ JukkaK.Korpela、HTML5は現在完成しており、非常に驚​​くべきことでnobrありませんが、まだ非推奨であり、「使用しないでください」
マーカス

57

そのtdのCSS:white-space: nowrap;それを解決する必要があります。


7

複数の単語または要素にこれが必要だが、TD全体または類似のものに適用できない場合は、Spanタグを使用できます。

<span style="white-space: nowrap">Text to break together</span>
    or 
<span class=nobr>Text to break together</span>

クラスバージョンを使用する場合は、承認された回答に記載されているとおりにCSSを設定してください。


2

場合は<i>タグがブロックとして表示され、probelmの原因ではない、これは動作するはずです:

<td style="white-space:nowrap;"><i class="flag-bfh-ES"></i>&nbsp;+34&nbsp;666&nbsp;66&nbsp;66&nbsp;66</td>


2

場合によっては(JavaScriptによって生成および挿入されたHTMLなど)、幅がゼロのジョイナーを挿入することもできます。

.wrapper{
  width: 290px;   
  white-space: no-wrap;
  resize:both;
  overflow:auto; 
  border: 1px solid gray;
}

.breakable-text{
  display: inline;
  white-space: no-wrap;
}

.no-break-before {
  padding-left: 10px;
}
<div class="wrapper">
<span class="breakable-text">Lorem dorem tralalalala LAST_WORDS</span>&#8205;<span class="no-break-before">TOGETHER</span>
</div>


2

これが本当の解決策です:

<td>
  <span class="inline-flag">
    <i class="flag-bfh-ES"></i> 
    <span>+34 666 66 66 66</span>
  </span>
</td>

css:

.inline-flag {
   position: relative;
   display: inline;
   line-height: 14px; /* play with this */
}

.inline-flag > i {
   position: absolute;
   display: block;
   top: -1px; /* play with this */
}

.inline-flag > span {
   margin-left: 18px; /* play with this */
}

例、常にテキストの前にある画像:

ここに画像の説明を入力してください


-1

nobrは信頼性が高すぎます。テーブルを使用してください

<table>
      <tr>
          <td> something </td>
          <td> something </td>
      </tr>
</table>

それはすべて同じ線上にあり、すべてがお互いに同じレベルであり、後で何かを変更したい場合は、はるかに多くの自由があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.