DIVの長い単語で改行を強制するにはどうすればよいですか?


417

わかりました、これは本当に私を混乱させます。私はdivの中にいくつかのコンテンツを持っています:

<div style="background-color: green; width: 200px; height: 300px;">

Thisisatest.Thisisatest.Thisisatest.Thisisatest.Thisisatest.Thisisatest.

</div>

ただし、「単語」が長すぎるため、コンテンツはDIVをオーバーフローします(予想どおり)。

内部のすべてのコンテンツを収めるために必要な場合は、どうすればブラウザに単語を「分割」させることができますか?


この質問を見てみましょう:stackoverflow.com/questions/2046530/...を
nickf

回答:


609

使用する word-wrap:break-word;

IE6でも動作します。これは嬉しい驚きです。


word-wrap: break-wordoverflow-wrap: break-word;すべての最新のブラウザで動作するに置き換えられました。死んだブラウザであるIEは、word-wrap代わりに非推奨の非標準に永遠に依存します。

仕様によるword-wrapエイリアスであるため、今日の既存の使用は引き続き機能しoverflow-wrapます。


75
実際、ワードラップはIEの発明です。IEで機能するのは当然です:)
Savas Vedova

1
これをテーブルで機能させるには、をテーブルに適用する必要がある場合がありtable-layout: fixed;ます
Serj Sagan

28
word-wrap: break-word私にword-break: break-wordはうまくいきませんでしたが、@ rahulが提案したように、うまくいきました。
Yves

1
注:これはIEの親divで指定した場合にのみ機能します(div内の内部スパンには適用されません)。
SMS 2016年

125

ブラウザの互換性がわかりません

word-break: break-all;

また、<wbr>タグを使用できます

<wbr>(ワードブレーク)は、「必要に応じて、ブラウザはここに改行を挿入する場合があります。」ブラウザが改行を必要としない場合、何も起こらない必要があります。


23
その単語の区切りに注意してください。word-wrap:break-word;一方、行内の任意の文字が前に他の単語と一致する場合は、途中で単語を分割しますが、これは望ましい結果ではない可能性があります。単語を新しい行に移動し、コンテナ内の独自の行に収まらないほど長い場合にのみ単語を分割します。例:jsfiddle.net/4AKhn/1
alexteg

break-allはすべてを壊します。長いURLなどを含む特定のクラスでのみ使用できますが、BODYまたはPでは使用できません
Upendra

これは、ログテーブルセルにリクエストURIのようなものを表示しようとしていて、巨大な長いセルでテーブル全体を壊すのを止める必要がある場合は、完全に(そして望ましい)許容範囲です。「単語」の途中での改行が望まれます;)受け入れられた答えはこの点でしゃがみませんが。
IncredibleHat

@ Skelly1983 IE12のようなものはありません
TylerH

@TylerH私はこれを知っています。3年後にこれを指摘してくれてありがとう。これは、wbrタグのw3schoolsブラウザーサポートチャートにリストされています。これには、サポートが「Internet Explorer / Edge」としてリストされ、バージョン番号が12.0としてリストされています。これは、実際にはEdgeの最初のバージョンです。
Skelly1983

98

これは、「クロスブラウザ」ソリューションの承認済み回答に追加できます。

出典:

.your_element{
    -ms-word-break: break-all;
    word-break: break-all;

 /* Non standard for webkit */
     word-break: break-word;

    -webkit-hyphens: auto;
       -moz-hyphens: auto;
        -ms-hyphens: auto;
            hyphens: auto;
}

Chrome / OperaとSafariで取得しましたが、FirefoxとIEではまだ取得していません。これでFirefoxを解決しましたが、IEはまだコンテナーを通過しています(私は英数字のみの長いファイル名を持っています)。
カマフェザー2014年

1
こんにちはKamafeatherさん、わかりませんが、壊れようとしているifitisareallylongfilenameがある場合は、コンテキスト全体(ブラウザー、html-cssコード)がさらに役立つ可能性があります。おそらく、あなたの状況で別の質問を作成することができます。
Milche Patern

これは文法に反する場所で単語を壊すことに注意してください。

@ user1322720「文法に反する」場所とは何ですか?
TylerH

31

私は同じ問題をグーグルで調べていて、私の最終的な解決策をここに投稿しました。この質問にも関係があります。

スタイルを指定することで、divを使用してこれを簡単に行うことができますword-wrap: break-word(幅も設定する必要がある場合があります)。

div {
    word-wrap: break-word;         /* All browsers since IE 5.5+ */
    overflow-wrap: break-word;     /* Renamed property in CSS3 draft spec */
    width: 100%;
}

ただし、テーブルの場合は、以下も適用する必要がありますtable-layout: fixed。つまり、列の幅は流動的ではなくなり、最初の行の列の幅のみに基づいて(または指定された幅を介して)定義されます。詳細はこちら

サンプルコード:

