<td>内に空白のないテキストを折り返すにはどうすればよいですか?


89

私が使用した:

word-break:break-all;
table-layout:fixed;

テキストはChromeで折り返されますが、Firefoxでは折り返されません。

更新:ラップが不要になるようにデザインを変更することにしました。CSSの修正/ハックを整理しようとすると、イライラし、時間がかかりすぎることがわかりました。

回答:


202

これを試してみてください、これは「AAAAAAAAAAAAAAAAAAAAAARRRRRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGG」のようなもので機能すると思います

AARRRRRRRRRRRRRRRRRRRR
RRGGGGGGGGGGGGGGGGGGGG
G

私はグーグルのいくつかの異なるウェブサイトから私の例を取りました。私はこれをff5.0、IE 8.0、およびChrome10でテストしました。

.wrapword {
    white-space: -moz-pre-wrap !important;  /* Mozilla, since 1999 */
    white-space: -webkit-pre-wrap;          /* Chrome & Safari */ 
    white-space: -pre-wrap;                 /* Opera 4-6 */
    white-space: -o-pre-wrap;               /* Opera 7 */
    white-space: pre-wrap;                  /* CSS3 */
    word-wrap: break-word;                  /* Internet Explorer 5.5+ */
    word-break: break-all;
    white-space: normal;
}
<table style="table-layout:fixed; width:400px">
    <tr>
        <td class="wrapword">
        </td>
    </tr>
</table>

10
痛い!! これにより、不要な場合でも、任意のポイントで任意の単語を強制的に中断します。コンテナの幅を超えないようにする必要がある場合にのみ、このブレークワードを使用するための回避策はありますか?つまり、バグがなければ、そもそも「word-wrap:break-wird」が機能するはずのように機能させるのでしょうか。
matteo 2013年

1
@matteoこの答えはまさにその理由で私にとってよりうまくいきました:stackoverflow.com/a/18706058/234132
dochoffiday 2015

2
力を壊す問題は次の方法で解決できますword-break: break-word;
user1721713 2018年

1
私はちょうどこのようにスタックオーバーフローにサインアップしました
偽の

24

CSS3を使用しword-wrap: break-word;ます。WebKitベースのブラウザ(Safari、Chrome)でも動作します。

更新:忘れましたが、問題の要素は、暗黙的または明示的に固定要素として配置するか、ブロック要素として表示する必要があります。テーブルセル(td)には、を使用しますdisplay: inline-block;


1
私は両方を(別々に)試しましたが、残念ながら、テーブルのフォーマットがかなりひどく台無しになりました。
funLovinCoder 2010

私の悪い、使用しますdisplay: inline-block;
BalusC 2010

13

これはOPが尋ねたものの高度なバージョンです。

時々、私たちのクライアントは、単語の区切りの後に行末まで「-」を付けてほしいと言っています。

お気に入り

AAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBB

にブレーク

AAAAAAAAAAAAAAAAAAAAAAA-
BBBBBBBBB

そのため、サポートされている場合は新しいCSSプロパティがあり、通常は最新のブラウザでサポートされています。

.dont-break-out {

  /* These are technically the same, but use both */
  overflow-wrap: break-word;
  word-wrap: break-word;

  -ms-word-break: break-all;
  /* This is the dangerous one in WebKit, as it breaks things wherever */
  word-break: break-all;
  /* Instead use this non-standard one: */
  word-break: break-word;

  /* Adds a hyphen where the word breaks, if supported (No Blink) */
  -ms-hyphens: auto;
  -moz-hyphens: auto;
  -webkit-hyphens: auto;
  hyphens: auto;

}

私はこれを使っています。

誰かがこのような需要を持っていることを願っています。


11

自動テーブルレイアウトの場合は、属性max-widthとword-wrapを組み合わせて関連するtdのスタイルを設定してみてください。

例えば: <td style="max-width:175px; word-wrap:break-word;"> ... </td>

Firefox 32、Chrome 37、IE11でテスト済み。


理由はわかりませんが、でのみ機能しmax-width、では機能しませんwidth。それにもかかわらず、それは任意のポイントで単語を分割しないので、私にとって最良の解決策です。
ラジエル2018年

4

ゼロ幅スペース(&#8203;)を手動で挿入して、ブレークポイントを作成できます。


1
非標準のHTMLタグ<wbr>[「ワードブレイク」用]もあります。これと&#8203;ソリューションのブラウザサポートは次のとおり
oddsandends


0

これはFirefoxの長年の問題であり、MozillaとNetscapeを思い起こさせると思います。長いURLの表示に問題があったに違いありません。醜いハックなしでCSSで修正できるものではなく、レンダリングエンジンの問題だと思います。

デザインを変更するのは理にかなっています。

しかし、これは希望に満ちているように見えました:http//hacks.mozilla.org/2009/06/word-wrap/


0

私はプロジェクトにAngularを使用しており、単純なフィルターでこれを解決することができました。

テンプレート:

<td>{{string | wordBreak}}</td>

フィルタ:

app.filter('wordBreak', function() {
    return function(string) {
        return string.replace(/(.{1})/g, '$1​');
    }
})

あなたはそれを見ることができません$1が、目に見えないスペースがあった後(ヒントを@kingjeffreyに感謝します)、それはテーブルセルの単語区切りを可能にしました。


-1

これを行うための少しハックな方法の1つは、テキストを処理して各文字の間にスペースを追加することです。スペースを次のように置き換えます。&nbsp;次に、文字間隔のcss属性を使用してスペースを下げます。

私は知っています、それはハックです...しかし、他に何も機能しない場合は、問題なくラップするはずです。


2
それはとてもハッキーなので、正しいインデックス作成を混乱させ、実装するのが難しいので、まったく答えにはならないはずです:-)
Capsule
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.