table {
    table-layout: fixed;
    width: 100%;
}

table td {
    word-wrap: break-word;         /* All browsers since IE 5.5+ */
    overflow-wrap: break-word;     /* Renamed property in CSS3 draft spec */
}

1
テーブルソリューションをありがとう;)ただし、ブレークワードを自動レイアウトで使用できない理由がよくわかりません。なにか提案を?
ondObno 2014年

@ondObno技術的な理由はわかりませんが、いくつかのブラウザはこのように動作するようです。おそらく、超長い単語が各列の幅を決定するために必要なすべての計算を混乱させるためです。
Simon East

width: 100%;FFとクロームでこれを機能させるには、設定が唯一の方法でした!
Putzi San 2018

27

&#8203;ゼロ幅スペース(ZWSP)と呼ばれるUnicode文字のHTMLエンティティであり、改行の機会を指定する非表示の文字です。同様に、ハイフンの目的は、単語の境界内で改行する機会を指定することです。


1
とてもいいヒント!補足として&#8203;、空白よりも優先度が低くなります(つまり、近くに空白がある場合、行は空白で改行されます)。
CPHPython

<wbr/>探していたUnicodeと同等のようです
Xenos

20

flexboxを使用してに依存してwidth: autoいる場合、Firefox(v50.0.2)を除くほとんどの主要なブラウザー(Chrome、IE、Safari iOS / OSX)で以下を使用すると機能することがわかりました。

.your_element {
    word-wrap: break-word;   
    overflow-wrap: break-word;
    word-break: break-word;
}

注:自動プレフィックスを使用していない場合は、ブラウザベンダーのプレフィックスを追加する必要がある場合があります。

もう1つの注意点は、テキスト&nbsp;にスペースを使用すると、単語の途中で改行が発生する可能性があることです。


5
これはまさに私が必要としたものです。他のソリューションは幅100%で機能しませんでした。注意すべきこと:単語分割:分割単語; 単語区切りにする
jscul 2017年




3

空白はブラウザによって保持されます。テキストは必要に応じて折り返され、改行されます

.pre-wrap {
    white-space: pre-wrap;
    word-break: break-word;
}

デモ

td {
   word-break: break-word;
   white-space: pre-wrap;
   -moz-white-space: pre-wrap;      
}

table {
    width: 100px;
    border: 1px solid black;
    display: block;
}
<table>
<tr><th>list</th>
<td>
1.longtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtextlongtext
2.breaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreaklinebreakline
</td>
</tr>
</table>


2

MDNから:

overflow-wrapブラウザがそのコンテンツボックスをオーバーフローテキストを防ぐために、言葉の中に改行を挿入する必要があるか否かのCSSプロパティで指定。

とは対照的にword-breakoverflow-wrapオーバーフローせずに単語全体を独自の行に配置できない場合にのみ、ブレークが作成されます。

だからあなたは使うことができます:

overflow-wrap: break-word;

使用できますか?


2

まず、要素の幅を特定する必要があります。例えば:

#sampleDiv{
  width: 80%;
  word-wrap:break-word;
}
<div id="sampleDiv">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>

テキストが要素の幅に達すると、行に分割されます。


2

davidcondreyの返信@で述べたように、そこだけZWSPはないですが、またSHY &#173; &shy;非常に長いで使用することができる、その場で壊れする必要が構築された単語(ドイツ語やオランダ語を考える)あなたはそれになりたいです。非表示ですが、必要なときにハイフンを使用できるので、単語の連結と行の塗りつぶしを最大限に維持できます。

このようにして、luchthavenpolitieagentlucht&shy;haven&shy;politie&shy;agentという単語は、その単語の音節より長い部分を提供することに注意してください。
私はそれについて公式に何も読んだことはありませんが、これらのソフトハイフンは、構成要素の単一の単語の公式ハイフンよりもブラウザで高い優先順位を取得できます(拡張機能がある場合)。
実際には、このように長く構成された単語をそれ自体で破壊できるブラウザはありません。小さな画面では、新しい行が表示されたり、場合によっては1単語の行(構成された単語のうち2つが続く場合など)になることもあります。

参考:空港の警察官にとってはオランダ語です


0

word-break:word-break:break-wordよりも通常のほうが適しているように思われます。

word-break: normal


-4

私たちのスタイルでこれを試してみてください

white-space: normal;

1
複数の質問にわたって回答を複製することは、ほとんどの場合眉をひそめています。この場合、両方の質問に対する答えが間違っているようです。normalデフォルトwhite-space値です。追加しても問題の例には影響がないと思います。間違えたら訂正してください。
Jeremy Banks、

これはCSSによって行われたオーバーライドに依存します。私の場合、JSFコンポーネントの「スタイル」で再宣言して、「white-space:normal;」ではないデフォルトのCSSスタイルをオーバーライドする必要がありました。
Benjamin Fuentes
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.